![]() |
TCategoryPanelGroup modifizieren
Ich würde gerne die in meinem Delphi XE Pro verfügbare Komponente TCategoryPanelGroup verwenden. Diese erfüllt fast alle Anforderungen, die ich benötige.
Allerdings gefallen mir zwei visuelle Aspekte nicht, die ich gerne ändern würde. Zum einen bleibt ein kleiner Abstand, wenn ein Panel zusammengeklappt wurde und zum anderen würde ich gerne die Pfeile anders zeichnen. Ich dachte, dazu könnte ich die Komponente ableiten und entsprechend anpassen. Allerdings habe ich scheinbar nicht den Sourcecode der Komponente. Laut Delphi befindet sich TCategoryPanelGroup in ExtCtrls, allerdings ist in der entsprechenden .pas keine Spur davon. Vermutlich also nur in der kompilierten .dcu. Wie komme ich also an den Sourcecode? Oder kann ich das auch ohne bewerkstelligen? |
AW: TCategoryPanelGroup modifizieren
Also bei mir im 2010 ist der Code vorhanden und ich denke im XE sollte er es auch sein.
Die Unit ist auch richtig, aber vielleicht solltest du dir mal TCustomCategoryPanelGroup genauer ansehen. Tipp: Die Sache mit der Vererbung ist schon eine interessante Sache. |
AW: TCategoryPanelGroup modifizieren
Die Grafiken für die Pfeile kannst du so ändern, ohne eine eigene Komponente abzuleiten.
|
AW: TCategoryPanelGroup modifizieren
Zitat:
Im Embarcadero Ordner habe ich den Quelltext jetzt auch. :roll: Zitat:
Also danke Euch beiden erstmal. Dann schaue ich mal, ob ich mit der Anpassung zurechtkomme. :) |
AW: TCategoryPanelGroup modifizieren
Zitat:
Statt Strg+Linksklick kann man auch über's Kontextmenü "Deklaration suchen" des Codeeditors dort hin. |
AW: TCategoryPanelGroup modifizieren
Zitat:
Ich komme allerdings gerade nicht weiter mit dem Überschreiben einer Funktion der Basiskomponente. Ich habe jetzt folgendes:
Delphi-Quellcode:
Damit sollte der Pfeil doch schon mal nicht gezeichnet werden, oder? Jedenfalls erhalte ich beim Kompilieren die Meldung: "Method 'DrawHeaderChevron' not found in base class". DrawHeaderChevron ist Teil von TCustomCategoryPanel von dem TCategoryPanel abgeleitet ist. Ich denke für meinen Fall ist es einfacher von TCategoryPanel abzuleiten statt von TCustomCategoryPanel, da ich sonst erst alles, was fehlt, selbst nachrüsten müsste.
unit MyCategoryPanelGroup;
interface uses SysUtils, Classes, Controls, Forms, ExtCtrls, Graphics; type TMyCategoryPanelGroup = class(TCategoryPanelGroup) private { Private declarations } protected { Protected declarations } procedure DrawHeaderChevron(ACanvas: TCanvas); override; public { Public declarations } published { Published declarations } end; procedure Register; implementation procedure Register; begin RegisterComponents('My', [TMyCategoryPanelGroup]); end; procedure TCategoryPanelGroup.DrawHeaderChevron(ACanvas: TCanvas); begin // end; end. Warum wird DrawHeaderChevron also nicht gefunden? |
AW: TCategoryPanelGroup modifizieren
Würde mich sehr freuen, wenn mir jemand zeigt, wie das geht!
Habe es selbst leider nicht herausfinden können. :( |
AW: TCategoryPanelGroup modifizieren
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TCategoryPanel = class(extctrls.TCategoryPanel) private { Private declarations } protected { Protected declarations } public procedure DrawHeaderChevron(ACanvas: TCanvas);override; { Public declarations } published { Published declarations } end; TForm1 = class(TForm) CategoryPanelGroup1: TCategoryPanelGroup; CategoryPanel1: TCategoryPanel; CategoryPanel2: TCategoryPanel; Button1: TButton; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} { TCategoryPanelGroup } procedure TCategoryPanel.DrawHeaderChevron(ACanvas: TCanvas); begin //>> beispiel Acanvas.FillRect(Rect(0,0,width,Height)); end; end. |
AW: TCategoryPanelGroup modifizieren
Vielen Dank, Bummi! Das funktioniert. :)
Aber wie komme ich jetzt noch an die Zustände wie FHeaderState oder FCollapsed bzw. weitere Attribute wie die gesetzten Farben (FPanelGroup.ChevronColor) heran? |
AW: TCategoryPanelGroup modifizieren
Du musst Dir die Sachen einfach zusammensuchen, ich habe noch mal ein sinnfreies Beispiel angehängt...
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TCategoryPanel = class(extctrls.TCategoryPanel) private { Private declarations } protected { Protected declarations } public procedure DrawHeaderChevron(ACanvas: TCanvas);override; property HeaderState; { Public declarations } published { Published declarations } end; TForm1 = class(TForm) CategoryPanelGroup1: TCategoryPanelGroup; CategoryPanel1: TCategoryPanel; CategoryPanel2: TCategoryPanel; private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TCategoryPanel.DrawHeaderChevron(ACanvas: TCanvas); begin //>> beispiel Acanvas.Brush.Color := TCategoryPanelGroup(Parent).ChevronColor; Acanvas.FillRect(Rect(0,0,width,Height)); Case HeaderState Of hsNormal: ACanvas.TextOut(0,0,'N'); hsPressed: ACanvas.TextOut(0,0,'P'); hsHot: ACanvas.TextOut(0,0,'H'); End; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 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