Purebasic mein erster Versuch

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Re: Purebasic mein erster Versuch

Beitrag von gnasen »

Ich denke, dass du meinst, das das Programm hängen bleibt statt weiter zu laufen?
wenn du den Status des Gadgets aktualisierst und ein delay(100) einbaust wird zwar der Status des Gadgets aktualisiert, aber du bekommst davon nichts zu sehen.
Warum ist ganz einfach: Du brauchst eine Schleife, die die Events von (und an) dein Window abfängt und alles neuzeichnet.
Das ist dieser Konstrukt:

Code: Alles auswählen

If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)

  Repeat
    Event = WaitWindowEvent() ; <---- Hier wird dein Fenster aktualisiert, wenn sich etwas ändert
    
    If Event = #PB_Event_CloseWindow 
      Quit = 1
    EndIf
    
  Until Quit = 1
  
EndIf
In deinem Code durchläufst du jetzt 100 mal ein delay(100) was 10 sek. entspricht. Aber erst nach einem Aufruf von WindowEvent() wird das ganze auf dein Fenster gepinselt. Und zwar alles auf einmal, und was bekommt man zu sehen? Den letzten gesetzten Wert (wenn das Fenster vorher nicht wegstirbt). Also immer angewöhnen die Form von oben zu benutzen, da dies der "Standard" Aufbau eines PB Fensters ist.

Sollte es gar nicht anders gehen (vorsicht, jetzt wirds dreckig, also in normalfall nicht machen) kann man ein.

Code: Alles auswählen

While WindowEvent() : Wend
einfügen. Dies bewirkt das selbe wie die Schleife oben, nur werden keine Nachrichten (wie Mausklicks etc) ausgewertet.

Ich hoffe das hilft ein wenig, viel Glück noch beim rumprobieren, PB ist anfangs vllt leicht gewöhnungsbedürftig, aber heute mag ich es nimmer missen ;)
pb 4.51
Benutzeravatar
hörmi
Beiträge: 106
Registriert: 10.07.2007 15:20
Kontaktdaten:

Re: Purebasic mein erster Versuch

Beitrag von hörmi »

Würde sich hier doch gleich der in PB4.40 eingeführte Timer anbieten
Delay in der Hauptschleife ist nie das Optimale

Code: Alles auswählen

If OpenWindow(0, 0, 0, 400, 100, "Timer Example", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
    ProgressBarGadget(0, 10, 10, 380, 20, 0, 100)
    AddWindowTimer(0, 123, 250)
    
    Value = 0
    Repeat
      Event = WaitWindowEvent()
      
      If Event = #PB_Event_Timer And EventTimer() = 123
        Value = (Value + 5) % 100
        SetGadgetState(0, Value)
      EndIf    
      
    Until Event = #PB_Event_CloseWindow
  EndIf
BildBild Bild
ToolBoy
Beiträge: 42
Registriert: 01.01.2010 16:19
Computerausstattung: Win 98ME, XP Home und Pro, Win2000 und WinVista32 Home Pre.
Wohnort: Duisburg

Re: Purebasic mein erster Versuch

Beitrag von ToolBoy »

Hi,

ich will ja nur, dass mein kleines Testprogramm, zum Lernen und zu verstehen, auch ohne Tittelleiste funst.
Wenn ich wie oben angegeben #PB_Window_BorderLess einsetze
Funst die For I schleife nicht mehr.

Mein Testprogramm:

Code: Alles auswählen

#BUTTON1 = 1
#BUTTON2 = 2
#BUTTON3 = 3
#BUTTON4 = 4

If OpenWindow(0,100,150,450,200,"TEST PROG", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowColor(0,RGB(0,0,0))
StickyWindow(0, 1) 

ID = 910
X = 155
Y = 145 
L = 110 
H = 146 
S = 1 
Gosub BUT
ID = 920
X = 15
Y = 145 
L = 115
H = 146 
S = 1 
Gosub BUT 
  


 
  HyperLinkGadget(2, 20, 147, 100,18,"   OPEN", RGB(255,0,0))
  SetGadgetColor(2, #PB_Gadget_BackColor,  RGB(0,0,0))
  SetGadgetColor(2, #PB_Gadget_FrontColor,  RGB(0,200,0))
  SetGadgetFont(2, LoadFont(0, "Arial", 10))
  
  
  HyperLinkGadget(1, 160, 147, 100,18,"   LOAD", RGB(255,0,0))
  SetGadgetColor(1, #PB_Gadget_BackColor,  RGB(0,0,0))
  SetGadgetColor(1, #PB_Gadget_FrontColor,  RGB(0,200,0))
  SetGadgetFont(1, LoadFont(0, "Arial", 10))
  
  
  ButtonGadget(4, 20, 10, 50,18,"EXIT")
  SetGadgetColor(4, #PB_Gadget_BackColor,  RGB(198,198,198))
  SetGadgetColor(4, #PB_Gadget_FrontColor,  RGB(0,0,0))
  SetGadgetFont(4, LoadFont(0, "Arial", 12))
  
  Define size.q ; alternativ Define.q size oder dasselbe für Global, Protected, Static und Shared
; Quad ist wichtig, damits auch bei sehr grossen Dateien funktioniert.
size = FileSize("TEST.txt")
Select size
  Case -1
    MessageRequester("Fehler", "Datei wurde nicht gefunden!") ;, #MB_ICONERROR)
  Case -2
    MessageRequester("Info", "Datei ist ein Verzeichnis!") ;, #MB_ICONINFORMATION)
  Default
     MessageRequester("Größen Test", Str(size))
EndSelect  
    
    
    
  TextGadget(3, 60, 47, 150,18, "BYTES "+Str(size))
  SetGadgetColor(3, #PB_Gadget_BackColor,  RGB(255,255,255))
  SetGadgetColor(3, #PB_Gadget_FrontColor,  RGB(0,0,0))
  SetGadgetFont(3, LoadFont(0, "Arial", 10))
    
    
  Repeat
  
  
  
  
    EventID=WaitWindowEvent() ;Fensteraktion ermitteln    
    Select EventID ;wir überprüfen welches Gadget betätigt wurde.
    
      Case #PB_Event_Gadget
        Select EventGadget()
          
            

            Case 1 


If OpenWindow(14, 0, 0, 240, 16, "Progress", #PB_Window_ScreenCentered)
StickyWindow(14, 1) 
    ProgressBarGadget(14,  5, 3, 230,  10, 0, 100)
    SetGadgetState   (14, 50)   
    For I = 1 To 100
    SetGadgetState   (14, I)   
    Delay (20)  
    Next
    
   CloseWindow(14)

    EndIf
            
            Case 2 ; Der Benutzer hat unseren Knopf gedrückt
            RunProgram("00.rb") 
            
            Case 4 ; Der Benutzer hat unseren Knopf gedrückt
            CloseWindow(0)
            
            
        EndSelect
   
    EndSelect
   
  Until EventID=#PB_Event_CloseWindow 

EndIf
End
; ==================================================
BUT: ; Rahmen erstellen mit Border funst HyperLinkGadget nicht.
ButtonGadget(ID+1, X,Y,L,S,"")
ButtonGadget(ID+2,X,Y+20,L,S,"")
ButtonGadget(ID+3,X,H,S,21,"")
ButtonGadget(ID+4,X + L-2,H,S,21,"")
  
Return
Bitte eine TEST.txt erstellen und bei RunProgram("00.rb") 00.rb ändern zb. eine exe angeben..

MFG ToolBoy

__________________________________________________
Code-Tags hinzugefügt
04.01.2010
RSBasic
Windows 7 U. Windows 10 pro.
ToolBoy
Beiträge: 42
Registriert: 01.01.2010 16:19
Computerausstattung: Win 98ME, XP Home und Pro, Win2000 und WinVista32 Home Pre.
Wohnort: Duisburg

Re: Purebasic mein erster Versuch

Beitrag von ToolBoy »

Hi @ All,

Es hat sich erledigt, es funst doch ohne Titelleiste.
Werde nun erst mal lesen und lesen.

MFG ToolBoy
Windows 7 U. Windows 10 pro.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Purebasic mein erster Versuch

Beitrag von Kiffi »

@ToolBoy: Ich sehe da momentan mehrere kritische Baustellen in Deinem
Code. Meines Erachtens ist es besser, wenn Du versuchst, Schritt für Schritt
vorzugehen.

Mein Tipp: Isolier mal Dein Fenster '14' als eigenständigen Code und schau Dir
diesbezüglich noch einmal die Antworten von gnasen und hörmi an.

Grüße ... Kiffi
a²+b²=mc²
Antworten