Seite 2 von 2
Verfasst: 04.05.2008 00:39
von Fluid Byte
@DD:
Das mal ein echter Millimeter******!
@FCKW & nic:
Ihr verpeilt es immer noch.
Das Argument von FCKW war das er den Tab-Namen vorher in die Variable 'Tabname' zwischenspeichert um nicht ständig UCase() aufrufen zu müssen. Es dann aber trotzdem in der FOR/NEXT Schleife kontinuierlich mit GetGadgetItemText() verwendet. Entweder beide zwischenspeichern oder nicht, sonst ist es (wie ich bereits sagte) jack in die Hose.
Wenn man sich aber schon groß auf Optimierung beruft müssten GetGadgetItemText() und CountGadgetItems() ebenfalls ausgelagert werden:
Code: Alles auswählen
Procedure GetPanelTabIndexByName(Gadget,TabName.s)
Protected i, Result = -1, ItemsNum, ItemName
If IsGadget(Gadget) And GadgetType(Gadget) = #PB_GadgetType_Panel
ItemsNum = CountGadgetItems(Gadget) - 1
TabName = UCase(TabName)
ItemName = UCase(GetGadgetItemText(Gadget,i))
For i = 0 To ItemsNum
If ItemName = TabName : Result = i : Break : EndIf
Next
EndIf
ProcedureReturn Result
EndProcedure
Gelle?

Verfasst: 04.05.2008 01:37
von edel
Hae, hast du getrunken ?
GetGadgetItemText(Gadget,i) ausserhalb der Schleife bringt ueberhaupt nichts.
Schade das der Code zu gross fuer die Signatur ist

Verfasst: 04.05.2008 02:55
von Fluid Byte
Es um den Funktionsaufruf du Depp!

Verfasst: 04.05.2008 11:13
von FGK
@Fluid Byte
So Freundchen... Jetzt mach mal nen Punkt!
Ein Depp ist hier wohl keiner außer vielleicht derjenige
der solche Kraftausdrücke braucht um zu argumentieren!
Und der einzige ders echt nicht verstanden hat bist du.
Es soll ja nicht jedes Ucase auf Teufel komm raus eingespart
werden sondern nur der sich wiederholende Funktionsaufruf
von UCase für Tabname.
Ich gehe mal davon aus daß du ja sonst recht fähige Codes
hier im Forum postest, du genau weist was wir meinen, aber
leider nur sehr schwer zugeben kannst daß du auch mal
was in den Sources verpeilst.
Wenn ich gewußt hätte daß das dieser lumpige Source
hier im Thread solche Wellen schlägt dann hätte ich es
lieber gelassen und Friede wäre im Forum geblieben!
Gruß FGK
PS: Die "Optimierung" von Leonhard gefällt mir - da spart man
sich ne unnötige Variable auf dem Stack.

Verfasst: 04.05.2008 12:51
von NicTheQuick
So wäre es im Grunde nochmal besser optimiert:
Code: Alles auswählen
Procedure.l GetPanelTabIndexByName(Gadget.l, TabName.s)
Protected i.l
If IsGadget(Gadget) And GadgetType(Gadget) = #PB_GadgetType_Panel
TabName = UCase(TabName)
i = CountGadgetItems(Gadget)
While i
i - 1
If UCase(GetGadgetItemText(Gadget, i)) = TabName
ProcedureReturn i
EndIf
Wend
EndIf
ProcedureReturn -1
EndProcedure
Ich habe die langsame For-Schleife durch eine While-Schleife ersetzt und
lasse 'CountGadgetItems()' nur einmal aufrufen anstatt jeden Durchlauf.
Außerdem habe ich die Variablen den Typ Long gegeben, damit die
Procedure auch 100%ig funktioniert, selbst wenn jemand 'Define.b' in
seinem Code nutzt. Allerdings wird aus diesem Grund der Index von
hinten nach vorne durchlaufen, was aber kein Problem darstellen sollte,
solange es keine doppelten Namen gibt.
Ich hoffe jetzt hat niemand mehr was zum meckern.
Verfasst: 04.05.2008 14:52
von X0r
Jetzt bleibt mal ruhig.
Wenn ich gewußt hätte daß das dieser lumpige Source
hier im Thread solche Wellen schlägt dann hätte ich es
lieber gelassen und Friede wäre im Forum geblieben!
Naja, bei einem lumpigen Source(Welchen man in diesem Fall wirklich nicht braucht..) muss man halt mit Verarschung rechnen. (Meine Meinung)
Verfasst: 04.05.2008 15:02
von ts-soft
Exclusive Oder, den lumpigen Kommentar hätteste Dir auch sparen können.
Den braucht hier auch keiner.
Verfasst: 04.05.2008 15:04
von AND51
> lumpige Source
Das ist kein lumpiger Source, es ist einer dieser Codes, die zeigen "wie's geht".
Wir posten hier nicht nur für die "Coder-Elite" (für die ist dieser Code in der Tat nicht der Knaller), sondern auch für die Anfänger, die sowas sicherlich brauchen können.
> muss man halt mit Verarschung rechnen
Mein Code zur Auslistung aller Laufwerke ohne API ist auch nicht der Brüller, erntete aber in der Tat weniger Offtopic-Gesülz als hier. Niemand, der Codes postet sollte mit Verarschungen rechnen, eher sollte man die Posts der "Verarscher" löschen. Die Coder haben keine Verarschungen verdient.
Verfasst: 04.05.2008 15:05
von NicTheQuick
Jeder Anfänger darf hier Code posten, den er für nützlich hält. Und wenn
jemand anderes den Code "wirklich nicht braucht", weil er ja so unnötig ist,
dann soll er ihn eben nicht benutzen und einfach mal die Fresse halten.
Meine Meinung.
Und solange der Threadstarter nichts einzuwenden hat, wird an dieser Stelle
jetzt auch mal geschlossen.