Delphi-PRAXiS

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/)
-   -   TabSet und tsOwnerDraw (https://www.delphipraxis.net/180045-tabset-und-tsownerdraw.html)

Popov 18. Apr 2014 17:02

TabSet und tsOwnerDraw
 
Ich hab ein Programm das enthält die Komponente TabSet, und die wirkt mit dem Windows 3.1 Look etwas deplatziert. Also wollte ich das Aussehen aufpeppen und die Tabs unter DrawTabs selbst zeichnen, nur klappt das irgendwie nicht. Inzwischen weiß ich nicht ob das überhaupt geht.

Zuletzt habe ich das Beispiel unten geschrieben, das beim letzten Tab die gesamte Canvas von TabSet löscht. Eigentlich sollte die ganze Fläche danach leer sein. Und siehe da, danach wird noch ein Tab gezeichnet.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  TabSet1.Style := tsOwnerDraw;
  for i := 0 to 5 do
    TabSet1.Tabs.Add(StringOfChar(Chr(i + 65 ), i + 1));
end;

procedure TForm1.TabSet1DrawTab(Sender: TObject; TabCanvas: TCanvas;
  R: TRect; Index: Integer; Selected: Boolean);
begin
  with TabSet1, TabCanvas do
    if Index = (FirstIndex + VisibleTabs - 1) then
      FillRect(ClipRect);
end;
Nun stellt sich mir die Frage ob man die Tabs neu zeichnen kann und ich nur etwas übersehe, oder ob das überhaupt nicht geht?

Volker Z. 18. Apr 2014 23:42

AW: TabSet und tsOwnerDraw
 
Hallo,

Zitat:

[...] Also wollte ich das Aussehen aufpeppen und die Tabs unter DrawTabs selbst zeichnen, nur klappt das irgendwie nicht. [...]
Mittels DrawTab funktioniert es nicht. Der Eventhandler wird eigentlich nur zum Zeichnen der Beschriftung angestoßen, das Zeichnen (Shape, etc.) des Tabs macht die Komponente selbst.
Zitat:

[...] Eigentlich sollte die ganze Fläche danach leer sein. Und siehe da, danach wird noch ein Tab gezeichnet.
Dabei wird in der Paint-Methode das DrawTab irgendwo zwischendrin angestoßen und anschließend zeichnet die Paint-Methode fröhlich weiter - daher auch das Verhalten in Deinem Beispiel.
Zitat:

Nun stellt sich mir die Frage ob man die Tabs neu zeichnen kann und ich nur etwas übersehe, oder ob das überhaupt nicht geht?
Dazu musst Du schon die Paint-Methode (oder, wenn vorhanden DoDefaultPainting) überschreiben.

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 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