PasswortRequester

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

PasswortRequester

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag 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)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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 :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Sven
Beiträge: 374
Registriert: 23.09.2004 12:01

Beitrag 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 :wink:
Warum? Ist es nicht jedesmal ein Long? Oder wird da was reserviert?

Aber klar, sowas sollte man mit #PB_Any machen.

Sven
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag 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
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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:

Code: Alles auswählen

MenuID = #PB_Any
sollte geändert werden in

Code: Alles auswählen

MenuID = 1 ; oder eine andere Zahl > -1 
Ausserdem übergibst Du CreateGadgetList die falsche WindowID.

anstelle von

Code: Alles auswählen

CreateGadgetList(WindowID(1))
sollte das eher so aussehen:

Code: Alles auswählen

CreateGadgetList(WindowID(WindowID))
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Ersetze

Code: Alles auswählen

MenuID = #PB_Any
AddKeyboardShortcut(WindowID, #PB_Shortcut_Return, MenuID) 
mit

Code: Alles auswählen

AddKeyboardShortcut(WindowID, #PB_Shortcut_Return, 1) 
Benutzeravatar
Scarabol
Beiträge: 1427
Registriert: 30.11.2005 21:00

Beitrag von Scarabol »

nochmals Danke

aber kann ich das remove keyboardshortcut nicht weglassen?
und bekomme ich nicht Probleme wenn ich MenuID = 1 setze?

Gruß Scarabol
Abgeschlossen Projekte:
Schreibmaschine, Bildschirmlupe, Wings3DtoOgreMeshConverter
Watch: PureArea

PB-V: 4
WinXP
Antworten