StringGadget + DrawText

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Dave4711
Beiträge: 8
Registriert: 10.01.2019 12:16

StringGadget + DrawText

Beitrag von Dave4711 »

Hallo,

eine erneute Frage an euch, wie kann es sein, dass dieser Code Funktioniert und der anschließende nicht ?
Ich probiere schon ein paar Tage an diesem Problem und finde keine vernünftige Antwort darauf... :|

Ich finde keine logischen Fehler :( Hoffe Ihr könnt mir helfen...

Vielen Dank schon einmal im voraus.

P.s. : Eins noch, im Programmcode gibt es bei der Ausgabe eine Zeilenverschiebung bitte nicht beachten.

Hier der funktionierende Code 1:

Code: Alles auswählen

Global Dim MyGadgetHandle(20)
#information ="Hinweis"


Procedure WaitMouse()
  Repeat
    Dummy=WaitWindowEvent()
  Until Dummy=#PB_Event_RightClick       
  EndProcedure

Procedure SetzeEingabeFelder(WindowHandle,MyFontHandle)
  
  
  MVar$="TEST"
  FVar$="test"
 
  If Not StartDrawing(WindowOutput(WindowHandle))
    MessageRequester(#information,"Kein Zeichnen möglich!", #PB_MessageRequester_Ok|#PB_MessageRequester_Error)
    End
  EndIf
  
    TxTHoehe=22
    DrawingFont(FontID(MyFontHandle))
    DrawingMode(#PB_2DDrawing_Transparent)
    
    MyGadgetHandle(0)=OptionGadget(#PB_Any, 200, 200, TextWidth(MVar$)+40, TxTHoehe, MVar$ )
    MyGadgetHandle(1)=OptionGadget(#PB_Any, 200+TextWidth(MVar$)+40, 200, TextWidth(FVar$)+40, TxTHoehe, FVar$)
    SetGadgetState(MyGadgetHandle(0), 1)
    
    Restore EingabeFelderData
    For Dummy=2 To 4
      Read.s DataEingabeFelder$
      MyGadgetHandle(Dummy)=StringGadget (#PB_Any, 200, (TxTHoehe*(Dummy-1))+200, 250, TxTHoehe, DataEingabeFelder$)
      SetGadgetColor(MyGadgetHandle(Dummy), #PB_Gadget_FrontColor, RGB(80, 80, 80))
      ; DrawText(100, (TxTHoehe*(Dummy))+205, DataEingabeFelder$,RGB(255, 255, 255),RGB(90,90,90)) ; !!!!!!!!!!!!!!!!!!!!!! Hier der Fehler deshalb die Schleife  !!!!!!!!!!!!!!!!!!!!!!!!
    Next
    
    DrawText(100, 205, "Anklicken",RGB(255, 255, 255),RGB(90,90,90))
    Restore EingabeFelderData
    For Dummy=1 To 3 ; !!!!!!!!!!!!!!!!!!! Hier die funktionierende Schleife !!!!!!!!!!!!!!!!!!!!!
      Read.s DataEingabeFelder$
      DrawText(100, (TxTHoehe*(Dummy))+205, DataEingabeFelder$,RGB(255, 255, 255),RGB(90,90,90))
    Next
    SetActiveGadget(MyGadgetHandle(2))
    
    StopDrawing()
 
  DataSection
    EingabeFelderData:
    Data.s "Erster","Zweiter","Dritter" ; Etc.
  EndDataSection
  
EndProcedure

MyHauptFensterHandle=OpenWindow(#PB_Any,0, 0, 800, 600, "Irgendetwas",#PB_Window_SystemMenu) ;#PB_Window_Maximize|
If Not MyHauptFensterHandle
  MessageRequester(#information,"Fehler beim Öffnen vom Fenster", #PB_MessageRequester_Ok|#PB_MessageRequester_Error)
  End  
EndIf

MyFontHandle=LoadFont(#PB_Any, "Arial", 12)
If MyFontHandle
  SetGadgetFont(#PB_Default, FontID(MyFontHandle))   ; Arial Zeichensatz als neuen Standard festlegen
Else
  MessageRequester(#information,"Fehler beim Öffnen des Zeichensatzes", #PB_MessageRequester_Ok|#PB_MessageRequester_Error)
  End
EndIf

SetWindowColor(MyHauptFensterHandle, RGB(99, 99, 99))
SetzeEingabeFelder(MyHauptFensterHandle,MyFontHandle)

WaitMouse() ; Rightclick to exit
End
Und hier das Bild dazu:

https://www.magentacloud.de/lnk/hBrp0jYk

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Hier der nicht funktionierende Code 2:

Code: Alles auswählen

Global Dim MyGadgetHandle(20)
#information ="Hinweis"


Procedure WaitMouse()
  Repeat
    Dummy=WaitWindowEvent()
  Until Dummy=#PB_Event_RightClick       
  EndProcedure

Procedure SetzeEingabeFelder(WindowHandle,MyFontHandle)
  
  
  MVar$="TEST"
  FVar$="test"
 
  If Not StartDrawing(WindowOutput(WindowHandle))
    MessageRequester(#information,"Kein Zeichnen möglich!", #PB_MessageRequester_Ok|#PB_MessageRequester_Error)
    End
  EndIf
  
    TxTHoehe=22
    DrawingFont(FontID(MyFontHandle))
    DrawingMode(#PB_2DDrawing_Transparent)
    
    MyGadgetHandle(0)=OptionGadget(#PB_Any, 200, 200, TextWidth(MVar$)+40, TxTHoehe, MVar$ )
    MyGadgetHandle(1)=OptionGadget(#PB_Any, 200+TextWidth(MVar$)+40, 200, TextWidth(FVar$)+40, TxTHoehe, FVar$)
    SetGadgetState(MyGadgetHandle(0), 1)
    
    Restore EingabeFelderData
    For Dummy=2 To 4
      Read.s DataEingabeFelder$
      MyGadgetHandle(Dummy)=StringGadget (#PB_Any, 200, (TxTHoehe*(Dummy-1))+200, 250, TxTHoehe, DataEingabeFelder$)
      SetGadgetColor(MyGadgetHandle(Dummy), #PB_Gadget_FrontColor, RGB(80, 80, 80))
      DrawText(100, (TxTHoehe*(Dummy))+205, DataEingabeFelder$,RGB(255, 255, 255),RGB(90,90,90)) ;  !!!!!!!!!Hier der Fehler .. siehe GfX !!!!!!!!!!!!!!!!!!!
    Next
    
    DrawText(100, 205, "Anklicken",RGB(255, 255, 255),RGB(90,90,90))
    Restore EingabeFelderData
    For Dummy=1 To 3
      Read.s DataEingabeFelder$
     ; DrawText(100, (TxTHoehe*(Dummy))+205, DataEingabeFelder$,RGB(255, 255, 255),RGB(90,90,90)) ; !!!!!!!!!!!!!!!!!!!!!!!!! Hier nur ausge - "Rem't" damit der obere Fehler ersichtlich ist !!!!!!!!
    Next
    SetActiveGadget(MyGadgetHandle(2))
    
    StopDrawing()
 
  DataSection
    EingabeFelderData:
    Data.s "Erster","Zweiter","Dritter" ; Etc.
  EndDataSection
  
EndProcedure

MyHauptFensterHandle=OpenWindow(#PB_Any,0, 0, 800, 600, "Irgendetwas",#PB_Window_SystemMenu) ;#PB_Window_Maximize|
If Not MyHauptFensterHandle
  MessageRequester(#information,"Fehler beim Öffnen vom Fenster", #PB_MessageRequester_Ok|#PB_MessageRequester_Error)
  End  
EndIf

MyFontHandle=LoadFont(#PB_Any, "Arial", 12)
If MyFontHandle
  SetGadgetFont(#PB_Default, FontID(MyFontHandle))   ; Arial Zeichensatz als neuen Standard festlegen
Else
  MessageRequester(#information,"Fehler beim Öffnen des Zeichensatzes", #PB_MessageRequester_Ok|#PB_MessageRequester_Error)
  End
EndIf

SetWindowColor(MyHauptFensterHandle, RGB(99, 99, 99))
SetzeEingabeFelder(MyHauptFensterHandle,MyFontHandle)

WaitMouse() ; Rightclick to exit
End

Auch hier das passende Bild dazu:

https://www.magentacloud.de/lnk/skLpUvaO
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

Re: StringGadget + DrawText

Beitrag von matbal »

Schiebe mal dein Fenster aus dem Bildschirm und wieder zurück. Die selbstgemalten Texte verschwinden in beiden Codes.

Wenn du direkt auf das Fenster zeichnest, mußt du dich auch um das Neuzeichnen kümmern. Windows schickt das Event #PB_Event_Repaint, wenn ein Teil im Fenster neu gezeichnet werden muß.


Das Problem hast du nicht, wenn du stattdessen Gadgets verwendest, dann kümmert sich PB um die Redraws.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: StringGadget + DrawText

Beitrag von mk-soft »

Zum Beispiel CanvasGadget. Mit dem Flag #PB_Canvas_Container" kannst du auch Gadgets hinzufügen.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Dave4711
Beiträge: 8
Registriert: 10.01.2019 12:16

Re: StringGadget + DrawText

Beitrag von Dave4711 »

Alles klar werde umdenken müssen :oops:

Ihr macht es vielen von uns viel Leichter hier einzusteigen.

:praise: Vielen Dank für eure Hilfe :allright:

:bounce:
Antworten