Stringedget selektieren wenn es den focus erhält

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Stringedget selektieren wenn es den focus erhält

Beitrag von Pure_Beginner »

Hallo zusammen bin neu hier, hab mir purebasic zusammen mit purvision xp gekauft und bin beeindruckt von der geschwindigkei.

nun zu meiner frage, ein stringgadget soll sobald es den focus erhält markiert werden,
wie kann ich das erreichen.

bin leider durch vb.net etwas verdorben.

wäre für hilfe sehr dankbar. :freak:

__________________________________________________
Thread verschoben
Offtopic>Allgemein
30.09.2011
RSBasic
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Stringedget selektieren wenn es den focus erhält

Beitrag von Danilo »

Pure_Beginner hat geschrieben:nun zu meiner frage, ein stringgadget soll sobald es den focus erhält markiert werden,
wie kann ich das erreichen.
Auf Windows mit SendMessage_(GadgetID,#EM_SETSEL,0,-1).

Code: Alles auswählen

  ; Shows possible flags of StringGadget in action...
  If OpenWindow(0, 0, 0, 322, 205, "StringGadget Flags", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    StringGadget(0, 8,  10, 306, 20, "Normal StringGadget...")
    StringGadget(1, 8,  35, 306, 20, "1234567", #PB_String_Numeric)
    StringGadget(2, 8,  60, 306, 20, "Readonly StringGadget", #PB_String_ReadOnly)
    StringGadget(3, 8,  85, 306, 20, "lowercase...", #PB_String_LowerCase)
    StringGadget(4, 8, 110, 306, 20, "uppercase...", #PB_String_UpperCase)
    StringGadget(5, 8, 140, 306, 20, "Borderless StringGadget", #PB_String_BorderLess)
    StringGadget(6, 8, 170, 306, 20, "Password", #PB_String_Password)
    Repeat
        Select WaitWindowEvent()
            Case #PB_Event_CloseWindow
                Break
            Case #PB_Event_Gadget
                If EventType() = #PB_EventType_Focus And GadgetType(EventGadget())=#PB_GadgetType_String
                    SendMessage_(GadgetID(EventGadget()),#EM_SETSEL,0,-1)
                EndIf
         EndSelect
    ForEver
  EndIf
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: Stringedget selektieren wenn es den focus erhält

Beitrag von Pure_Beginner »

dankeschön für die schnelle antwort,
funktioniert super, kann ich den code auch auf die buttongadgets ausweiten ?

mir ist das mit dem einbinden in die schleife noch nicht ganz klar,
komm aber schonnoch dahinter. <)
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Stringedget selektieren wenn es den focus erhält

Beitrag von Kiffi »

Pure_Beginner hat geschrieben:kann ich den code auch auf die buttongadgets ausweiten ?
Du willst den Text des ButtonGadgets selektieren?
Welchen Sinn würde das machen?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: Stringedget selektieren wenn es den focus erhält

Beitrag von Pure_Beginner »

nicht der text des buttons soll selektiert werden sondern der button selbst,
wenn man z.b. von einem button zu anderen mittels der tabtaste springt damit man erkennt wo man gerade ist :bluescreen:
hab schon einiges ausprobiert um vom meinen nun selekirten Stringgadgets auf die buttons zu springen und zu selektieren, funkioniert aber leider nicht
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Stringedget selektieren wenn es den focus erhält

Beitrag von CSHW89 »

Schau dir mal in der Hilfe den Befehl SetActiveGadget an.
lg Kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Stringedget selektieren wenn es den focus erhält

Beitrag von Danilo »

Pure_Beginner hat geschrieben:nicht der text des buttons soll selektiert werden sondern der button selbst,
wenn man z.b. von einem button zu anderen mittels der tabtaste springt damit man erkennt wo man gerade ist :bluescreen:
hab schon einiges ausprobiert um vom meinen nun selekirten Stringgadgets auf die buttons zu springen und zu selektieren, funkioniert aber leider nicht
Normal siehst Du bei Buttons eine kleine gestrichelte Linie drum herum,
wenn sie aktiviert sind. Funktioniert bei mir mit XP Style angeschalten
allerdings nicht immer (ohne XP Style dagegen immer).

Probier es mal mit #BS_DEFPUSHBUTTON wie in Dialogen:

Code: Alles auswählen

Procedure myButtonProc(hWnd,msg,wParam,lParam)
    gadget = GetWindowLong_(hWnd,#GWL_ID)
    Select msg
        Case #WM_KILLFOCUS
            style = GetWindowLong_(hWnd,#GWL_STYLE)
            SetWindowLong_(hWnd,#GWL_STYLE,~#BS_DEFPUSHBUTTON & style)
            InvalidateRect_(hWnd,0,1)
            ProcedureReturn 0
        Case #WM_SETFOCUS
            style = GetWindowLong_(hWnd,#GWL_STYLE)
            SetWindowLong_(hWnd,#GWL_STYLE,style|#BS_DEFPUSHBUTTON)
            InvalidateRect_(hWnd,0,1)
            ProcedureReturn 0
    EndSelect
    ProcedureReturn CallWindowProc_(GetGadgetData(gadget),hWnd,msg,wParam,lParam)
EndProcedure

Procedure myButtonGadget(nr,x,y,w,h,text$,flags=0)
    gadget = ButtonGadget(nr,x,y,w,h,text$,flags)
    If nr<>#PB_Any
        gadget=nr
    EndIf
    old = SetWindowLongPtr_(GadgetID(gadget),#GWLP_WNDPROC,@myButtonProc())
    SetGadgetData(gadget,old)
    ProcedureReturn gadget
EndProcedure

  If OpenWindow(0, 0, 0, 550, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    StringGadget(0, 8,  10, 306, 20, "Normal StringGadget...")
    StringGadget(1, 8,  35, 306, 20, "1234567", #PB_String_Numeric)
    StringGadget(2, 8,  60, 306, 20, "Readonly StringGadget", #PB_String_ReadOnly)
    StringGadget(3, 8,  85, 306, 20, "lowercase...", #PB_String_LowerCase)
    StringGadget(4, 8, 110, 306, 20, "uppercase...", #PB_String_UpperCase)
    StringGadget(5, 8, 140, 306, 20, "Borderless StringGadget", #PB_String_BorderLess)
    StringGadget(6, 8, 170, 306, 20, "Password", #PB_String_Password)

    myButtonGadget(7, 330, 10, 200, 20, "Standard Button")
    myButtonGadget(8, 330, 40, 200, 20, "Left Button", #PB_Button_Left)
    myButtonGadget(9, 330, 70, 200, 20, "Right Button", #PB_Button_Right)
    myButtonGadget(10,330,100, 200, 60, "Multiline Button  (longer text gets automatically wrapped)", #PB_Button_MultiLine)

    Repeat
        Select WaitWindowEvent()
            Case #PB_Event_CloseWindow
                Break
            Case #PB_Event_Gadget
                If EventType() = #PB_EventType_Focus
                    If GadgetType(EventGadget())=#PB_GadgetType_String
                        SendMessage_(GadgetID(EventGadget()),#EM_SETSEL,0,-1)
                    EndIf
                EndIf
         EndSelect
    ForEver
  EndIf
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Stringedget selektieren wenn es den focus erhält

Beitrag von Nino »

Pure_Beginner hat geschrieben:nicht der text des buttons soll selektiert werden sondern der button selbst,
wenn man z.b. von einem button zu anderen mittels der tabtaste springt damit man erkennt wo man gerade ist
Da ist ein bekanntes Problem bei eingeschalteter XP-Skin Unterstützung.

Die Lösung beteht darin, einmal das Macro SetUIState aufzurufen:

Code: Alles auswählen

#UIS_CLEAR = 2
#UISF_HIDEFOCUS = 1
#UISF_HIDEACCEL = 2

Macro SetUIState (_hwnd_)
   ; Focus und unterstrichene Buchstaben richtig anzeigen
   SendMessage_(_hwnd_, #WM_UPDATEUISTATE, ((#UISF_HIDEFOCUS|#UISF_HIDEACCEL)<<16) | #UIS_CLEAR, 0)
EndMacro


;-- Demo
If OpenWindow(0, 0, 0, 400,150,  "Focus Test", #PB_Window_ScreenCentered |#PB_Window_SystemMenu)
   ButtonGadget(0, 100, 100, 80, 25, "Button &1")
   ButtonGadget(1, 200, 100, 80, 25, "Button &2")
   SetActiveGadget(0)

   SetUIState(WindowID(0))

   Repeat
   Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Grüße, Nino
Benutzeravatar
Kiffi
Beiträge: 10715
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Stringedget selektieren wenn es den focus erhält

Beitrag von Kiffi »

@Pure_Beginner:

wenn ich mal wieder mahnen und warnen darf <)

Grade als Einsteiger sollte man sich IMO nicht mit solchen
Nebensächlichkeiten aufhalten, sondern erst einmal die Grundlagen
der PureBasic Window- und Gadgetprogrammierung erlernen.

Grade wenn Du aus der DotNet-Ecke kommst, gibt es bei
PureBasic einige Unterschiede, die beachtet werden müssen.

Erst wenn Dein Programm stabil läuft und Du Deinen Code auch
wirklich verstehst, würde ich persönlich die Feinheiten Deiner
GUI angehen.

Es besteht nämlich sonst, die Gefahr, dass Du Dich
im API-Dschungel verirrst und alsbald keine Freude
mehr am eigentlichen PB-Programmieren hast.

Nur mal so am Rande ... Kiffi
a²+b²=mc²
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: Stringedget selektieren wenn es den focus erhält

Beitrag von Pure_Beginner »

vielen dank für die zahlreichen und nützlichen tipps,

die für sich genommen alle funktionieren.

leider weis ich nicht wie ich diese in meine schleife einbinden kann.

habe auch bemerkt das ich mit der tabtaste zwar weiterspringen aber nur mit der maus auslösen kann nicht mit der returntaste.

wär jemand bereit über meinen quellcode zu schauen und mir zu helfen, möchte nicht nur hilfe sondern auch verstehen warum die dinge sind wie sie sind.

der normale programm code macht mir keine schwierigkeiten, ich verstehe nur nicht ( ganz ) das system und den aufbau der gadgats.

nochmals vielen dank für die zahlreiche hilfe
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Antworten