Return-Taste und ButtonGadgets

Für allgemeine Fragen zur Programmierung mit PureBasic.
Hypersoft
Beiträge: 22
Registriert: 04.10.2004 16:14

Return-Taste und ButtonGadgets

Beitrag von Hypersoft »

Hi!
Ich habe zu folgendem Problem bisher weder in den Codes auf purearea.net noch im Forum eine Lösung gefunden:
Ich habe ein Dialogfeld programiert, indem sich ein Textfeld sowie ein OK-Schalter und ein Abbrechen-Schalter befinden. Ich möchte den OK - und den Abbrechenschalter auch mit der Return-Taste aktivieren können. Im Gegensatz zu normalen Windowsbuttons ist dies beim Buttongadget nicht möglich. Im Codearchiv fand ich nur Beispiele, die dieses Problem mit dem Befehl "AddKkeyboardShortcut" umgingen. Dies läst sich jedoch nur für einen einzigen Schalter einsetzen und nicht für zwei, welche zu dem noch unterschiedliche funktionen besitzen! Ich würde mich sehr über Antworten freuen!
MfG
Hypersoft
sbehrens
Beiträge: 274
Registriert: 08.09.2004 18:41
Kontaktdaten:

Beitrag von sbehrens »

Hi Hypersoft,
hm, du könntest doch einfach einen

Code: Alles auswählen

MessageRequester("","")
benutzen, das funzt bei mir mit Enter... Und willst du jetzt das mit Enter der OK-Button und der Cancel-Button aktiviert wird?!? Das muss ich falsch verstanden haben, weil das geht schlecht.

mfG
Basti
enjoy life... while you can!
horst
Beiträge: 70
Registriert: 08.09.2004 19:33
Wohnort: München
Kontaktdaten:

Re: Return-Taste und ButtonGadgets

Beitrag von horst »

@Hypersoft:
> .. Dies läst sich jedoch nur für einen einzigen Schalter einsetzen und nicht
> für zwei, welche zu dem noch unterschiedliche funktionen besitzen!

Da der Fokus vor dem Drücken der Enter-Taste vom User gesetzt wird (z.B. per TAB-Taste), musst du den aktuellen Fokus abfragen, also unter Windows:

Code: Alles auswählen

if GetFocus_() = GadgetID(#OkButton)  : ....
Ein anderes Problem ist die Markierung als Default Button (dunkle Umrandung außer der gepunkteten Fokus-Umrandung). Diese sollte möglichst mit dem Fokus mitwandern, da hiermit dem User die Möglichkeit der Enter-Tasten-Benutzung signalisiert wird. Das geht auch per API, aber etwas komplizierter. Bei Interesse frag halt.
horst
Andreas
ToolbarKönig
Beiträge: 142
Registriert: 08.09.2004 08:33

Beitrag von Andreas »

Vielleicht etwas in der Art ?

Code: Alles auswählen

  Procedure BCB(wnd,msg,wparam,lparam)
  If msg = #WM_CLOSE
     RemoveProp_(wnd,"Prop")
  EndIf
  If msg = #WM_KEYDOWN
     If wparam = #VK_RETURN;wenn Return dann
        wParam = #VK_SPACE;Return = Space
     EndIf
  EndIf
  ProcedureReturn CallWindowProc_(GetProp_(wnd,"Prop"),wnd,msg,wparam,lparam)
  EndProcedure
  
  If OpenWindow(0,0,0,222,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ButtonGadgets") And CreateGadgetList(WindowID(0)) 
    ButtonGadget(0, 10, 10, 200, 24, "ENTER Button") 
    SetProp_(GadgetID(0),"Prop",SetWindowLong_(GadgetID(0),#GWL_WNDPROC,@BCB()))
    Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow 
  EndIf 
Gruss Andreas
Hypersoft
Beiträge: 22
Registriert: 04.10.2004 16:14

Beitrag von Hypersoft »

Ihr habt mir sehr weitergeholfen!
Danke! Könntet ihr mir bitte noch schnell die API-Befehle erklähren (nur so ungefähr)? Schon mal danke für die bisherigen Antworten!
MfG
Hypersoft
Antworten