![]() |
Checkbox in TabSheet
Hallo allerseits,
hat jemand eine Idee, wie ich in den Reiter eines TabSheet eine Checkbox integrieren kann? Quasi wie auch ein Browser einen "X-Button" im Tab hat, möchte ich gern eine Checkbox haben. Für Ideen und Anregungen wäre ich schon mal sehr dankbar. Gruß Stefan |
Re: Checkbox in TabSheet
- Neue Delphi-Version (Nicht mit Sicherheit ob da was ergänzt wurde)
- Andere Komponenten (ElPack, Jedi, ...) - Ownerdraw (sehr Aufwendung um alle Fälle wie XP-Theming zu unterstützen). |
Re: Checkbox in TabSheet
|
Re: Checkbox in TabSheet
Erstmals vielen Dank für eure Antworten.
zu hathor: der Link ergibt leider keine Ergebnisse ?!? zu Bernhard: Hab Delphi 7 und mit OwnerDraw hab ich mich versucht, aber wie du schon erwähntest ist es mit XP-Theme sehr schwierig. Leider hab ich in meinen installierten Jedi-Komponenten bereits gesucht aber nicht dergleichen gefunden. Was das LMD-Pack angeht, habe ich auch dort keine Infos darüber gefunden. Gruß Stefan |
Re: Checkbox in TabSheet
Liste der Anhänge anzeigen (Anzahl: 1)
Die Komponente (KEIN Pack, sehr wichtig) AdvancedPageConrol kann das.
Anhang Einfach Demo ansehen und begeistert sein :D |
Re: Checkbox in TabSheet
Zitat:
![]() |
Re: Checkbox in TabSheet
Zitat:
|
Re: Checkbox in TabSheet
Zitat:
|
Re: Checkbox in TabSheet
Zitat:
Müsste aber schauen (Mo?) ob da evtl. ein Custom-Image möglich wäre. Dann nimmt man einmal eine gecheckte Checkbox und einmal eine ungecheckte. Und die korrekt gethemte Version lässt sich über die Theming-API dynamisch bestimmen. |
Re: Checkbox in TabSheet
Zitat:
|
Re: Checkbox in TabSheet
Liste der Anhänge anzeigen (Anzahl: 1)
OK,
ich hab die Lösung, nachdem ich mich an diesem ![]() Hier die Lösung (Sind nur die Schnipsel die auch benötigt werden):
Delphi-Quellcode:
Im Anhang hab ich dann noch ein Bild davon, wie's bei mir aussieht...
uses Themes, CommCtrl;
const UM_DESTROYCONTROL = WM_USER + 1; type TForm1 = class(TForm) private procedure ShowTabCheckBoxes; procedure ShowTabCheckBox(PageIndex: Integer); function CheckBoxChecked(TabSheetIndex: Integer; var CheckBoxStatus: Integer): Boolean; procedure ReCalculateCheckBoxPositions; procedure UmDestroyControl(var msg: TMessage); message UM_DESTROYCONTROL; procedure CheckBoxDestroy(Sender: TObject); public { Public-Deklarationen } end; TrwCheckBox = class(TCheckBox) private { Private-Deklarationen } public constructor Create(AOwner: TComponent); override; end; constructor TrwCheckBox.Create(AOwner: TComponent); begin inherited; Height := 14; Width := 14; // Checked := True; // AllowGrayed := DoAllowGrayed; end; procedure TForm1.ReCalculateCheckBoxPositions; var i: Byte; Rect: TRect; begin if PageControl1.PageCount <> 0 then begin for i := 0 to Pred(PageControl1.PageCount) do begin Rect := PageControl1.TabRect(i); with TrwCheckBox(PageControl1.Pages[i].Tag) do begin Top := Rect.Top + 3; Left := Rect.Left + 4; end; end; RedrawWindow(PageControl1.Handle, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN); end; end; procedure TForm1.ShowTabCheckBox(PageIndex: Integer); var sCheckBox: TrwCheckBox; Rect: TRect; begin sCheckBox := TrwCheckBox.Create(PageControl1.Pages[PageIndex]); sCheckBox.Parent := PageControl1; sCheckBox.OnMouseUp := CheckBoxOnMouseUp; PageControl1.Pages[PageIndex].Tag := Integer(sCheckBox); //Notlösung, da kA wie man das TRect manuell setzt um den Reiter zu verbreitern: PageControl1.Pages[PageIndex].Caption := ' ' + PageControl1.Pages[PageIndex].Caption; Rect := PageControl1.TabRect(PageIndex); sCheckBox.Top := Rect.Top + 3; sCheckBox.Left := Rect.Left + 4; end; procedure TForm1.ShowTabCheckBoxes; var i: Byte; begin for i := 0 to Pred(PageControl1.PageCount) do ShowTabCheckBox(i); end; {*** Diese Funktion ist nur für meine Zwecke nötig ***} function TForm1.CheckBoxChecked(TabSheetIndex: Integer; var CheckBoxStatus: Integer): Boolean; begin case TrwCheckBox(PageControl1.Pages[TabSheetIndex].Tag).State of cbUnchecked : CheckBoxStatus := 0; cbGrayed : CheckBoxStatus := 1; cbChecked : CheckBoxStatus := 2; end; result := CheckBoxStatus > 0; end; {*** Diese Funktion ist nur für meine Zwecke nötig ***} {*** nur zum löschen eines Tabs wärend der Laufzeit notwendig ***} procedure TForm1.UmDestroyControl(var msg: TMessage); begin TComponent(msg.LParam).Owner.Free; ReCalculateCheckBoxPositions; end; procedure TForm1.CheckBoxDestroy(Sender: TObject); begin if PtInRect((Sender as TrwCheckBox).ClientRect, Point(X, Y)) then PostMessage(Handle, UM_DESTROYCONTROL, 0, Integer(Sender)); end; {*** nur zum löschen eines Tabs wärend der Laufzeit notwendig ***} procedure TForm1.FormCreate(Sender: TObject); begin ShowTabCheckBoxes; end; Vielen Dank für eure Hilfe und ich hoffe daß es den ein oder anderen gibt, der evtl. auch Interresse an dieser Lösung hat. Gruß Stefan |
Re: Checkbox in TabSheet
Liste der Anhänge anzeigen (Anzahl: 1)
Geht mit ElPack-pagecontrol und zugewiesener Imagelist
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 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