Autor: Jörg Sellmeyer (---.dip0.t-ipconnect.de)
Datum: 14.07.18 02:20
Hallo Karl-Jürgen,
es gib keinen Grund, sich angegriffen zu fühlen. Dein Punkt ist noch nicht rübergekommen und es geht jetzt um die Präzisierung deines Anliegens.
Wenn man einmal X13 als Interpreter benutzt, sieht man sofort, dass sich X14 anders verhält.
Allerdings sieht man mit diesem Code auch schnell, dass die Beschriftung auch bei profaneigenen Controls verschwindet, sobald die Dialoge von einem anderen Fenster verdeckt werden.
Einfach mal ein anderes Fenster aufrufen, nachdem das Programm gestartet ist...
CLS $505050
print $profver
Declare Mem tafel1, tafel2
/*------------------------------------------------------------
Ein simples Dialogfenster.
Zwei Methoden: Handle retournieren und eine Beschriftung (Neuzeichnen)
--------------------------------------------------------------*/
Class PANEL = hWnd%%, GetWnd@, Neuzeichnen@, PANEL@
Proc PANEL.PANEL
Parameters Long x, y, breit, hoch, id
'.hWnd%% = Control("Dialog","", $50400000, x, y, breit, hoch, &hwnd, id, %hinstance, $0)
.hWnd%% = Create("ChildWindow",&hwnd,"", x, y, breit, hoch)
.Neuzeichnen()
EndProc
Proc PANEL.GetWnd
Return .hWnd%%
EndProc
Proc PANEL.Neuzeichnen
StartPaint .GetWnd()
DrawText 10,10, "Beschriftung"
EndPaint
EndProc
/*------------------------------------------------------------
Jetzt Objekte erstellen, aber ...
--------------------------------------------------------------*/
tafel1 = New(PANEL,010,010,200,200,3000)
tafel2 = New(PANEL,220,010,200,200,3001)
/*------------------------------------------------------------
... wenn tafel2 erstellt wird,
verschwindet die Beschriftung von tafel 1
--------------------------------------------------------------*/
Waitkey
Dispose tafel1, tafel2
Es wäre sicher interessant (vielleicht sogar wichtig), zu wissen, was da anders ist aber letztlich ändert es nichts daran, dass das Zeichnen auf Controls <> hwnd eher witzlos ist.
Als sicheren Umweg würde ich ein Bitmap empfehlen, welches auf die Dialogfläche gepappt wird. Damit ist dann die Beschriftung wieder persistent.
Und so würde es dann wieder dauerhaft funktionieren:
CLS $505050
print $profver
Declare Mem tafel1, tafel2
/*------------------------------------------------------------
Ein simples Dialogfenster.
Zwei Methoden: Handle retournieren und eine Beschriftung (Neuzeichnen)
--------------------------------------------------------------*/
Class PANEL = hWnd%%, GetWnd@, Neuzeichnen@, PANEL@
Proc PANEL.PANEL
Parameters Long x, y, breit, hoch, id
.hWnd%% = Control("Dialog","", $50400000, x, y, breit, hoch, &hwnd, id, %hinstance, $0)
'.hWnd%% = Create("ChildWindow",&hwnd,"", x, y, breit, hoch)
.Neuzeichnen()
EndProc
Proc PANEL.GetWnd
Return .hWnd%%
EndProc
Proc PANEL.Neuzeichnen
StartPaint .GetWnd()
DrawText 10,10, "Beschriftung"
EndPaint
EndProc
/*------------------------------------------------------------
Jetzt Objekte erstellen, aber ...
--------------------------------------------------------------*/
tafel1 = New(PANEL,010,010,200,200,3000)
tafel2 = New(PANEL,220,010,200,200,3001)
tafel1.neuzeichnen()
/*------------------------------------------------------------
... wenn tafel2 erstellt wird,
verschwindet die Beschriftung von tafel 1
--------------------------------------------------------------*/
Set("AutoPaint",0)
While 1
WaitInput
if %wmpaint
CLS $505050
tafel1.neuzeichnen()
tafel2.neuzeichnen()
EndIf
Wend
Dispose tafel1, tafel2
Das war aber auch in X13 schon so.
_____________________________________
Man sollte seiner Zeit nicht zu weit voraus sein
Nachricht bearbeitet (14.07.18 02:30)
|
|