Author Topic: Problem bei überlappenden Fenstern  (Read 1513 times)

Drrääääcks

  • Guest
Problem bei überlappenden Fenstern
« on: June 06, 2005, 08:01:21 am »
Hab meinen Beleg jetzt fertig und will noch die Kinderfehler von Delphi wegmachen.
Problem ist  wenn ich mein Prog klein mache oder ein anderes Fenster drüber zieh sind all Grafischen darstellungen teilweise oder ganz verschwunden. Muss irgentein befehl mit activate oder so sein. Wer nett wenn den einer weiß und auch erklärt wie man den befehl einbauen muss.


MFG   :ph34r:

n-w

  • Hero Member
  • *****
  • Posts: 1011
  • Karma: +0/-0
    • View Profile
    • http://
Problem bei überlappenden Fenstern
« Reply #1 on: June 06, 2005, 11:52:46 am »
Ich würde es mit den Fkt. OnActivate oder OnResize ... versuchen. Dann neuzeichnen?

Bei mir gibt´s das Problem nicht, habe auf einer PaintBox gezeichnet.

KCalive

  • Sr. Member
  • ****
  • Posts: 440
  • Karma: +0/-0
    • View Profile
    • http://
Problem bei überlappenden Fenstern
« Reply #2 on: June 06, 2005, 12:40:21 pm »
über sowas braucht ihr euch keine rübe zu machen. glaubt mir, die testat abnahme is ein witz;-) so lang es halbwegs läuft... und wenn er den bug doch rausbekommt...  dann habt eben nich dran gedacht. die unterschrift bekommt ihr schon.
\"Wenn du denkst etwas zu sein, hast du aufgehört, etwas zu werden ...\"

DIGIT

  • Hero Member
  • *****
  • Posts: 1136
  • Karma: +0/-0
    • View Profile
    • http://fsr.mw.tu-dresden.de/site_neu/kontakt/kontakt.php
Problem bei überlappenden Fenstern
« Reply #3 on: June 06, 2005, 01:08:58 pm »
Hi D.. :flower:
Ich extrapoliere von anderen Programmen, vorzugsweise Microsoft-Produkten, woraus sofort folgt, dass sie auch nicht g'scheiter sind.

Das Resize-Event wird auch bei Änderung des Window-State (Maximieren, Minimieren, Normal) des Fensters aufgerufen.
Wenn man das Resize-Event ausprogrammiert, dann ist bei der Minimierung des Fensters eine "Division durch Null", oder ein "negativer Fensterparameter" etc.  ein sehr beliebter Fehler. Das Programm stürzt nicht ab (war früher so) - aber das Ändern vom Refresh im Zuge des Window-States funktioniert nicht mehr richtig.
Abhilfe in Resize-Abschnitt:
If (xxx.windowstate = acWindowStateMinimized) { (so ähnlich)
   mach nix
} else {
   mach das, was Du wolltest
}

Bitte hier zuerst prüfen.

Ein Refresh im Acitivate-Event ist durch die Brust ins Auge, sofern das Activate-Event erst durch die Maus ausgelöst wird. Gar nicht schön.

Hierzu noch weitere Diagnosen und Fummelein denkbar und möglich.

Weisst Du was am besten und billigsten funktioniert ?
(1) Mach in der Menüleiste den Min/Max/Normal-Button weg. Problem gelöst. Is gut is billig.

Grüße
DIGIT
 :limes_0:
So, hoffe, nun auch sündacktisch und grammatisch halbwegs in Ordnung.
Lange Nacht
der Wissenschaft!
Reimt sich nacht.
--
In Bierstube nachgedacht
Heureka! Drehmomentkraft!
Reimt sich immer noch naft.

Luke

  • Sr. Member
  • ****
  • Posts: 462
  • Karma: +0/-0
    • View Profile
    • http://
Problem bei überlappenden Fenstern
« Reply #4 on: June 06, 2005, 04:08:44 pm »
Quote
Originally posted by Drrääääcks@6.6. 2005 - 8:01
Hab meinen Beleg jetzt fertig und will noch die Kinderfehler von Delphi wegmachen.
Problem ist  wenn ich mein Prog klein mache oder ein anderes Fenster drüber zieh sind all Grafischen darstellungen teilweise oder ganz verschwunden. Muss irgentein befehl mit activate oder so sein. Wer nett wenn den einer weiß und auch erklärt wie man den befehl einbauen muss.


MFG   :ph34r:
Meiner Meinung hat Dein Problem eine ganz einfache Ursache: Der Inhalt des Canvas-Objektes einer Paintbox wird beim Verdecken / Minimieren "wegradiert". Um das zu vermeiden, müsstest Du auf die Canvas der Image-Komponente zurückgreifen; Befehle sind gleich, allerdings verbraucht die deutlich mehr Arbeitsspeicher, PainBox ist schneller und es gibt noch so ein paar Details, die aber an der Stelle hier zu weit gehen ;-).
Daher: Der Inhalt der Canvas einer Image-Kompenente ist statisch und regeneriert sich nach Verdecken selbst, bei einer Paintbox musst Du den Inhalt durch entsprechende Events neu zeichnen.
Bei der Testatabgabe wirst Du aber wohl eher dumm angemacht, wenn du keine Paintbox genommen hast, wie uns das bei der Stopuhr in der Einführung gezeigt wurde, vermut ich mal ;-)... Vermutlich ist die Image-Komponente hier eher auch getreu dem Motto "mit Kanonen auf Spatzen schießen".

Luke

Drrääääcks

  • Guest
Problem bei überlappenden Fenstern
« Reply #5 on: June 06, 2005, 06:10:20 pm »
keine vorschläge die mir weiter helfen.
Wenn ich Mini/Max und X  weg mache dann wird die Paintbox trotzdem durch jedes andere fenster radiert.
Scheinbar legen sie doch Wert drauf, letztens wurde es mit dem Fehler nicht abgenommen.

@ n-w hab auch ne Paintbox, wenn du da nicht rumgefummelt hast   gibts bei dir den gleichen fehler.

n-w

  • Hero Member
  • *****
  • Posts: 1011
  • Karma: +0/-0
    • View Profile
    • http://
Problem bei überlappenden Fenstern
« Reply #6 on: June 06, 2005, 06:40:43 pm »
Passiert bei mir doch, stört aber nicht. Wenn das Program läuft, wird pausenlos alles neu gezeichnet, schadet also nicht. Nur wenn ich Pause drücke und ein anderes Fenster drüberziehe, wird radiert.

Warum nimmst dann nicht die Fkt. OnActivate und zeichnest damit alles neu?

Luke

  • Sr. Member
  • ****
  • Posts: 462
  • Karma: +0/-0
    • View Profile
    • http://
Problem bei überlappenden Fenstern
« Reply #7 on: June 06, 2005, 10:48:41 pm »
Siehe meinen Post oben, der Inhalt einer Canvas einer Paintbox regeneriert sich nun mal nicht selbst. Du musst durch entsprechende Routinen bei entsprechenden Ereignissen selbst für einen Neuaufbau sorgen (soweit möglich). Oder Du nimmst TImage.Canvas. Hier schreibst Du quasi Deine Zeichnung in einen Puffer, und das Bild regeneriert sich von selbst. Mehr Arbeitsspeicher, und auch glaub ich etwas langsamer wenn ich mich recht erinnere. Dann hast Du das Problem aber nicht mehr. Entweder oder...

Luke

Drrääääcks

  • Guest
Problem bei überlappenden Fenstern
« Reply #8 on: June 07, 2005, 06:29:17 am »
mkay   :nudelholz:

Marc_II

  • Jr. Member
  • **
  • Posts: 87
  • Karma: +0/-0
    • View Profile
    • http://
Problem bei überlappenden Fenstern
« Reply #9 on: June 07, 2005, 06:29:11 pm »
Es geht auch ganz einfach mit OnPaint

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  [Das was er zeichnen soll]
end;


...und als Event halt OnPaint einstellen bei der PaintBox
I know I was born and I know that I\'ll die
The in between is mine
I am mine

DIGIT

  • Hero Member
  • *****
  • Posts: 1136
  • Karma: +0/-0
    • View Profile
    • http://fsr.mw.tu-dresden.de/site_neu/kontakt/kontakt.php
Problem bei überlappenden Fenstern
« Reply #10 on: June 07, 2005, 06:37:44 pm »
Leute wenn alles nicht hilft - so als letzte Rettung - , dann baut einen Timer und im Timer-Event ein Refresh/Repaint oder dergleichen ein.
Klingt brutal.
Ist brutal.
Wenn Du mal gesehen hast, wie die Microsoft-Leute arbeiten, dann graust Dir vor gar nichts mehr....

Motto:
Verwende niemals Gewalt.
Nimm einfach einen größeren Hammer.

Grüße
DIGIT
 :limes_0:
Lange Nacht
der Wissenschaft!
Reimt sich nacht.
--
In Bierstube nachgedacht
Heureka! Drehmomentkraft!
Reimt sich immer noch naft.