![]() |
Gezeichnetes Object (TRect) verschwindet
Hallo,
Wahrscheinlich ist das Problem wieder mal bekannt, ich finde nur nicht die richtigen Suchparameter, aber ich habe mit
Delphi-Quellcode:
ein Rechteck gezeichnet. Wenn das Fenster jetzt aus irgendeinem Grund in den Hintergrund geschoben wird, dann verschwindet das Rechteck. Wie kann ich das verhindern?
procedure TForm1.Button1Click(Sender: TObject);
var radius, r : Integer; rt : TRect; i : Integer; dtest : TComponent; begin radius := 400; for r := radius downto 1 do begin rt := Rect(0,0,10, -r); OffsetRect(rt, 600, 425); Canvas.Pen.Color := ColorsBetween([clBlack, clGreen, clYellow, clred], r / radius); Canvas.Polygon([Point(rt.left, rt.top), Point(rt.right, rt.top), Point(rt.right, rt.Bottom), Point(rt.left, rt.bottom)]); end; end; Gibt es vielleicht irgendein Formularelement (Image oder Paintbox oder sowas) in das ich das Rechteck zeichnen kann, damit es nicht verschwindet? [edit=Phoenix]'Code' in Delphi-Tags geändert. Bitte nächstes mal auf die richtigen Tags achten. Mfg, Phoenix[/edit] |
Re: Gezeichnetes Object (TRect) verschwindet
verhindern kannst du so etwas in dem du das malen in das OnPaint vom Formular packst. Das Verschwinden erklärt sich wie folgt:
Den Bildschirm unter Windows kannst du dir wie EIN Stück Papier vorstellen. Wenn du etwas malst ist es nur so lange sichtbar bis es übermalt wird. Und einen Radiergummi gibt es nicht! |
Re: Gezeichnetes Object (TRect) verschwindet
Der Code sieht aus, als sei er nicht gerade resourcenfreunlich :-D
Ggf. kannst du dann auf eine Bitmap oä. zeichnen und diese dann im OnPaint ausgeben. So musst du nicht ständig neu Zeichnen, sondern nur wenn du dein Rechteck ändern willst... |
Re: Gezeichnetes Object (TRect) verschwindet
Das wäre eine Lösung, aber nicht die beste. Lies dir mal diesen Artikel durch
![]() |
Re: Gezeichnetes Object (TRect) verschwindet
Also das mit dem Code in OnPaint funktioniert auf jeden Fall. Das Problem mit dem Image ist, dass noch nicht feststeht, wie dieser Farbverlauf(denn das zeichne ich da) aussehen soll. Wie gesagt, ich hätte auch kein Problem mit etwas, dass ich nur einmal zeichnen muss, damit das nicht so performance raubend ist.
|
Re: Gezeichnetes Object (TRect) verschwindet
Aber vielleicht hat ja auch jemand von euch eine andere Idee, wie ich einen Farbverlauf am Rand meines Fensters darstellen kann. Dieser Farbverlauf soll nur als Referenz dienen. Ich habe eine Gruppe von Panels, die unterschiedlich eingefärbt sind, und der Farbverlauf soll meine Skala darstellen. Eigentlich soll er nur beim Drücken eines bestimmten Buttons erscheinen, aber da er wieder verschwindet ist das schwierig.
:( |
Re: Gezeichnetes Object (TRect) verschwindet
Zitat:
![]() Zeichne auf eine PaintBox (im OnPaint-Ereignis). Diese kannst du bequem mit Hide und Show bzw. Visible verstecken und wieder anzeigen. (Alternativ kannst du abfragen ob du malen sollst oder nicht. Wenn du es verstecken willst, setzt du die Variable auf False und rufst Invalidate auf.) |
Re: Gezeichnetes Object (TRect) verschwindet
:wiejetzt:
Hmm, sieht nicht gerade einfach aus. Letzten Endes habe ich eine (für mich) leichter verständliche Variante die den Farbverlauf berechnet.
Delphi-Quellcode:
Diese Funktionen rufe ich dann für meinen Farbverlauf aus. Ich habe auch schon versucht mit dem Canvas einer Paintbox oder eines Images diesen Farbverlauf zu erzeugen, aber das klappt auch nicht.
//==============================================================================
// Farbe zwischen 2 vorgegebenen Farbwerten berechnen //============================================================================== function ColorBetween(C1, C2 : TColor; blend:Real):TColor; var r, g, b : Byte; y1, y2 : Byte; begin C1 := ColorToRGB(C1); C2 := ColorToRGB(C2); y1 := GetRValue(C1); y2 := GetRValue(C2); r := Round(y1 + (y2-y1)*blend); y1 := GetGValue(C1); y2 := GetGValue(C2); g := Round(y1 + (y2-y1)*blend); y1 := GetBValue(C1); y2 := GetBValue(C2); b := Round(y1 + (y2-y1)*blend); Result := RGB(r, g, b); end; //============================================================================== // Farbe zwischen beliebig vielen vorgegebenen Farbwerten berechnen //============================================================================== function ColorsBetween(colors:array of TColor; blend:Real):TColor; var a : Integer; faktor : Real; begin if Length(colors) < 2 then raise Exception.Create('ColorsBetween() at least 2 Colors required'); if blend <= 0.0 then Result := colors[0] else if blend >= 1.0 then Result := colors[High(colors)] else begin a := Trunc(High(colors) * blend); faktor := 1.0 / High(colors); Result := ColorBetween(colors[a], colors[a+1], (blend-(a * faktor)) / faktor); end; end; |
Re: Gezeichnetes Object (TRect) verschwindet
Zitat:
Zitat:
|
Re: Gezeichnetes Object (TRect) verschwindet
Das weiß wohl nur Gott. Ich jedenfalls kriege dann ein weißes Kästchen, da wo ich meine Paintbox definiert habe, und keinen Farbverlauf.
|
Re: Gezeichnetes Object (TRect) verschwindet
Nachdem ich mir jetzt mal den Hinweis von Luckie durchgearbeitet habe, habe ich wohl eine Version gefunden, die 1. funktioniert, und 2. wohl auch performant ist.
Danke an alle für die Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz