Seite 1 von 2

Window Gadgets (gelöst)

Verfasst: 20.04.2006 23:12
von PureBaser
Hi,

ich beschäftige mich gerade mit den Gadgets...

1) Kann man bei StringGadget keine maximale Eingäbelänge festlegen?
2) Das "&"-Zeichen unterstreicht die Button - wie kann ich es selber in Buttons als Zeichen einfügen? Chr(38) funktioniert nicht!
3) Kann mir folgender Text jemand genauer erklären?
OpenWindow() öffnet ein neues Fenster entsprechend den übergegebenen Parametern. Wenn #PB_Any als '#Window' Parameter verwendet wird, dann wird der Identifier des neuen Fensters als 'Ergebnis' zurückgegeben. :freak:

Thx![/b]

Verfasst: 20.04.2006 23:37
von AND51
Hallo!

Zu 1.) Uch habe auch schon nach sowas gesucht, es geht offenbar nicht. Ich starte einfach einen Thread, der das Gadget permanent überwacht und überlange Strings in dem gadget entsprechend kürzt.

Zu 2.) Das ist auch in TextGadgets und Menüs so; ich habe auch schon einmal nachgefragt, aber keine wusste so recht eine Antwort. Vielleicht heißt das Zauberwort hier API?
Versuche doch mal, deinen Button mit zwei & zu versehen; der erste Unterstreicht, der Zweite sollte korret erscheinen.

Zu 3.) Der erste Parameter bei OpenWindow() ist der identifier, also die Nummer, unter der das Fenster programmweit erkannt wird. Setzt du statt (d)einer Zahl jedoch #PB_Any ein, so setzt der Compiler für dich automatisch eine "freie", zulässige Zahl ein.

Diese kannst du wie folgt ermitteln:

Code: Alles auswählen

;      ohne #PB_Any:
OpenWindow(27, .....        ; Die Programmweite Nummer, also der Identifier wäre hier (selbst ausgesucht) 27


;     mit #PB_Any
Identifier=OpenWindow(#PB_Any, ....... OpenWundow() gibt hier den Identifier des neuen fensters zurück, da #PB_Any eingesetzt wurde
Das gleiche Schema kannst du auch bei Gadgets, Sprites, Images, Dateien, fast allem anwenden.

Verfasst: 20.04.2006 23:38
von benpicco
zu 1.: Naja, man kann es abfragen:

Code: Alles auswählen

[...]
if WindowEvent=#DeinStringGadget
 if len(getgadgettext(#DeinStringGadget))>max
  setgadettext(#DeinStringGadget,left(getgadgettext(#DeinStringGadget),max)
endif
[...]
zu2.: && --> &
zu 3.: WindowID=Openwindow(#pb_any,...) heißt, das WindowID nun die Zahl enthält, die du normalerweise statt #pb_any übergibst (z.b. 3), es aber eine Zahl ist, die von noch keinem anderen Window verwendet wird.
So kannst du nun mit WindowID Sachen machen wie CloseWindow(WindowID), die sonst CloseWindow(3) hießen.
edit:Mist, zu langsam.... :wink:

Verfasst: 20.04.2006 23:48
von PureBaser
Alles klar! :allright:

Verfasst: 21.04.2006 01:29
von ts-soft
>> 1) Kann man bei StringGadget keine maximale Eingäbelänge festlegen?

Code: Alles auswählen

SendMessage_(GadgetID(#StringGadget),#EM_EXLIMITTEXT, 0, AnzahlZeichen.l)

Verfasst: 21.04.2006 10:26
von Shardik
Die von ts-soft angegebene Anweisung

Code: Alles auswählen

SendMessage_(GadgetID(#StringGadget),#EM_EXLIMITTEXT, 0, AnzahlZeichen.l)
funktioniert nur bei einem Rich Edit control wie z.B. dem EditorGadget, aber nicht beim StringGadget:

MSDN:
http://msdn.microsoft.com/library/defau ... ittext.asp
The EM_EXLIMITTEXT message sets an upper limit to the amount of text the user can type or paste into a rich edit control.
Folgendes Beispiel begrenzt die Eingabelänge einer Zeichenkette in einem EditorGadget unter PB 3.94 auf 8 Zeichen:

Code: Alles auswählen

#MaxChars = 8

If OpenWindow(1, 0, 0, 220, 40, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Begrenzung der Eingabelänge")
  If CreateGadgetList(WindowID())
    EditorGadget(1, 70, 10, 60, 20, "")
    SendMessage_(GadgetID(1), #EM_EXLIMITTEXT, 0, #MaxChars)
    ActivateGadget(1)
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
EndIf

Verfasst: 21.04.2006 10:55
von ts-soft
Da hab ich mich wohl vertan, #EM_SETLIMITTEXT könnte es sein :freak: für ein Edit Control!

Code: Alles auswählen

SendMessage_(GadgetID(#StringGadget),#EM_SETLIMITTEXT, AnzahlZeichen.l, 0)

Verfasst: 21.04.2006 11:20
von Mr.X
Anzahl d. Zeichen begrenzen mit

Code: Alles auswählen

SendMessage_(GadgetID(#StringGadget),#EM_SETLIMITTEXT, AnzahlZeichen.l, 0)
funktioniert auch bei einem StringGadget, ehrlich. Ich hab's grad' noch getestet.

Mr.X

Verfasst: 21.04.2006 11:31
von Shardik
Mit #EM_SETLIMITTEXT funktioniert es auch mit dem StringGadget (allerdings muß der Maximalwert als wParam angegeben werden und nicht als lParam wie im EditorGadget-Beispiel /:-> ):

Code: Alles auswählen

#MaxChars = 8

If OpenWindow(1, 0, 0, 220, 40, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "Begrenzung der Eingabelänge")
  If CreateGadgetList(WindowID())
    StringGadget(1, 70, 10, 60, 20, "")
    SendMessage_(GadgetID(1), #EM_SETLIMITTEXT, #MaxChars, 0)
    ActivateGadget(1)
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
EndIf

Verfasst: 21.04.2006 11:38
von Karl
Wenn du den Visual Designer benutzt, dann erzeugt der diesen Befehl für die Textlängenbegrenzung:

Code: Alles auswählen

SendMessage_(GadgetID(..), #EM_LIMITTEXT, Begrenzung.l, 0)
Klingt alles ähnlich.

Bis dann.

Karl