Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Neuerer Beitrag  |  Älteres Thema 
 Startpaint in X4
Autor: Karl-Jürgen Hilger (---.dyn.telefonica.de)
Datum:   09.07.18 16:32

Hi,

soweit ich mich erinnere hatten wir im XProfan X4 - Vorschau- Thread einen Bug mit dem Startpaint - Stack am Wickel.

Jetzt bin ich wohl auf ein weiteres Problem gestossen:

Auf HWND lege ich 2 gleiche, simple Dialog- Panel- Objekte nebeneinander.
Beide bekommen per Startpaint und Drawtext eine schlichte Beschriftung.

Wenn das zweite Panelobjekt erstellt wird, verschwindet beim ersten
die Beschriftung.....

---------------------------------
Nachtrag:
Mit den xprofaneigenen "Childwindows" gibt es das Problem nicht.
Es scheinen die mit "Control" erzeugten Elemente zu sein, die
noch nicht so gut mit Startpaint harmonieren.
---------------------------------
  CLS $505050
  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)
    .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 
  --------------------------------------------------------------*/
  
  WaitInput
  Dispose tafel1, tafel2
  


Natürlich sollte man hier eigentlich eher zu Textstatics greifen.
Der eigentlich wichtige Hintergrund für mich aber ist ein spezieller Beispielcode von Andreas Miethe, zu dem ich gern an anderer Stelle nochmal nach Rat und Meinung fragen will.
(Imho das xprofanweit einzige Beispiel für Xprofaneigenes Subclassing über ~CTLCOLORDLG o.ä., inklusive der Rückgabe eines 'Brush' ans System, was selbst ein Frank Abbing nicht von vornherein für möglich gehalten hat - und worüber es sonst keine weiteren Aussagen gibt.)

Gruß
KJ



Nachricht bearbeitet (10.07.18 12:25)

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   10.07.18 17:17

Das liegt wohl an dem mit Control() erzeugten Fenster.
Da hat XProfan keine Kontrolle darüber.

Warum muß es denn unbedingt ein solches Fenster sein ?

Geht doch mit

.hWnd%% = Create("Static", &hwnd, x, y, breit, hoch)


genau so gut.


So, wie es aussieht, scheint das StartPaint...EndPaint auf
solche fremden Fenster nicht ausgelegt zu sein. Ein Button
kann man ja auch einfach draufklatschen :

 
 CLS $505050
   Declare Mem tafel1, tafel2, Long btn
   
   /*------------------------------------------------------------
         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("Static", &hwnd, x, y, breit, hoch)
     .Neuzeichnen()
   EndProc
   
   Proc PANEL.GetWnd
     Return .hWnd%%
   EndProc
   
   Proc PANEL.Neuzeichnen
     StartPaint .GetWnd()
       DrawText 10,10, "Beschriftung"
     EndPaint
     btn = Create("Button", .GetWnd(), "Test", 10, 50, 60, 25)
   EndProc
  
   /*------------------------------------------------------------
               Jetzt Objekte erstellen, aber ...
   --------------------------------------------------------------*/
   tafel1 = New(PANEL, 10, 10,200,200,3000)
   tafel2 = New(PANEL,220, 10,200,200,3001)
  
   /*------------------------------------------------------------
           ... wenn tafel2 erstellt wird,
               verschwindet die Beschriftung von tafel 1 
   --------------------------------------------------------------*/
   
   WaitInput
   Dispose tafel1, tafel2
   
 


H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (10.07.18 17:35)

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   10.07.18 17:36

ups, ein Moment zu spät.

Du hast es ja mit deinem Nachtrag selber erkannt.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (10.07.18 17:38)

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Karl-Jürgen Hilger (---.dyn.telefonica.de)
Datum:   10.07.18 19:12

Hi Heinz,

bist Du Dir da ganz sicher?

2 Punkte dazu:

1. Ich glaube im Thread zu XProfan X4 hatten wir beide die Frage schon mal ausführlich geklärt, warum man für Dialogelemente möglichst Dialogfenster benutzt, und nicht Statics.
Dazu hatte ich unter anderem auch auf Zitate von Rolands Hilfe verwiesen.
Und grade vor ein paar Tagen hab ich hier im Forum noch zufällig einen Post gelesen, wo Frank Abbing schrieb, daß Statics für Dialogelemente eine schlechte Idee sei..

2. Du sagst, meine Dialogfensterster seien

- "fremde Fenster", über die XProfan "keine Kontrolle" hätte"



Was sagst Du denn zu folgendem Zitat aus der Hilfe


20.15 - Beliebige Dialogelemente

Sehr interessant ist auch die Verwendung der XProfan-eigenen Fensterklassen mit der Control-Funktion, weil man dann zwar die Fenster mit beliebigen Stilkonstanten versehen kann, aber dennoch die Fensterprozeduren von XProfan greifen. Damit können in diesen Fenstern dann Tastatur-, Maus-, Menü- und sonstige Anfragen wie gewohnt behandelt werden. Die Fensterklasse des Hauptfensters in XProfan ist "FENSTER", die des mit Create("Window" geöffneten Fensters ist "DIALOG".

Achte auch auf das letzte Wort des Zitats - damit ist ganz konkret Control("Dialog"....) gemeint
Hört sich das nach "fremde Fenster" an?

Auch Roland hatte im X4 Thread den Startpaint-Stack- Fehler akzeptiert und korrigiert, ohne zu behaupten, daß sein XProfan mit meinen "fremden" Fenstern nix zu tun hätte.


Mit einem fetten Schmunzeln registriere ich, daß ich mich schon wieder erstmal hart für meinen "normalen" Code rechtfertigen muß, bevor der eigentlich im Vordergrund stehende Fehler Anerkennung findet ... :-D


Gruß und vielen Dank
KJ



Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   10.07.18 19:47

Ganz unrecht hast du ja nicht.
Ich dachte da eher an die Fensterstile, die man mit
Control() den Fenstern verabreichen kann.

Was ist das für ein Stil : $50400000 ?

Was mich nicht wundert, ist, daß die Windows-API
genauso reagiert, wie XProfan. Geschieht ja auch
mit gleichen Mitteln. Damit müßte ich schon wieder
das StartPaint...EndPaint ausschließen :

 Proc PANEL.Neuzeichnen
     dc& =  ~GetDC(.GetWnd())
     ~DrawText(dc&, "Beschriftung", -1, rec, ~DT_LEFT)
     ~DeleteDC(dc&)
 EndProc
 


Vielleicht kann ja Roland was dazu sagen. Ich komme da im
Moment nicht mehr weiter.


PS:

Wie es sich bei mir darstellt, mag das Control das Malen nicht,
warum auch immer.

Das geht :

 Proc PANEL.Neuzeichnen
    Create("Text", .GetWnd(), "Beschriftung", 10, 10, 85, 20)
 EndProc
 


H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (10.07.18 20:30)

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: RGH (194.25.203.---)
Datum:   11.07.18 09:08

Mit DRAW (oder auch RECTANGLE, LINE, etc.) gezeichnete Inhalte abseits des Hauptfensters werden beim von Windows verursachten Neuzeichnen des Fensters nicht automatiasch neugezeichnet. Dafür hat im Regelfall der Programmieerer zu sorgen.

Eine Ausnahme ist in XProfan das Hauptfenster. Da habe ich das automatische Neutzeichnen extra eingebaut. Vion Hause aus geschieht so etwas in Windows nicht. Wenn ein Fenster neu gezeichnet werden müsste, bekommt es von Windows die entsprechende Message, aber das Neuzeichnen muss dann das Fenster selbst besorgen.

Mit dem Erstellen des zweiten Dialogfensterts auf dem Hauptfenster wird dieses "ungültig" und muss neu gezeichnet werden. Dabei zeichnet Windows alle Dialogelemente neu, aber nicht mit DRAW, LINE, RECTANGLE, etc. gezeichnete Inhalte. Kurz: Der Text verschwindet.

Abhilfe ist hier der von Heinz vorgeschlagene weg, den Text mit CREATE("Text", ...) zu erzeugen. Das ist dann ein Dialogelement, dass von Windowes automatisch neu gezeichnet wird.

Für weitere Hintergründe unbedingt Kapitel 28.2 in der Hilfe nachlesen. Da steht auch, wie man das Neuzeichnen selbst in die Hand nehmen kann!

Gruß
Roland

Offizielle Homepage: http://www.xprofan.de
Der neue PROFAN-FAN-SHOP: http://www.spreadshirt.de/shop.php?sid=9330
Das kostenlose Kartenspiel: http://www.rgh-soft.de/sprace/sprace.htm

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Karl-Jürgen Hilger (---.dyn.telefonica.de)
Datum:   11.07.18 11:49

Hallo Roland,

ich bitte Dich, dem Problem noch einen Moment Aufmerksamkeit zu schenken.
Es gibt wirklich Grund zur Annahme, daß die Dinge hier anders liegen.

Alle Deine Hinweise sind mir glücklicherweise schon bekannt, die Hilfe hab ich unzählige Male gewissenhaft durchgekaut, und auch den Hinweis auf die klügere Verwendung von Create("Text") hatte ich in meinem ersten Post schon selbst gegeben, bevor Heinz das tat.

Zum Problem:
1. Warum funktioniert mein Code, wenn ich die verwendeten Controls durch entsprechende Fenster mit Create("ChildWindow") ersetze, (auch mit demselben Stil per SetStyle)

2. Warum funktioniert der Code noch unter X3.1 ?
Ich habe früher schon öfter mehrere solcher Dialogfenster auf dem Hauptfenster erstellt, und kann mich nicht an ein derartiges Problem erinnern.

Wieso sollte der Devicecontext eines Dialogfensters invalidiert und gelöscht werden, bloß, weil an ganz anderer Stelle ein weiteres Dialogfenster erstellt wird? Das in der Tat wäre eine Sache, von der ich noch nie gelesen oder gehört hätte.
Wenn das so ist, dann ziehe ich mir gern die Deppenkappe auf und entschuldige mich, Euch genervt zu haben. :)


Bitte, probier den Code dochmal kurz aus, falls noch nicht geschehen.


Dank und Gruß
KJ



Nachricht bearbeitet (11.07.18 12:39)

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: David Strutz (---.dsl.tropolys.de)
Datum:   13.07.18 20:12

Karl-Jürgen Hilger schrieb:

> Wieso sollte der Devicecontext eines Dialogfensters invalidiert
> und gelöscht werden, bloß, weil an ganz anderer Stelle ein
> weiteres Dialogfenster erstellt wird? Das in der Tat wäre eine
> Sache, von der ich noch nie gelesen oder gehört hätte.

Es ist leider nicht unmöglich (und meist später sehr verwirrend),
scheinbar konsistentes "Verhalten" aus "fehlerhaftem" Code
herzuleiten. :roll:

Das von Dir beschriebene Verhalten halte ich eher für "normal".

Fenster-Bereiche werden durch Vielerlei als "gelöscht" markiert
und nicht selten unnötig komplett als "Neu-zu-zeichnen",
sei es durch eine ungenaue Eltern-wProc.

Windows und die APPs gehen damit recht inflationär um,
man soll halt ständig neu zeichnen.

Auch wenn Controls scheinbar nicht überlappen so können
(je nach Windows und Einstellungen) Bereiche für Schatten
oder Glas (oder was auch immer) ein Neuzeichen eines größeren
Teilbereiches notwendig machen oder gleich ein Neuzeichnen
des gesamten Elternbereiches.

So neuzeichnen die APPs auch meist nicht nur den betroffenen
Bereich sondern meist den Nächstgrößeren. Dies wiederum kann
auch wieder nicht-validierte Bereiche erzeugen usw...

Roland zeichnet beim hWnd (vermutlich) auch nicht nur den
betroffenen Bereich neu sondern (vermutlich) auch das gesamte
hWnd. Würde dieses hWnd wiederum unter einem andere hWnd
liegen...



XProfan & FreeProfan rox: http://xprofan.net/



Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Karl-Jürgen Hilger (---.dyn.telefonica.de)
Datum:   14.07.18 00:53

Erstmal danke ich Dir ganz ausdrücklich, daß Du Dich überhaupt damit beschäftigst und Deine Zeit investiert, David.

Es ist völlig klar:
Niemals wäre ich so vermessen zu glauben, ich könnte mit Dir API diskutieren.
Erst recht dann nicht, wenn es allgemein darum geht, was in der API-Welt so alles möglich ist.
Das Motiv, warum ich überhaupt einen API-Begriff erwähnt habe, war ganz sicher nicht, damit auf dicke Hose zu machen.

Aber was ist mit meinen anderen Hinweisen?
Hier ist ein Code, der sich ab X4 anders verhält als noch unter X3.1.
Das Problem betrifft nur mit "Control" erstellte Fenster.

Mit diesen Fenstern konnte ich Roland bei der Entwicklung von X4 noch
den Startpaint- Stack- Bug demonstrieren, was _so_ jetzt gar nicht mehr möglich wäre.

Sowas war doch eigentlich immer ein Anlaß, einen Report ins Forum zu setzen, oder?
Deswegen bin ich auch über Rolands Antwort erstaunt, daß er mir die Basics des Neuzeichnens als Lektüre vorschlägt.!

Ich hielt das zuerst für ein ungewöhnliches Mißverständnis:
Man meldet eine Veränderung in XProfan, und bekommt den Ratschlag, das Handbuch zu lesen.

Jetzt meldest Du Dich, David und stellst mir die Untiefen der API dar.
Und jetzt versetzte Dich mal in meine Situation:
Dann hast Du die Untiefen der Api und das Handbuch zum Lesen - aber immer noch keine Bestätigung oder Hinweise zu der offensichtlichen Veränderung in X4.
Und ich sag Dir ganz ernsthaft: Das hat was surrealistisches und macht einen betroffen.
Wenn es an meiner Person Kritik geben sollte: bitte, gerne. Ich hab auch welche.
Aber so eine Situation fühlt sich nicht gut an.

Was ich aber noch kurz "zu Protokoll" bringen wollte.
In 7 Jahren intensiver Recherche hier im Forum ist mir kein einziger Beitrag erinnerlich, wo Neuzeichnen seitens des Programmierers in Verbindung mit dem hier von mir dargestellten Problem diskutiert wird.

Gruß und Dank (!):-)
KJ

Beitrag beantworten
 
 Re: Startpaint in X4
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)

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Karl-Jürgen Hilger (---.dyn.telefonica.de)
Datum:   14.07.18 15:07

Hallo Jörg!
Erstmal: Ich freue mich, daß Du Dich hier einklinkst.
Dein Beitrag ist fantastisch, weil er (aus meiner Sicht) das Material bietet, das Rätsel in maximal 3 Schritten zu klären.
Schritt 1 wird (aus meiner Sicht) zeigen, daß Ihr vielleicht von etwas ausgeht, was ich nie gesagt oder per Code demonstriert habe - im Gegenteil.
Schritt 3 wird (aus meiner Sicht) belegen, daß alle den markanten Unterschied zu X3.1 sehen konnten, wobei Du, Jörg, sogar einen Workaround einfügst,
ihn aber nicht erwähnst (warum nicht?), und trotzdem in Deinem letzten Satz schreibst:
"Das war aber auch in X13 schon so"
Obwohl Du selber mit dem Workaround bewiesen hast: "Nein, das war es nicht!":-?

Jetzt noch kurz meinen Status zu Deinen Tips, damit auch der Punkt vorweg geklärt ist:
Ja, ich benutze seit Langem nur noch Dialog-Panels mit Statics für Bitmaps und Text, oder auch Text auf Bitmaps,
sowohl wegen des automatischen Neuzeichnens seitens Windows, als auch wegen der bekannten Probleme beim Neuzeichnen / Färben mit Subclassing.
In meinem ersten Post erwähnte ich einen Unikat-Code von Andreas Miethe, der mich dazu inspirierte, doch nochmal die dunkle Seite des Grafik-Subclassings zu erforschen.
Dieser Bugreport hier war quasi nur ein entferntes Abfallprodukt.


Also denn:

Schritt 1. Du schreibst:
"... dass die Beschriftung auch bei profaneigenen Controls verschwindet, sobald die Dialoge von einem anderen Fenster verdeckt werden."

Das ist der Punkt.
Denn genau darum geht es hier ja auch gar nicht!
Hier überdecken sich keine Fenster!
Das habe ich in der Antwort auf Roland versucht, deutlich zu machen

Hier haben wir 2 räumlich unabhängige Control(Dialog)- Fenster, deren INITIALE Bemalung noch unter X3.1
erhalten bleibt, solange sie nicht von irgendwas überdeckt werden.
SO kennen wir das!

In X4 verschwindet aber die initiale Bemalung vom ersten Fenster, wenn das zweite erstellt wird,
Das nenne ich einen markanten und zudem unvorteilhaften Unterschied zu X3.1, bezogen auf Control(Dialog)
Wie soll ich das denn sonst nennen? "Keinen Unterschied"? "Normales Verhalten aus den Untiefen der Api"? ;-)

Also geht es auch nicht um das der Profangemeinde bekannte, klassische Neuzeichnen seitens des Programmierers, nachdem ein Dialog überdeckt war.
Sonst wäre mein Satz aus meinem letzten Post in der Tat total verrückt.
Ich zitiere:
"In 7 Jahren intensiver Recherche hier im Forum ist mir kein einziger Beitrag erinnerlich, wo Neuzeichnen seitens des Programmierers in Verbindung mit dem hier von mir dargestellten Problem diskutiert wird."



Schritt 2 (der Kürzeste)

Wenn dem unter Schritt 1 so ist, dann nehm ich mir Deinen zweiten Code, Jörg, und entferne die wm_paint - bezogenen Sachen aus der While- Schleife.
Und zwar weniger deshalb, weil jetzt klar ist, daß das gar nicht unser Problem war, sondern,
um schon rein optisch den verbleibenden Unterschied zu meinem ursprünglichen Code leichter auszumachen.



Schritt 3

Und hier ist der entscheidende Unterschied:

tafel1 = New(PANEL,010,010,200,200,3000)
tafel2 = New(PANEL,220,010,200,200,3001)
tafel1.neuzeichnen() <<<<-------------------------------------Das ist der Workaround, den Du einfügst


Das zeigt doch:
Es ist Dir aufgefallen, daß bei tafel1 die initiale Beschriftung verschwunden ist., während sie bei tafel2 noch da ist.
Das war unter X3.1 nicht so. Kein Workaround nötig!
Mal spassig gemeint: Oder hat irgendjemand von Euch schonmal gehört:
"Klar doch, bei mehreren Control(Dialog)- Fenstern muß man speziell das erste immer sofort neuzeichnen, das ist doch ein alter Hut"
Und deswegen wundert es mich, daß Du in Deinem Post diesen Workaround gar nicht weiter erwähnt hast.
Denn genau der zeigt, was ich als Bug darstellen wollte.
Von mir aus sind das auch nur fluktuierende inflationäre Aufforderungen zum Neuzeichnen aus den Untiefen er Api.;-)
Aber den Unterschied kann man doch nicht ignorieren!
--------------
Mehr hab' ich nicht aufzubieten.
Danke für Deinen hilfreichen Post, Jörg!
KJ



Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   14.07.18 19:03

Vielleicht diskutieren wir ja auch alle vergeblich.
Es könnte ja auch möglich sein, daß Roland beim
Reparieren des Startpaint-Stacks (in X4) etwas
unbewußt verändert hat und somit auch das andere
Verhalten von X4 erklärt.

Es könnte auch vom neuen Delphi kommen, das sich
Roland zugelegt hat.


Ist jetzt aber nur reine Spekulation von mir.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Karl-Jürgen Hilger (---.dyn.telefonica.de)
Datum:   14.07.18 21:44

Genau, Heinz!
Deine erste Vermutung war auch meine laienhafte Vermutung,
da sich ja beim Startpaint- Stack schon zeigte, daß die mit Control erzeugten Dialoge noch nicht so recht "am Start" waren.

Ich danke Dir auch nochmal ganz speziell, daß Du immer zum Helfen bereit bist, auch wenn wir uns dabei manchmal ein bißchen "kappeln".

Gruß
KJ



Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   15.07.18 08:02

Ja, und du hast Recht.
Habe mir mal Version X3.1 neu installiert.
Da läuft es richtig, aber nur im Interpreter.

Als .exe kommen da nur zwei leere Fenster.
Das läßt meine obige Vermutung nur noch
stärker werden, bzw. daß schon vorher
was nicht stimmte.


Irgendwo steckt da der Wurm drin.

H.Brill
XProfan X4 + FreeProfan

Nachricht bearbeitet (15.07.18 08:39)

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: RGH (---.hsi7.kabel-badenwuerttemberg.de)
Datum:   15.07.18 21:58

Hallo,

sorry, dass ich mich jetzt erst noch mal melde, aber ich hatte mir einen kleinen Kurzurlaub in London gegönnt.

Tatsächlich habe ich in Version X4, um einen gemeldeten Fehler zu beseitigen, in die Funktion "Control" nach dem Zeichen des Controls ein Neuzeichen des Fensters veranlasst. Das erklärt das unterschiedliche Verhalten zur Version X3.
Auch in X3 verschwindet der gezeichnete Text, sobald das Control überlappt wird oder kurz aus dem sichtbaren Bereich verschoben wird. Das Problem ist also dasselbe, nur etwas verschoben.
Auch da empfiehlt es sich also, entweder den Text mit Create("Text",...) zu erzeugen, wobei man ja auch da den Font durch Set("DialogFont", ...) beliebig einstellen kann, oder eben das Neuzeichnen selbst in die Hand zu nehmen, was ungleich komplizierter ist.

Gruß
Roland

Offizielle Homepage: http://www.xprofan.de
Der neue PROFAN-FAN-SHOP: http://www.spreadshirt.de/shop.php?sid=9330
Das kostenlose Kartenspiel: http://www.rgh-soft.de/sprace/sprace.htm

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Karl-Jürgen Hilger (---.dyn.telefonica.de)
Datum:   16.07.18 01:06

Hallo und welcome back!

Ok, wenn ich das richtig verstehe, dann kann man die Konsequenzen aus Deinem Statement und die Ergebnisse aus meinem Beispielcode doch wie folgt zusammenfassen, oder?
(Ich trage quasi nur die bisherigen Fakten zusammen.)

Ab X4 gilt (nur für mit Control erstellte Dialogfenster):

1. Zwei oder mehr bis auf die Positionierung identisch erzeugte Dialogfenster können unterschiedliche Ergebnisse liefern.
(Siehe Beispielcode: das eine hat noch seine initiale Beschriftung, das andere nicht)

2. Um bei diesem inkonsistenten Verhalten sicherzustellen, daß auch wirklich alle Fenster die intendierte Bemalung oder Beschriftung aufweisen, reicht das initiale Zeichnen bei der Erzeugung der Fenster nicht mehr aus.
Es muß anschließend sofort noch einmal neu gezeichnet werden.
(Siehe Jörgs Workaround)
Ab da gelten dann die üblichen Verfahren zum Neuzeichnen (wm_paint ....)


Ich gebe gerne zu: Wenn das das Resultat der Übertragung des Startpaint -Stacks auf mit Control erzeugte Fenster ist, hätte ich gern auf den Startpaint- Stack verzichtet.

Eine konsistente Erzeugung der Fenster, wo identisch erzeugte Fenster auch identische Ergebnisse liefern, wäre mir persönlich wertvoller.

Die Bedeutung der Sache von Heinz mit den leeren Fenstern bei einer exe unter X3.1 muss man wohl nochmal getrennt in Bezug auf X4 untersuchen.

Ich hoffe inständig, daß sich jetzt keiner mehr fragt, wovon ich hier eigentlich rede .......
Denn dann brauch ich auch Kurzurlaub in London :-)

Gruß
KJ



Nachricht bearbeitet (16.07.18 01:38)

Beitrag beantworten
 
 Re: Startpaint in X4
Autor: Heinz Brill (---.dip0.t-ipconnect.de)
Datum:   16.07.18 04:18

Dann müßte es doch für Roland machbar sein, daß
es überall so funktioniert, wie im Interpreter von X3.1.
Der Quellcode der XProfan- Funktionen von Interpreter
und Runtime ist bzw. sollte ja immer der gleiche sein.

Ist ja nur ein Vergleichen der Codes. Mit dem Startpaint-
Stack hat das ja nichts zu tun.

Nicht, daß wir es jetzt unbedingt bräuchten, aber irgendwann
taucht dieses Thema in einem der zwei anderen Foren wieder
auf und das Spiel beginnt von vorne.

Da wäre ein Patch für die Versionen ja genau richtig.

H.Brill
XProfan X4 + FreeProfan

Beitrag beantworten
 Foren-Liste  |  Baumstruktur   Neuerer Beitrag  |  Älteres Thema 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org