Moin!
Wenn ich in den Projekt-Einstellungen das Windows-Manifest aktiviere, werden TabSheets (in einem PageControl) mit weißem Hintergrund dargestellt, und nicht mit grauem Hintergrund wie ohne Manifest.
Das Weiß ist für mich aber sehr ungünstig (unbrauchbar), ich benötige eine weniger helle Hintergrundfarbe.
Auf das TabSheet setze ich ein Frame, das mittels ParentBackground:=False sogar eine eigene Farbe mitbringt, aber mit eingeschaltetem Manifest wird auf dem TabSheet auch die Frame-Farbe stur ignoriert und der Frame-Hintergrund erscheint weiß.
Für ein TabSheet scheint es auch kein OwnerDraw und OnPaint zu geben, oder?
Kennt jemand einen Trick für die TabSheet-Hintergrundfarbe?
Danke und Grüße, Jörg
TabSheet Color
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: TabSheet Color
Hi!
Ich weiß nix von Manifest, aber der Trick geht unter Linux so:
Gibt der Form auf dem die PageControl und die Tasbsheets liegen eine Farbe.
Die Tabsheets nehmen automatisch die Farbe der Form an.
Vielleicht kommst Du ja mit diesem Tipp weiter.
Winni
Ich weiß nix von Manifest, aber der Trick geht unter Linux so:
Gibt der Form auf dem die PageControl und die Tasbsheets liegen eine Farbe.
Die Tabsheets nehmen automatisch die Farbe der Form an.
Vielleicht kommst Du ja mit diesem Tipp weiter.
Winni
Re: TabSheet Color
Eine einfache Lösung wäre ein TPanel auf dem TabSheet zu platzieren und auf diesem dann das Frame. Es bleibt dann aber ein weißer Rand und die Tabs selbst sind ebenfalls mit dem Windows Theme Color gefüllt.
Eine weitere Möglichkeit wäre OwnerDraw zu nutzen. Ich habe mal ein kleines Bsp. angehangen, wie es hier funktioniert (Windows only, Win7 Aero Theme getestet, HighDPI unaware!). Wenn du noch die Tabs farbig ändern oder du wissen willst, warum das bei dem TPageControl so ist, findest du weitere Infos hier https://stackoverflow.com/questions/182 ... owner-draw
Eine weitere Möglichkeit wäre OwnerDraw zu nutzen. Ich habe mal ein kleines Bsp. angehangen, wie es hier funktioniert (Windows only, Win7 Aero Theme getestet, HighDPI unaware!). Wenn du noch die Tabs farbig ändern oder du wissen willst, warum das bei dem TPageControl so ist, findest du weitere Infos hier https://stackoverflow.com/questions/182 ... owner-draw
Code: Alles auswählen
uses ... windows, LMessages...
type
TPageControl = class(ComCtrls.TPageControl)
public
procedure CNDrawitem(var Message: TWMDrawItem); message LM_DRAWITEM;
end;
...
procedure TPageControl.CNDrawitem(var Message: TWMDrawItem);
var
Rect: TRect;
begin
Rect := Message.DrawItemStruct^.rcItem;
InflateRect(Rect, -4, -4);
TextOut(Message.DrawItemStruct^.hDC, Rect.Left, Rect.Top,
PChar(Pages[Message.DrawItemStruct^.itemID].Caption),
Length(Pages[Message.DrawItemStruct^.itemID].Caption));
Message.Result := 1;
inherited;
end;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
PageControl1.OwnerDraw := True;
end;
- Dateianhänge
-
PageControl_Test.zip
- (2.69 KiB) 238-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
- Aidex
- Beiträge: 60
- Registriert: Do 24. Sep 2020, 07:02
- OS, Lazarus, FPC: Win10 64bit, Laz v2.0.10
- CPU-Target: AMD64
Re: TabSheet Color
Meinen besten Dank für eure Antworten und die Mühe mit dem Beispielprogramm!
Ich habe mich jedoch gerade für eine andere Lösung entschieden, da ich die Sheet-Inhalte sowieso je auf einzelnen Frames habe.
Ich nutze von meinem vorhandenen PageControl nur noch die Tabs, aber nicht mehr die Sheets,
d.h. ich reduziere die Höhe auf die Tab-Höhe. Anstelle der Sheets setze ich bedarfsweise das richtige Frame unter die Tabs-Leiste.
Das Frame einfach direkt auf das Form.
Dann muss ich mich zwar um das Ein-/Ausblenden und Positionieren der Frames gesondert kümmern, aber das ist schlichter
als Tricksereien mit zusätzlichen Panels oder OwnerDraw.
Danke und Grüße, Jörg
Ich habe mich jedoch gerade für eine andere Lösung entschieden, da ich die Sheet-Inhalte sowieso je auf einzelnen Frames habe.
Ich nutze von meinem vorhandenen PageControl nur noch die Tabs, aber nicht mehr die Sheets,
d.h. ich reduziere die Höhe auf die Tab-Höhe. Anstelle der Sheets setze ich bedarfsweise das richtige Frame unter die Tabs-Leiste.
Das Frame einfach direkt auf das Form.
Dann muss ich mich zwar um das Ein-/Ausblenden und Positionieren der Frames gesondert kümmern, aber das ist schlichter
als Tricksereien mit zusätzlichen Panels oder OwnerDraw.
Danke und Grüße, Jörg
Re: TabSheet Color
Wenn du alle Frames gleichzeitig verfügbar haben willst, kannst du als Container auch ein TNotebook nehmen - das ist sowas wie ein PageControl ohne Tabs.Aidex hat geschrieben: Fr 14. Mai 2021, 23:35 Dann muss ich mich zwar um das Ein-/Ausblenden und Positionieren der Frames gesondert kümmern, ...