AGB  ·  Datenschutz  ·  Impressum  







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

FillRect mit weißer Farbe funktioniert nicht!

Ein Thema von sko1 · begonnen am 19. Mär 2018 · letzter Beitrag vom 19. Mär 2018
Antwort Antwort
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

FillRect mit weißer Farbe funktioniert nicht!

  Alt 19. Mär 2018, 07:42
Hallo,
in einer eigenen Komponente (von TSpeedButton abgeleitet) möchte ich einen blauen Rahmen mit weißem Inhalt haben.

Also habe ich im Paint der Komponente folgendes stehen:

Delphi-Quellcode:
procedure TTerminButton.Paint;
var
  b, h: single;
begin
  inherited;
  b := Width;
  h := Height;
  canvas.BeginScene;
  canvas.Fill.Kind := TBrushKind.Solid;
  canvas.Stroke.Kind := TBrushKind.Solid;
  canvas.ClearRect(RectF(0, 0, b, h), TAlphaColors.White);
  canvas.Fill.Color := TAlphaColors.Blue;
  canvas.Stroke.Color := TAlphaColors.Blue;
  canvas.FillRect(RectF(1, 1, b - 1, h - 1), 0, 0, AllCorners, 100);
//innen
  canvas.Fill.Color := TAlphaColors.White;
  canvas.Stroke.Color := TAlphaColors.White;
  canvas.FillRect(RectF(2, 2, b - 2, h - 2), 0, 0, AllCorners, 100);
  canvas.EndScene;
aber der Hintergrund ist so grau wie das darunterliegende Panel mit einem GridPanelLayout, auf dem meine Buttons sitzen.
Nehme ich für innen eine andere Farbe (gelb, rot, etc.) funktioniert das korrekt!

Warum zum teufel funktioniert weiß nicht?

Ciao
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von bytecook
bytecook

Registriert seit: 6. Aug 2010
Ort: Dornbirn
151 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: FillRect mit weißer Farbe funktioniert nicht!

  Alt 19. Mär 2018, 09:51
Hallo,
in einer eigenen Komponente (von TSpeedButton abgeleitet) möchte ich einen blauen Rahmen mit weißem Inhalt haben.

Also habe ich im Paint der Komponente folgendes stehen:

Delphi-Quellcode:
procedure TTerminButton.Paint;
var
  b, h: single;
begin
  inherited;
  b := Width;
  h := Height;
  canvas.BeginScene;
  canvas.Fill.Kind := TBrushKind.Solid;
  canvas.Stroke.Kind := TBrushKind.Solid;
  canvas.ClearRect(RectF(0, 0, b, h), TAlphaColors.White);
  canvas.Fill.Color := TAlphaColors.Blue;
  canvas.Stroke.Color := TAlphaColors.Blue;
  canvas.FillRect(RectF(1, 1, b - 1, h - 1), 0, 0, AllCorners, 100);
//innen
  canvas.Fill.Color := TAlphaColors.White;
  canvas.Stroke.Color := TAlphaColors.White;
  canvas.FillRect(RectF(2, 2, b - 2, h - 2), 0, 0, AllCorners, 100);
  canvas.EndScene;
aber der Hintergrund ist so grau wie das darunterliegende Panel mit einem GridPanelLayout, auf dem meine Buttons sitzen.
Nehme ich für innen eine andere Farbe (gelb, rot, etc.) funktioniert das korrekt!

Warum zum teufel funktioniert weiß nicht?

Ciao
Stefan
Hi Stefan,

füll das Weiß mit Fillrect, oder nimm als Füllfarbe mal $FFFFFFFF statt TAlphaColors.White ...

Gruß,

Peter
Peter
Was mache ich, wenn ein Bär meine Frau angreift?
Nichts. Er hat sie angegriffen, soll er doch selber sehen, wie er sich verteidigt.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: FillRect mit weißer Farbe funktioniert nicht!

  Alt 19. Mär 2018, 10:26
Hier findest Du bestimmt eine Lösung, da wird zwar TButton genommen aber das Prinzip müssste das gleiche sein.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: FillRect mit weißer Farbe funktioniert nicht!

  Alt 19. Mär 2018, 10:35
Hallo Peter,

nein, hilft nicht!

Was mir aber nun bei 'zig Versuchen aufgefallen ist:

Schreibe ich eine OnPaint-Procedure in der FormMain und weise diese meiner Komponente zu, funktioniert es!
Hier aber habe ich als Parameter vom Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF), in der Komponente nicht!

Versuche ich diese Parameter in der Komponente zu verwenden, wird
Delphi-Quellcode:
  protected
    { Protected-Deklarationen }
    procedure Paint(Sender: TObject; Canvas: TCanvas;
      const ARect: TRectF); override;
E2037 Deklaration von 'Paint' unterscheidet sich von vorheriger Deklaration

bemängelt!

Hast Du eine Idee was da schiefläuft?

Ciao
Stefan
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: FillRect mit weißer Farbe funktioniert nicht!

  Alt 19. Mär 2018, 13:24
Lösung:

Ich habe in der Komponente nun eine

MyPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF)

und diese im OnCreate der Komponente zugewiesen.
Jetzt wird wie gewünscht gezeichnet, warum ein

Paint; overwrite;

nicht korrekt gezeichnet hat, bleibt ein Rätsel...

Ciao
Stefan
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
251 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: FillRect mit weißer Farbe funktioniert nicht!

  Alt 19. Mär 2018, 13:31
warum ein

Paint; overwrite; nicht korrekt gezeichnet hat, bleibt ein Rätsel...
Ich würde sagen das hat mit den Stilen zu tun.
Wenn eine Komponente nur durch ihren Stil gezeichnet wird, ruft sie intern Paint nicht auf, was sich mit einem breakpoint in Paint verifizieren lässt.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  Mit Zitat antworten Zitat
sko1

Registriert seit: 27. Jan 2017
588 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: FillRect mit weißer Farbe funktioniert nicht!

  Alt 19. Mär 2018, 13:42
Das dumme aber ist, dass das Paint gefeuert wurde, per Breakpoint überprüft!

Ciao
Stefan
  Mit Zitat antworten Zitat
jziersch

Registriert seit: 9. Okt 2003
Ort: München
251 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: FillRect mit weißer Farbe funktioniert nicht!

  Alt 19. Mär 2018, 15:28
Abgleitet von einem TSpeedButton funktioniert mein code in einer klasse:

Code:
procedure TSpecButton.Paint;
var r : TRectF;
begin
  inherited;
  r := ClipRect;
  canvas.BeginScene;
  canvas.Fill.Kind := TBrushKind.Solid;
  canvas.Stroke.Kind := TBrushKind.Solid;
  canvas.FillRect(r, 0,0, AllCorners, TAlphaColors.White);
  canvas.Stroke.Color := TAlphaColors.Blue;
  canvas.Fill.Kind := TBrushKind.None;
  InflateRect(r,-1, -1);
  canvas.DrawRect(r, 0, 0, AllCorners, 100);
  canvas.EndScene;
end;
Ich könnte mir aber vorstellen, dass ClearRect, wie in dem original code verwendet, manchmal anders funktioniert. Soweit ich verstanden habe ist dies eigentlich für bitmaps gedacht - ich habe es zumindest nie verwendet.
WPCubed GmbH
Komponenten für Delphi:
WPTools, wPDF, WPViewPDF
  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 16:41 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