Kann man Linien wieder löschen?

Anfängerfragen zum Programmieren mit PureBasic.
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Kann man Linien wieder löschen?

Beitrag von PB42 »

Hallo,

in einem Programm soll sich unter anderem ein Kasten verschieben, ja nach Situation. Dabei bleibt dann aber leider der zuvor gezeichnete Kasten erhalten. Gibt es eine Möglichkeit, diesen Effekt vermeiden zu können? Und wenn ich schon dabei bin: Kann man auch die Liniendicke beeinflussen? Folgender Beispiel-Code zeigt, was ich meine und was mich stört:

Code: Alles auswählen

OpenWindow(0,0,0,606,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_minimizeGadget|#PB_Window_maximizeGadget,"") 
CreateGadgetList(WindowID(0))
ButtonGadget(1,100,100,50,20,"a = 1")

Repeat
  EventID = WaitWindowEvent()
  GadgetID = EventGadgetID()
  
  Select GadgetID
    Case 1
    a = 1
    EndSelect
  
    StartDrawing(WindowOutput())
    If a = 1
    Line(238,200,170,0)
    Line(238,249,170,0)
    Line(238,200,0,49)
    Line(407,200,0,49)
    Goto t
    EndIf
    
    Line(213,200,170,0)
    Line(213,249,170,0)
    Line(213,200,0,49)
    Line(382,200,0,49)
    t:
    StopDrawing()
    
Until EventID =#PB_eventCloseWindow
Danke! PB42
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Zeichne den Kasten in ein Imagegadget und verschiebe das!
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Gute Idee, aber in dem Kasten sind in meinem eigentlichen Programm bereits kleine ImageGadgets drin, welche je nach Bedarf die Farbe wechseln, von daher klappt das dann nicht mit dem Kasten im ImageGadget. Dann wird mir nichts anderes übrig bleiben, als den Kasten stehen zu lassen und ja nach Bedarf die darin enthaltenen ImageGadgets zu verschieben.

PB42
Zuletzt geändert von PB42 am 05.11.2005 23:08, insgesamt 1-mal geändert.
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Grundsätzlich lässt sich noch sagen:
Nie direkt aufs Fenster zeichnen!
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Das leuchtet ein.

PB42
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Linien Löschen

Beitrag von roherter »

Das geht mittels Winapi,habe dein Code mal geändert:

Code: Alles auswählen

hwnd.l=OpenWindow(0,0,0,606,300,#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget,"")
farb=GetSysColor_(COLOR_WINDOW);Fenster Farbe

 Debug farb
CreateGadgetList(WindowID(0))
ButtonGadget(1,100,100,50,20,"a = 1")

Repeat
  EventID = WaitWindowEvent()
  GadgetID = EventGadgetID()
  
  Select GadgetID
    Case 1
      a = 1
  EndSelect
  
  StartDrawing(WindowOutput())
  If a = 1
     Box(200,200,250,200,RGB(Red(farb),Green(farb),Blue(farb)));hier lösche ich deine alten Linien
    Line(238,200,170,0)
    Line(238,249,170,0)
    Line(238,200,0,49)
    Line(407,200,0,49)
   
    Goto t
  EndIf
  
  Line(213,200,170,0)
  Line(213,249,170,0)
  Line(213,200,0,49)
  Line(382,200,0,49)
  t:
  StopDrawing()
 
Until EventID=#PB_EventCloseWindow
End 
Purebasic 5.0 32bit und 64 bit

I'm back from hell
PB42
Beiträge: 243
Registriert: 13.10.2005 03:21

Beitrag von PB42 »

Danke roherter, aber ich habe bisher nur die Demo-Version und damit geht das nicht. Hab's mir abgespeichert für später. <)

PB42
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

vonTurnundTaxis hat geschrieben:Grundsätzlich lässt sich noch sagen:
Nie direkt aufs Fenster zeichnen!
Und warum nicht ?
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Gekrizeltes geht verloren, wenn das Fenster hinter einem anderem Fenster
verschwinden sollte. In einem ImageGadget hat man dieses Problem nicht.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

aber man kann auch alle zeichenoperationen in eine procedure packen,
die man bei nem refresh aufruft....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten