Seite 1 von 2

Kann man Linien wieder löschen?

Verfasst: 05.11.2005 22:11
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

Verfasst: 05.11.2005 22:39
von vonTurnundTaxis
Zeichne den Kasten in ein Imagegadget und verschiebe das!

Verfasst: 05.11.2005 22:46
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

Verfasst: 05.11.2005 22:56
von vonTurnundTaxis
Grundsätzlich lässt sich noch sagen:
Nie direkt aufs Fenster zeichnen!

Verfasst: 05.11.2005 23:07
von PB42
Das leuchtet ein.

PB42

Linien Löschen

Verfasst: 05.11.2005 23:08
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 

Verfasst: 06.11.2005 00:04
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

Verfasst: 06.11.2005 02:48
von edel
vonTurnundTaxis hat geschrieben:Grundsätzlich lässt sich noch sagen:
Nie direkt aufs Fenster zeichnen!
Und warum nicht ?

Verfasst: 06.11.2005 03:33
von MVXA
Gekrizeltes geht verloren, wenn das Fenster hinter einem anderem Fenster
verschwinden sollte. In einem ImageGadget hat man dieses Problem nicht.

Verfasst: 06.11.2005 09:13
von Kaeru Gaman
aber man kann auch alle zeichenoperationen in eine procedure packen,
die man bei nem refresh aufruft....