Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Gezeichnetes Object (TRect) verschwindet (https://www.delphipraxis.net/104154-gezeichnetes-object-trect-verschwindet.html)

blackmice 28. Nov 2007 09:17


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:
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;
ein Rechteck gezeichnet. Wenn das Fenster jetzt aus irgendeinem Grund in den Hintergrund geschoben wird, dann verschwindet das Rechteck. Wie kann ich das verhindern?
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]

SirThornberry 28. Nov 2007 09:20

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!

Deep-Sea 28. Nov 2007 09:25

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...

Luckie 28. Nov 2007 09:26

Re: Gezeichnetes Object (TRect) verschwindet
 
Das wäre eine Lösung, aber nicht die beste. Lies dir mal diesen Artikel durch Wie Windows funktioniert. Dann verstehst du auch, warum das so ist.

blackmice 28. Nov 2007 09:41

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.

blackmice 28. Nov 2007 09:44

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.

:(

Deep-Sea 28. Nov 2007 09:48

Re: Gezeichnetes Object (TRect) verschwindet
 
Zitat:

Zitat von blackmice
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.

:(

Wie kann ich ... einen Farbverlauf mit beliebig vielen Farben auf einen Canvas zeichnen?
http://www.swissdelphicenter.ch/de/showcode.php?id=1162

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.)

blackmice 28. Nov 2007 09:56

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:
//==============================================================================
// 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;
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.

Deep-Sea 28. Nov 2007 10:03

Re: Gezeichnetes Object (TRect) verschwindet
 
Zitat:

Zitat von blackmice
:wiejetzt:
Hmm, sieht nicht gerade einfach aus. Letzten Endes habe ich eine (für mich) leichter verständliche Variante die den Farbverlauf berechnet.

Also ich finde ihn nicht kompliziert. Aber nun ja.

Zitat:

Zitat von blackmice
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.

Wieso klappt es nicht? ...

blackmice 28. Nov 2007 10:10

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:07 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz