Seite 1 von 2
PasswortRequester
Verfasst: 29.03.2006 16:46
von Scarabol
Hallo Leute,
ich habe mir einen eigenen PasswordRequester als Prozedur geschrieben.
Aber leider werden bei Aufruf immer die Gadgets meiner anderen Fenster gestört. Wie kann ich den Requester sozusagen autonom machen, sodass er keine anderen Gadgets, Variablen oder Funktionen beeinflusst?
Hier noch der Code:
Code: Alles auswählen
Procedure$ PasswordRequester(Title$, Text$)
OpenWindow(1, 1, 1, 294, 98, #PB_Window_ScreenCentered, Title$)
AddKeyboardShortcut(1, #PB_Shortcut_Return, 4)
CreateGadgetList(WindowID(1))
TextGadget(1, 10, 10, 280, 20, Text$)
StringGadget(2, 10, 32, 274, 21, "", #PB_String_Password)
ActivateGadget(2)
ButtonGadget(3, 107, 68, 80, 25, "Ok", #PB_Text_Center)
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
If EventGadgetID() = 3
Break
EndIf
ElseIf EventID = #PB_Event_Menu
If EventMenuID() = 4
Break
EndIf
EndIf
ForEver
CloseWindow(1)
RemoveKeyboardShortcut(1, 4)
ProcedureReturn GetGadgetText(2)
EndProcedure
Gruß Scarabol
Verfasst: 29.03.2006 16:54
von Kaeru Gaman
ich würds sowieso so machen, das das fenster ne eingabe bekommen muss,
bevor das hauptfenster fortfahren kann, so wie bei ner msgbox...
...wozu der shortcut?
...den gadgettext für den rückgabewert würde ich auslesen, bevor ich das fenster schließe...
Verfasst: 29.03.2006 17:36
von Macros
Und dem Fenster eine Numer wie z.B. 997 geben,
sonst "überschreibt" es eventuell ein vorher geöffnetes Fenster, genauso bei den Gadgets, hohe Zahlen vergeben.
Auch den Shortcut nicht vergessen. (Der übrigens durchaus Sinn hat)
Verfasst: 29.03.2006 17:49
von ts-soft
Macros hat geschrieben:Und dem Fenster eine Numer wie z.B. 997 geben,
sonst "überschreibt" es eventuell ein vorher geöffnetes Fenster, genauso bei den Gadgets, hohe Zahlen vergeben.
Auch den Shortcut nicht vergessen. (Der übrigens durchaus Sinn hat)
Warum schlägst Du nicht das naheliegende vor, dynamische Erstellung mit
#PB_Any. Dafür ist das ja da.
Wenn jeder hohe Nummern nimmt, verbraucht er unnötig Speicher und es
knallt dann auch früher oder später

Verfasst: 30.03.2006 11:47
von Sven
ts-soft hat geschrieben:Wenn jeder hohe Nummern nimmt, verbraucht er unnötig Speicher und es knallt dann auch früher oder später

Warum? Ist es nicht jedesmal ein Long? Oder wird da was reserviert?
Aber klar, sowas sollte man mit #PB_Any machen.
Sven
Verfasst: 30.03.2006 12:02
von ts-soft
Sven hat geschrieben:
Warum? Ist es nicht jedesmal ein Long? Oder wird da was reserviert?
Aber klar, sowas sollte man mit #PB_Any machen.
Sven
GadgetStructure findeste im SDK beschrieben. Durchnummerieren am besten
mit Enumeration und #PB_Any sorgen IMHO für einen zusammenhängenden
Bereich ohne Speicherverschwendung!
Verfasst: 31.03.2006 17:44
von Scarabol
Wird der Shortcut automatisch entfernt wenn das Fenster geschlossen wird?
Wieso bekomme ich die Meldung das das Fenster nicht initialisiert wäre, an der Stelle an der der Shortcut hinzukommt?
Hier nochmal der neue Code:
Code: Alles auswählen
Procedure$ PasswordRequester(Title$, Text$)
WindowID = #PB_Any
If OpenWindow(WindowID, 1, 1, 294, 98, #PB_Window_ScreenCentered, Title$)
MenuID = #PB_Any
AddKeyboardShortcut(WindowID, #PB_Shortcut_Return, MenuID)
CreateGadgetList(WindowID(1))
TextGadget = TextGadget(#PB_Any, 10, 10, 280, 20, Text$)
StringGadget = StringGadget(#PB_Any, 10, 32, 274, 21, "", #PB_String_Password)
ActivateGadget(StringGadget)
ButtonGadget = ButtonGadget(#PB_Any, 107, 68, 80, 25, "Ok", #PB_Text_Center)
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
If EventGadgetID() = ButtonGadget
Break
EndIf
ElseIf EventID = #PB_Event_Menu
If EventMenuID() = MenuID
Break
EndIf
EndIf
ForEver
RemoveKeyboardShortcut(WindowID, MenuID)
Password$ = GetGadgetText(StringGadget)
CloseWindow(WindowID)
ProcedureReturn Password$
EndIf
EndProcedure
Gruß
Scarabol
Verfasst: 31.03.2006 18:15
von Kiffi
> Wieso bekomme ich die Meldung das das Fenster nicht initialisiert wäre,
> an der Stelle an der der Shortcut hinzukommt?
Du verwendest #PB_Any falsch. Die Konstante #PB_Any hat den Wert -1.
Code: Alles auswählen
Procedure$ PasswordRequester(Title$, Text$)
WindowID = #PB_Any
If OpenWindow(WindowID, 1, 1, 294, 98, #PB_Window_ScreenCentered, Title$)
[...]
sollte eher so aussehen:
Code: Alles auswählen
Procedure$ PasswordRequester(Title$, Text$)
WindowID = OpenWindow(#PB_Any, 1, 1, 294, 98, #PB_Window_ScreenCentered, Title$)
If WindowID
[...]
Die MenüID sollte auch nicht den Wert #PB_Any haben:
sollte geändert werden in
Ausserdem übergibst Du CreateGadgetList die falsche WindowID.
anstelle von
sollte das eher so aussehen:
Grüße ... Kiffi
Verfasst: 31.03.2006 18:18
von Macros
Ersetze
Code: Alles auswählen
MenuID = #PB_Any
AddKeyboardShortcut(WindowID, #PB_Shortcut_Return, MenuID)
mit
Verfasst: 01.04.2006 10:06
von Scarabol
nochmals Danke
aber kann ich das remove keyboardshortcut nicht weglassen?
und bekomme ich nicht Probleme wenn ich MenuID = 1 setze?
Gruß Scarabol