AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gezeichnetes Object (TRect) verschwindet

Ein Thema von blackmice · begonnen am 28. Nov 2007 · letzter Beitrag vom 28. Nov 2007
Antwort Antwort
Seite 1 von 2  1 2      
blackmice

Registriert seit: 24. Okt 2007
Ort: Niederkrüchten
28 Beiträge
 
Delphi 5 Standard
 
#1

Gezeichnetes Object (TRect) verschwindet

  Alt 28. Nov 2007, 10:17
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]
Blackmice
Debuggers don't remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Gezeichnetes Object (TRect) verschwindet

  Alt 28. Nov 2007, 10:20
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!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Gezeichnetes Object (TRect) verschwindet

  Alt 28. Nov 2007, 10:25
Der Code sieht aus, als sei er nicht gerade resourcenfreunlich
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...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Gezeichnetes Object (TRect) verschwindet

  Alt 28. Nov 2007, 10:26
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
blackmice

Registriert seit: 24. Okt 2007
Ort: Niederkrüchten
28 Beiträge
 
Delphi 5 Standard
 
#5

Re: Gezeichnetes Object (TRect) verschwindet

  Alt 28. Nov 2007, 10:41
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
Debuggers don't remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
blackmice

Registriert seit: 24. Okt 2007
Ort: Niederkrüchten
28 Beiträge
 
Delphi 5 Standard
 
#6

Re: Gezeichnetes Object (TRect) verschwindet

  Alt 28. Nov 2007, 10:44
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.

Blackmice
Debuggers don't remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Gezeichnetes Object (TRect) verschwindet

  Alt 28. Nov 2007, 10:48
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.)
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
blackmice

Registriert seit: 24. Okt 2007
Ort: Niederkrüchten
28 Beiträge
 
Delphi 5 Standard
 
#8

Re: Gezeichnetes Object (TRect) verschwindet

  Alt 28. Nov 2007, 10:56

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.
Blackmice
Debuggers don't remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Gezeichnetes Object (TRect) verschwindet

  Alt 28. Nov 2007, 11:03
Zitat von blackmice:

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 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? ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
blackmice

Registriert seit: 24. Okt 2007
Ort: Niederkrüchten
28 Beiträge
 
Delphi 5 Standard
 
#10

Re: Gezeichnetes Object (TRect) verschwindet

  Alt 28. Nov 2007, 11:10
Das weiß wohl nur Gott. Ich jedenfalls kriege dann ein weißes Kästchen, da wo ich meine Paintbox definiert habe, und keinen Farbverlauf.
Blackmice
Debuggers don't remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:52 Uhr.
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