HI,
es ist für mich noch schwierig, die Ballance zu finden, wieviel ich posten sollte, und wieviel nicht. Ich hab mal die Ereignisschleife zusammengekürzt unten dargestellt (sind derzeit um die 430 Zeilen). Damit ist hoffentlich erkennbar, wie die funktioniert.
Inzwischen bin ich einen Schritt weiter und habe diese Lösung gefunden. Der Hinweis mit dem Canvasgadget hat mich inspiriert. Ich habe erstmal ein imagegadget genommen. Die Idee ist ja die gleiche: Ein gadget ins Fenster legen, denn dieses wird von windows selbst nach "Fensterdrüberwischen" aktualisiert
Ich habe diese Lösung gefunden:
hauptdialog:
Code: Alles auswählen
Global Window_hd
Global Image_ankf_hd
Procedure OpenWindow_hd(x = 0, y = 0, width = 795, height = 600)
Window_hd = OpenWindow(#PB_Any, x, y, width, height, "text",#PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered)
Button1_hd = ButtonGadget(#PB_Any, 684, 562, 100, 30, "Zeichnen")
Button2_hd = ButtonGadget(#PB_Any, 480, 562, 100, 30, "Speichern")
Image_ankf_hd = ImageGadget(#PB_Any, 10, 240, 450, 278, 0)
EndProcedure
programm:
Code: Alles auswählen
IncludeFile "Hauptdialog.pbf"
OpenWindow_hd()
img_ankf=CreateImage(#PB_Any,450,278,0,rgb(127,127,127))
Repeat
event = WaitWindowEvent()
select event
case #PB_Event_Gadget
select eventgadget()
case Button1_hd
sub_zeichnen
case Button2_hd
a$=SaveFileRequester("Setup speichern",dateipfad$+dateiname$,"cde-Dateien|*.cde",0)
datei bearbeiten
...
endselect
endselect
forever
end
sub_zeichnen:
StartDrawing(ImageOutput(img_ankf))
SetOrigin (x,y)
linexy(a,b,c,d,farbe)
...
StopDrawing()
SetGadgetState(image_ankf_hd,ImageID(img_ankf))
return
Damit muß nach jedem Bearbeiten des image ein
setzten, damit die Anzeige im Fenster aktualisiert wird. Das funktioniert gut.