Seite 1 von 2
Panel Tab Index über Name ermitteln
Verfasst: 01.05.2008 20:02
von FGK
Hab das bei einem Projekt als ganz nützlich empfunden und
wollts teilen. (obwohls nix außergewöhnliches ist)
Folgende Procedure ermittelt über den Namen des
Tabs seinen Index sodaß man mit SetGadgetState dieses
gefundene Tab auswählen kann ohne seinen Index zu kennen.
Ist nützlich wenn Paneltabs programmgesteuert hinzugefügt oder
entfernt werden. Ähnlich der VB Property Item das nen Index
ebenso wie nen Key zur Auswahl akzeptiert.
Code: Alles auswählen
Procedure.l GetPanelTabIndexByName(Gadget.l,TabName.s)
Protected I.l
Protected result.l = -1
If IsGadget(Gadget) And GadgetType(Gadget)=#PB_GadgetType_Panel
TabName = UCase(TabName)
For I = 0 To CountGadgetItems(Gadget)
If UCase(GetGadgetItemText(Gadget,I))=TabName
result = I
Break
EndIf
Next
EndIf
ProcedureReturn result
EndProcedure
Wers brauchen kann - viel Spaß damit
Gruß FGK
Verfasst: 01.05.2008 21:09
von Fluid Byte
Mag sein das ich ein wenig pedantisch bin aber Ordnung muss sein.
Code: Alles auswählen
Procedure GetPanelTabIndexByName(Gadget,TabName.s)
Protected i, Result = -1
If IsGadget(Gadget) And GadgetType(Gadget) = #PB_GadgetType_Panel
For i = 0 To CountGadgetItems(Gadget) - 1
If UCase(GetGadgetItemText(Gadget,i)) = UCase(TabName)
Result = i : Break
EndIf
Next
EndIf
ProcedureReturn Result
EndProcedure
Verfasst: 02.05.2008 08:00
von FGK
@Fluid Byte
Mag sein das ich ein wenig pedantisch bin aber Ordnung muss sein.
Da wiederspreche ich dir mal nicht
Aber du hast natürlich völlig recht das -1 in der Schleife ist
wichtig. Danke für den Hinweis.
Das ständige UCASE beim Vergleich des übergebenen
Tabnames gegenüber meiner einmaligen Anpassung laß ich jetzt einfach
mal so stehen.
Gruß FGK
Verfasst: 02.05.2008 12:34
von Fluid Byte
FGK hat geschrieben:Das ständige UCASE beim Vergleich des übergebenen
Tabnames gegenüber meiner einmaligen Anpassung laß ich jetzt einfach
mal so stehen.
Naja, du hattest das voher nur bei 'Tabnames' gemacht aber trotzdem bei GetGadgetItemText() benutzt. War also jack in die Hose. Entweder beides UCase() oder voher zwischenspeichern.
Verfasst: 03.05.2008 15:29
von NicTheQuick
'GetGadgetItemText()' ändert sich aber pro Schleifendurchlauf und 'Tabname'
nicht. Deswegen muss 'UCase()' bei ersterem immer und bei letzterem nur
einmal verwendet werden.
Verfasst: 03.05.2008 19:12
von Fluid Byte
Wer lesen kann ist klar im Vorteil!

Verfasst: 03.05.2008 19:17
von DarkDragon
Fluid Byte hat geschrieben:Mag sein das ich ein wenig pedantisch bin aber Ordnung muss sein.
Code: Alles auswählen
Procedure GetPanelTabIndexByName(Gadget,TabName.s)
Protected i, Result = -1
If IsGadget(Gadget) And GadgetType(Gadget) = #PB_GadgetType_Panel
For i = 0 To CountGadgetItems(Gadget) - 1
If UCase(GetGadgetItemText(Gadget,i)) = UCase(TabName)
Result = i : Break
EndIf
Next
EndIf
ProcedureReturn Result
EndProcedure
[Pedanterie]"Mag sein
, das
s ich ein wenig pedantisch bin aber Ordnung muss sein. "[/Pedanterie]

Verfasst: 03.05.2008 20:12
von FGK
@Fluid Byte
Ich hoffe daß das
Wer lesen kann ist klar im Vorteil!
sich auf das
Das ständige UCASE beim Vergleich des übergebenen
Tabnames gegenüber meiner einmaligen Anpassung laß ich jetzt einfach
mal so stehen.
bezieht! Ich habs einfach von dir so im Raum stehen lassen um nicht als rechthaberischer, nicht kritikfähiger
Korinthenka..er dargestellt zu werden.

Danke an Nick der dich auf diese Tatsache hingewiesen hat.
Gruß FGK
Verfasst: 03.05.2008 20:22
von ts-soft
Das mit dem UCase "sollte" der PBCompiler optimieren, aber ob dem so ist,
möchte ich mal nach meinen Erfahrungen, bezweifeln.
Code: Alles auswählen
If UCase(GetGadgetItemText(Gadget,i)) = UCase(TabName)
Hinter Gadget, fehlt ein Space vorm i
Ist zwar nicht wichtig und erforderlich, aber es liest sich besser

Ich finde es eben schöner, wenn hinter einem Komma ein Space folgt, dem
Compiler ist das aber egal

Verfasst: 03.05.2008 23:58
von Leonhard
Dann machen wir es doch gleich mal, bevor wir auf etwas anderes vertrauen (Ach ja, ich hab die Result-Variable weg-gekürzt. Ob das Optimeirt ist, weiß ich nicht genau.):
Code: Alles auswählen
Procedure GetPanelTabIndexByName(Gadget,TabName.s)
Protected i
If IsGadget(Gadget) And GadgetType(Gadget) = #PB_GadgetType_Panel
TabName = UCase(TabName)
For i = 0 To CountGadgetItems(Gadget) - 1
If UCase(GetGadgetItemText(Gadget,i)) = TabName
ProcedureReturn i
EndIf
Next
EndIf
ProcedureReturn -1
EndProcedure