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/)
-   -   Delphi Aktives TabSheet farblich hervorheben (https://www.delphipraxis.net/82618-aktives-tabsheet-farblich-hervorheben.html)

Chemiker 16. Dez 2006 13:19


Aktives TabSheet farblich hervorheben
 
Hallo,

ich würde gerne den Reiter in einem aktive TabSheet farblich hervorheben, damit es leichter für den Benutzer ist, zu Erkennen welcher TabSheet aktiv ist.

Ich habe zur Zeit keinen Ansatzpunkt.

Kann mir jemand weiterhelfen?

Bis bald Chemiker

Christian Seehase 16. Dez 2006 13:21

Re: Aktives TabSheet farblich hervorheben
 
Moin Chemiker,

Du müsstest dazu nur die Eigenschaft OwnerDraw des PageControls auf true setzen, und kannst dann im Ereignis OnDrawTab das Tab nach Herzenslust gestalten.

Reinhard Kern 16. Dez 2006 13:27

Re: Aktives TabSheet farblich hervorheben
 
Zitat:

Zitat von Chemiker
Hallo,

ich würde gerne den Reiter in einem aktive TabSheet farblich hervorheben, damit es leichter für den Benutzer ist, zu Erkennen welcher TabSheet aktiv ist.

Ich habe zur Zeit keinen Ansatzpunkt.

Kann mir jemand weiterhelfen?

Bis bald Chemiker

Hallo,

das aktive Sheet ist doch im Vordergrund, deutlicher gehts nicht - und dazu gibt es noch die Eigenschaft Hilighted.

Gruss Reinhard

Chemiker 16. Dez 2006 14:33

Re: Aktives TabSheet farblich hervorheben
 
Hallo,

Zitat:

Hallo,

das aktive Sheet ist doch im Vordergrund, deutlicher gehts nicht - und dazu gibt es noch die Eigenschaft Hilighted.

Gruss Reinhard
Bei einem PageControl ist es noch deutlich, aber wenn man innerhalb des TabSheet einen weiter PageControl mit mehren TabSheet hat ist es für einen Benutzer nicht immer so deutlich.

Mit Highlighted wir der Tabsheet permanent farblich hervorgehoben und nicht nur der Aktive.

Zitat:

Moin Chemiker,

Du müsstest dazu nur die Eigenschaft OwnerDraw des PageControls auf true setzen, und kannst dann im Ereignis OnDrawTab das Tab nach Herzenslust gestalten.
Mit dem Aufruf in dem Ereignis OnDrawTab

Delphi-Quellcode:
TabSheet1.Brush.color := clred;
verschwindet die Bezeichnung der Reiter und die Farbe wird erst beim 2 wechsel des Tabsheets angezeigt.

Bis bald Chemiker

Christian Seehase 16. Dez 2006 17:52

Re: Aktives TabSheet farblich hervorheben
 
Moin Chemiker,

hier mal ein kleines Beispiel:

Delphi-Quellcode:
procedure TfrmcsDLMain.pcMainDrawTab(Control: TCustomTabControl; TabIndex: Integer; const Rect: TRect; Active: Boolean);
begin
  if Active then begin
    Control.Canvas.Brush.Color := clInfoBk;
    Control.Canvas.Font.Style := Control.Canvas.Font.Style + [fsBold];
  end else begin
    Control.Canvas.Brush.Color := clBtnFace;
    Control.Canvas.Font.Style := Control.Canvas.Font.Style - [fsBold];
  end;
  Control.Canvas.FillRect(Rect);
  Control.Canvas.TextOut(Rect.Left+2,Rect.Top+2,(Control as TPageControl).Pages[TabIndex].Caption);
end;
Das die Bezeichnung verschwindet ist nicht weiter verwunderlich, denn wenn das auf OwnerDraw gestellt ist, muss Du auch die Beschriftung selber zeichnen (TextOut).

Chemiker 16. Dez 2006 19:06

Re: Aktives TabSheet farblich hervorheben
 
Hallo,

die beiden Anweisungen

Delphi-Quellcode:
Control.Canvas.Font.Style := Control.Canvas.Font.Style + [fsBold];
habe ich gelöscht, weil sie dazu führten das über die Reiter hinaus geschrieben wurde.

Darüberhinaus habe ich in der Anweisung

Delphi-Quellcode:
Control.Canvas.TextOut(Rect.Left+2,Rect.Top+2,(Control as TPageControl).Pages[TabIndex].Caption);
die 2 von Rect.Left und Rect.Top durch eine 5 ersetzt.

Das sieht schon ganz gut aus, da ist nur noch ein Problem:

ich habe 2 PageControls, bei dem äußern PageControl ist ein Rahmen um die Beschriftung was nicht so gut aussieht, bei dem Inneren ist dieser nicht.

Wie kann man vermeiden das der Rahmen um die Beschriftung der Reiter gezeichnet wird.

Bis bald Chemiker

Nils_13 16. Dez 2006 19:40

Re: Aktives TabSheet farblich hervorheben
 
Hi,

Delphi-Quellcode:
Control.Canvas.Font.Style := Control.Canvas.Font.Style + [fsBold];
kannst du mit Sicherheit lassen, wenn du die Breite mit einem bestimmten Faktor (kA, wie dieser lautet) veränderst.


Unter dem letzten Problem mit den beiden PageControls kann ich mir leider nichts vorstellen. Hast du da etwa zwei PageControls praktisch ineinander oder was meinst du ? Kannst ja mal einen Screenshot hochladen.

Chemiker 17. Dez 2006 09:24

Re: Aktives TabSheet farblich hervorheben
 
Hallo,


Zitat:

Delphi-Quellcode: markieren
Control.Canvas.Font.Style := Control.Canvas.Font.Style + [fsBold];


kannst du mit Sicherheit lassen, wenn du die Breite mit einem bestimmten Faktor (kA, wie dieser lautet) veränderst.
ich habe nicht verstanden was Du damit meinst?

Zitat:

Unter dem letzten Problem mit den beiden PageControls kann ich mir leider nichts vorstellen. Hast du da etwa zwei PageControls praktisch ineinander oder was meinst du ? Kannst ja mal einen Screenshot hochladen.
Ja ich habe mehre PageControls ineinander.

Ein Screenschot kann ich leider nicht so einfach Hochladen, weil ich mit dem "Delphi-Rechner" nicht ins Internet gehe, auf dem "Delphi-Rechner" ist kein Virenscanner, Firewall usw.. Es wird auch nicht ständig Bill G. benachrichtigt welche Unterhose ich grade beim Programmieren anhabe. Ich muss auch nicht ständig irgendwelche LiveUpdates von Windows, Norton usw. durchführen.

Ich kann den Rechner anstellen und mit einer vernünftigen Geschwindigkeit arbeiten.

Entschuldigung das musste ich mal loswerden, weil der Bildschirm heute mal wieder ständig mit Sicherheitswarnungen der Firewall vollgeschrieben wird und Norten mich grade wieder zu einem LiveUpdate auffordert und ich das letzte Update erst gestern durchgeführt habe.

Bis bald Chemiker

Nils_13 17. Dez 2006 11:29

Re: Aktives TabSheet farblich hervorheben
 
Delphi-Quellcode:
Delphi-Quellcode: markieren
Control.Canvas.Font.Style := Control.Canvas.Font.Style + [fsBold];


kannst du mit Sicherheit lassen, wenn du die Breite mit einem bestimmten Faktor (kA, wie dieser lautet) veränderst.
Damit wollte ich sagen, dass du die Breite der TabSheets mit einem Faktor multiplizierst, welcher immer passt, denn:
du hast in einem TabSheet
asd
im Anderen
asdasdasdasdasdasdasd
.
Der Zweite ist also von sich aus größer und müsste, genauso wie der erste TabSheet, mit einem Faktor multipliziert werden, so dass es perfekt passt. Allerdings ist das verändern der Breite eines Sheets nicht leicht, musst mal im Forum suchen.


[OT]
Stell doch Norton ruhig.
[/OT]


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