![]() |
Tabsheet Color
Hallo zusammen,
zum Thema PageControl TabSheet mit Farbe füllen gibt es viele Beiträge. Auf SwissDelphiCenter.ch habe ich ein Beispiel gefunden wovon ich glaube es könnte funktionieren. Ich habe das Beispiel umgesetzt, Delphi meldet jedoch an einer Stelle einen Fehler:
Delphi-Quellcode:
Windows.FillRect kennt er nicht und ich komme nicht drauf was in die uses eingebunden werden muss - kann mir da jemand auf die Sprünge helfen?
procedure TTabSheet.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
begin if FColor = clBtnFace then inherited else begin Brush.Color := FColor; Windows.FillRect(Msg.dc, ClientRect, Brush.Handle); Msg.Result := 1; end; end; Gruß |
AW: Tabsheet Color
FillRect ist 'ne Methode von TCanvas.
Nachfahren von TWinControl haben eine Eigenschaft Canvas. Da TTabSheet von TWinControl abgeleitet ist, müsste es mit TTabSheet.Canvas.FillRect eigentlich funktionieren. Da hab' ich irgendwie falsch geguckt. TWinControl hat keine Eigenschaft Canvas. |
AW: Tabsheet Color
sorry, geht leider nicht. Wenn ich das mit pagecontrol1.tabsheet... mache kennt er Msc.dc nicht.
Es muss so funktionieren wie im Beispiel, es gilt also herauszufinden warum er bei Windows meckert bzw. was in die Uses aufgenommern werden muss damit er windows akzeptiert - oder eine alternative Schreibweise. Freue mich aber über jeden Ansatz ;-) |
AW: Tabsheet Color
Hmm..
Funktioniert doch... (Delphi 6) Musste nur aus 'FColor' ein 'Color' machen. Das TabSheet muss dann natürlich manuell erstellt werden und ins PageControl eingehängt werden. Wenn Du die Funktionen vom PageControl verwendest, wird das normale Tab erstellt und nicht dein geändertes. Beispiel:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls; type TForm1 = class(TForm) PageControl1: TPageControl; ButtonCreate: TButton; Button_Color: TButton; procedure ButtonCreateClick(Sender: TObject); procedure Button_ColorClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; TTabSheet2 = class(TTabSheet) protected procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd); published property Color; end; var Form1: TForm1; implementation {$R *.dfm} { TTabSheet2 } procedure TTabSheet2.WMEraseBkGnd(var Msg: TWMEraseBkGnd); begin if Color = clBtnFace then inherited else begin Brush.Color := Color; Windows.FillRect(Msg.dc, ClientRect, Brush.Handle); Msg.Result := 1; end; end; procedure TForm1.ButtonCreateClick(Sender: TObject); var tmp : TTabSheet2; begin tmp := TTabSheet2.Create(PageControl1); tmp.PageControl := PageControl1; tmp.Color := clRed; end; procedure TForm1.Button_ColorClick(Sender: TObject); begin TTabSheet2(PageControl1.ActivePage).Color := clGreen; end; end. |
AW: Tabsheet Color
Hallo HolgerX,
danke für deine ausführliche Anleitung, habs jetzt aber hinbekommen, wieder mal ein blöder Leichtsinnsfehler :oops: WinApi.Windows.FillRect.... funktioniert :thumb: Hab nun aber festgestellt dass clBtnFace im TabSheet eine andere Farbe hat wie im Formular, wollte die Funktionalität des TabSheets nutzen, das TabSheet selber aber weitestgehend unsichtbar machen umd zur jeweiligen Situation andere Eingabefelder einzublenden. Muß wohl einen anderen Weg suchen. Gruß |
AW: Tabsheet Color
Zitat:
Ciao Stefan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 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-2025 by Thomas Breitkreuz