StringGadget frage

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

StringGadget frage

Beitrag von udg »

Hallo,

ich habe ein Eingabefeld erstellt. Dort steht ein Name schon geschrieben. Nun möchte ich dass dort der Cursor bereits blinkt. Dies habe ich mit:
SetActiveGadget(StringGadget) hinbekommen.

Wenn jetzt der Anwender seinen Namen ändern soll, möchte ich, dass es das Eingabefeld löscht beim Reinklicken und der User seinen Namen eintippen kann.

Leider habe ich eine Ewigkeit probiert aber komme zu keiner Lösung.

Weis jemand Rat?

Code: Alles auswählen

;- EINGABEFELD   
     StringGadget(#String_0, 12, 218, 378, 34, "Dein Name", #PB_String_BorderLess|#ES_CENTER) ; name der bereits da steht
     SetGadgetFont(#String_0, LoadFont(#Font_String_0, "HelveticaNeueLT Pro 35 Th", 20, #PB_Font_HighQuality)) ; lade einen font
     SetGadgetColor(#String_0, #PB_Gadget_FrontColor, $808080) ; SCHRIFT MITTEL GRAU 
     SetGadgetColor(#String_0, #PB_Gadget_BackColor, $211D1A)  ; HINTERGRUND DUNKEL GRAU
     SetActiveGadget(StringGadget);lässt den Cursor blinken
So schaut die eingabe Maske aus:
Bild

viele Grüße und danke für eure Hilfe.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: StringGadget frage

Beitrag von Danilo »

udg hat geschrieben:Wenn jetzt der Anwender seinen Namen ändern soll, möchte ich, dass es das Eingabefeld löscht beim Reinklicken und der User seinen Namen eintippen kann.
Das Problem ist, dass Du das Gadget schon mit SetActiveGadget() aktivierst.
Somit muss der User das Gadget nicht anklicken, und kann direkt los schreiben.
Dadurch entfällt wiederum die Möglichkeit auf #PB_EventType_Focus zu reagieren.

Vielleicht reicht Dir ein Windows CueBanner (Hintergrundtext):

Code: Alles auswählen

Procedure SetStringGadgetTip(gadget,text$)
    Protected tmp$
    CompilerIf #PB_Compiler_Unicode
        tmp$ = text$
    CompilerElse
        Protected len  = Len(text$)
        tmp$ = Space(len*2+2)
        PokeS(@tmp$,text$,len,#PB_Unicode)
    CompilerEndIf
    SendMessage_(GadgetID(gadget),#EM_SETCUEBANNER,#True,@tmp$)
EndProcedure


#String_0 = 0
#Font_String_0 = 0

If OpenWindow(0, 0, 0, 402, 390, "Choose your name!", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    StringGadget(#String_0, 12, 218, 378, 34, "", #PB_String_BorderLess|#ES_CENTER) ; name der bereits da steht
    SetGadgetFont(#String_0, LoadFont(#Font_String_0, "HelveticaNeueLT Pro 35 Th", 20, #PB_Font_HighQuality)) ; lade einen font
    SetGadgetColor(#String_0, #PB_Gadget_FrontColor, $808080) ; SCHRIFT MITTEL GRAU 
    SetGadgetColor(#String_0, #PB_Gadget_BackColor, $211D1A)  ; HINTERGRUND DUNKEL GRAU
    SetActiveGadget(#String_0)                                ;lässt den Cursor blinken
    
    SetStringGadgetTip(#String_0, "User Name") ; setzt Hintergrundtext
    
    Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Ansonsten müsste man mehr über die genauen Anforderungen wissen. Für welche OS brauchst Du es?
Da Du #ES_CENTER verwendest, wohl nur für Windows. Durch #ES_CENTER wird der Text zentriert,
aber in Deinem Screenshot ist der Cursor nicht zentriert. Dafür müsstest Du es vielleicht selbst mit
dem CanvasGadget bauen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: StringGadget frage

Beitrag von udg »

danke für den Tipp in die richtige Richtung.

Ich habe deine Zeile eingefügt. Nun kann ich in das Textfeld klicken und der Text verschwindet auch. Habe ich jedoch noch nix geschrieben und gehe mit der Maus aus dem Textfeld, erscheint wieder der schon vorher angegebene Text. Ich lade das Tool mal in den Anhang.
http://rghost.net/6vZ4JtB82 (free host-keine Wartezeit)


Ich hätte gedacht es ist möglich, dass es einen Befehl gibt, der einen "clear-text" sendet und mit click LeftMouseButton ins Eingabefeld den Text löscht und man dann einen neuen Text schreiben kann.

Das Tool soll nur unter Windows arbeiten. Das der Cursor in der Mitte blinkt ist okay :)

Hat man nun seinen Namen eingegeben und drückt auf Speichern bzw Save, soll im Hintergrund, 1 oder 2 txt Dateien überprüft werden und einen schon vorgegebenen Namen ersetzen und die txt mit dem neuen Namen überschreiben.

Wie kann ich dort vorgehen?

viele Grüße und Danke für die Hilfe
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten