AGB  ·  Datenschutz  ·  Impressum  







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

Eigene Kompo / Paint mit Floodfill unzuverlässig

Ein Thema von Medium · begonnen am 15. Sep 2011
Antwort Antwort
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#1

Eigene Kompo / Paint mit Floodfill unzuverlässig

  Alt 15. Sep 2011, 15:53
Ich habe vor einiger Zeit eine Hand voll visueller Komponenten unter Delphi 7 gebastelt, und model die gerade für D2007 auf. Dabei taucht nun ein Problem auf, dass ich unter D7 zwar im Form-Designer auch hatte, da es zur Runtime aber nicht auftrat war das verschmerzbar.
Konkret geht es um 2 Komponenten die von TGraphicControl abgeleitet sind, und überlappend angeordnet sind:
1) Bild eines Tanks
2) Balkenanzeige mit Beschriftung darüber
(siehe Bild im Anhang)

Die Paint-Methode von TTank:
Delphi-Quellcode:
procedure TTank.Paint;
var
  arcHeight: Double;
begin
  inherited;
  arcHeight := Height*(FArcPercent/100);
  Canvas.Pen.color := clblack;
  Canvas.Pen.Width := 2;
  Canvas.MoveTo( 1, Round(arcHeight/2));
  Canvas.LineTo( 1, Height-Round(arcHeight/2));
  Canvas.MoveTo(Width-2, Round(arcHeight/2));
  Canvas.LineTo(Width-2, Height-Round(arcHeight/2));
  Canvas.Arc(1, 1, Width-1, Round(arcHeight), Width-1, Round(arcHeight/2), 1, Round(arcHeight/2));
  Canvas.Arc(1, Height-1, Width-1, Height-Round(arcHeight), 1, Height-Round(arcHeight/2), Width-1, Height-Round(arcHeight/2));
  Canvas.Brush.Color := FColor;
  Canvas.Brush.Style := FFillStyle;
  Canvas.FloodFill(3, Round(arcHeight/2)+1, clBlack, fsBorder);
end;
Die Balken-Kompo tut im Grunde nichts anderes (ist viel zu lang zum komplett posten): Malt genau so auf dem Parent-Canvas herum, wobei aber nie der gesamte Bereich der Kompo gefüllt wird. Also teiltransparent. Im Anhang das Bild zeigt zwei solche überlagerten Komponentenpaare auf dem selben Formular zur selben Zeit. Das linke wird richtig gezeichnet, beim rechten jedoch taucht im Rect der Balken-Komponente auf einmal die Hintergrundfarbe des Parents (das Form) auf. Diese Fehldarstellung taucht mal auf, mal nicht. Teils bei allen dieser Anordnungen auf einem Form, manchmal auch nur bei manchen wie im Beispiel.
Da ich so geartete Überlagerungen auch an anderen Stellen ohne Probleme nutze, vermute ich hier das Problem beim FloodFill, weil dies ist die einzige Komponente, die dieses nutzt. Alle andere zeichnen mit den Methoden wie Rectangle() gleich gefüllt. Es scheint fast so, als würde das Rect der überlagernden Komponente (selbst wenn diese in dem Bereich nichts zeichnet) für das FloodFill eine Grenze darstellen - aber eben nicht immer. Und seit D2007 leider nicht mehr nur noch im Form-Designer.
Hat da wer einen heissen Tip?
Miniaturansicht angehängter Grafiken
tanks.png  
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:09 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