TabControl und Farbe
-
Wie kann ich die Fabe der Lasche eines Tabcontrols aendern?
Mir ist klar das das nur ueber das OnDrawTab Ereignis geht.
Allerdings weiss ich nicht wie.
-
Vielleicht sollte ich noch anfuegen das, wenn ich OwnerDraw auf true setze die Laschen automatisch die Farbe des Tabs annehmen.
Allerdings ist dann schreiben nicht mehr.
-
Fuer ein PageControl habe ich ein DEMO.
Dazu hab ich ne Komponente von TPageControl abgeleitet://HEADER- DATEI class TColorPageControl : public TPageControl { __published: // Von der IDE verwaltete Komponenten private: // Anwenderdeklarationen virtual void __fastcall ShowControl(Controls::TControl* AControl); TColor FPageColor; TColor FTabColor; TColor FTabSheetColor; TColor FTabSheetBorderColor; virtual void __fastcall CreateParams(Controls::TCreateParams &Params); virtual void __fastcall PaintWindow(HDC DC); virtual void __fastcall DrawTab(int TabIndex, const Windows::TRect &Rect, bool Active); void __fastcall SetPageColor(TColor C); void __fastcall SetTabColor(TColor C); void __fastcall SetTabSheetColor(TColor C); void __fastcall SetTabSheetBorderColor(TColor C); public: // Anwenderdeklarationen __fastcall TColorPageControl(TComponent* Owner); __published: __property TColor PageColor ={read=FPageColor, write=SetPageColor}; __property TColor TabColor ={read=FTabColor, write=SetTabColor}; __property TColor TabSheetColor ={read=FTabSheetColor, write=SetTabSheetColor}; __property TColor TabSheetBorderColor ={read=FTabSheetBorderColor, write=SetTabSheetBorderColor}; }; //--------------------------------------------------------------------------- //CPP- DATEI void __fastcall TColorPageControl::ShowControl(Controls::TControl* AControl) { TPageControl::ShowControl(AControl); } //--------------------------------------------------------------------------- void __fastcall TColorPageControl::SetPageColor(TColor C) { FPageColor=C; Color=C; SetTabSheetBorderColor(C); // Invalidate(); } //--------------------------------------------------------------------------- void __fastcall TColorPageControl::SetTabColor(TColor C) { FTabColor=C; Invalidate(); } //--------------------------------------------------------------------------- void __fastcall TColorPageControl::SetTabSheetColor(TColor C) { FTabSheetColor=C; Brush->Color=C; Invalidate(); } //--------------------------------------------------------------------------- void __fastcall TColorPageControl::SetTabSheetBorderColor(TColor C) { FTabSheetBorderColor=C; Invalidate(); } //--------------------------------------------------------------------------- __fastcall TColorPageControl::TColorPageControl(TComponent* Owner) : TPageControl(Owner) { FPageColor=clBtnFace; FTabColor=clBtnFace; FTabSheetColor=clBtnFace; Color=FTabSheetColor; Brush->Color=FPageColor; Canvas->Brush->Color=FTabColor; } //--------------------------------------------------------------------------- void __fastcall TColorPageControl::CreateParams(Controls::TCreateParams &Params) { HBRUSH BR; TCustomTabControl::CreateParams(Params); /* BR=Params.WindowClass.hbrBackground; DeleteObject(BR); BR=GetStockObject(HOLLOW_BRUSH); Params.WindowClass.hbrBackground=BR; */ } //--------------------------------------------------------------------------- void __fastcall TColorPageControl::PaintWindow(HDC DC) { TRect R; R=DisplayRect; R.Left-=4; R.Top-=4; R.Right+=4; R.Bottom+=4; TCanvas *CV=new TCanvas; CV->Handle=DC; CV->Brush->Color=FTabSheetBorderColor; CV->FillRect(R); delete CV; if (OwnerDraw) { TPageControl::PaintWindow(DC); } else { TPageControl::PaintWindow(DC); } } //--------------------------------------------------------------------------- void __fastcall TColorPageControl::DrawTab(int TabIndex, const Windows::TRect &Rect, bool Active) { //TPageControl::DrawTab(TabIndex,Rect,Active); Canvas->Brush->Color=FTabColor; // Canvas->FillRect(Rect); Canvas->TextRect(Rect, Rect.Left+(Rect.Width()-Canvas->TextWidth(Pages[TabIndex]->Caption)) / 2, Rect.Top+(Rect.Height()-Canvas->TextHeight(Pages[TabIndex]->Caption)) / 2, Pages[TabIndex]->Caption); } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { TTabSheet *TS; CPC=new TColorPageControl(this); CPC->Parent=this; TS=new TTabSheet(CPC); TS->PageControl=CPC; TS->Caption="T1"; TS=new TTabSheet(CPC); TS->PageControl=CPC; TS->Caption="T2"; TS=new TTabSheet(CPC); TS->PageControl=CPC; TS->Caption="T3"; CPC->Left=50; CPC->Top=50; CPC->HotTrack=true; CPC->PageColor=clYellow; CPC->TabColor=clRed; CPC->TabSheetColor=clBlue; CPC->TabSheetBorderColor=clGreen; CPC->OwnerDraw=OD->Checked; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { delete CPC; } //---------------------------------------------------------------------------Vielleicht hilft das etwas.

-
Ich werde mich mal durchbeissen.
Danke fuer deine Antwort.
-
So habe ich es gelöst (PrgFarbe ist ein Integerwert für den Hintergrund z.B. clBtnFace):
void __fastcall TForm1::frm1_tabReiterDrawTab(TCustomTabControl *Control, int TabIndex, const TRect &ARect, bool Active) {try { // Fehlerroutine Start AnsiString z1; TColor f1,f2; // Vars definieren TTabSheet *PTab; // TabControl anlegen TCanvas *ACanvas; // Canvas vorbereiten TRect CRect; // Rect vorbereiten CRect=ARect; // Akt. Rect übergeben PTab =frm1_tabReiter->Pages[TabIndex]; // Reiter als Control übergeben ACanvas=Control->Canvas; // Canvas übergeben z1 =PTab->Caption; // Text im Reiter f1=PrgFarbe; // HG Farbe Standard f2=clBtnText; // VG Farbe Standard if(Active==true) { // REITER IST AKTIV f1=clBtnHighlight; f2=clBlack; // Voreinstellung switch(TabIndex) { // welcher Reiter? case 1: f1=clGreen; f2=clWhite; break; // PLAN case 2: f1=clMaroon; f2=clWhite; break; // SCHRANK case 3: f1=clNavy; f2=clWhite; break; // AUFTRÄGE case 4: f1=clYellow; f2=clBlack; break; // BEMERKUNG case 5: f1=clFuchsia; f2=clBlack; break; // ZUSTÄNDIG case 6: f1=clOlive; f2=clWhite; break; // ZUBEHÖR case 7: f1=clGray; f2=clWhite; break; // HISTORIE case 8: f1=clRed; f2=clWhite; break; // DATEIEN } // ende switch(TabIndex } // ende if(Active ACanvas->Brush->Color=f1; // Farbe HG festlegen ACanvas->Font->Color =f2; // Farbe VG festlegen ACanvas->Font->Name="Arial"; ACanvas->Font->Size=8; // Schrift anpassen ACanvas->FillRect(CRect); // Fläche erst füllen DrawText(ACanvas->Handle,z1.c_str(),-1,&CRect,DT_CENTER | DT_VCENTER | DT_SINGLELINE); // Text schreiben } catch(Exception& e) { MessageBox(NULL, e.Message.c_str(), "TForm1::frm1_tabReiterDrawTab()", MB_OK); } // Fehler anzeigen }Gruss Stefan