AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TCategoryPanelGroup modifizieren

Offene Frage von "cpux86"
Ein Thema von Keks · begonnen am 2. Apr 2011 · letzter Beitrag vom 7. Nov 2019
Antwort Antwort
Seite 1 von 2  1 2      
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#1

TCategoryPanelGroup modifizieren

  Alt 2. Apr 2011, 12:53
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#2

AW: TCategoryPanelGroup modifizieren

  Alt 2. Apr 2011, 12:58
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TCategoryPanelGroup modifizieren

  Alt 2. Apr 2011, 13:00
Die Grafiken für die Pfeile kannst du so ändern, ohne eine eigene Komponente abzuleiten.
Markus Kinzler
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#4

AW: TCategoryPanelGroup modifizieren

  Alt 2. Apr 2011, 13:27
Also bei mir im 2010 ist der Code vorhanden und ich denke im XE sollte er es auch sein.
Jetzt wo Du es sagst, fällt mir auf, dass ich im Borland Ordner (meiner alten 2006er Installation) geschaut habe...
Im Embarcadero Ordner habe ich den Quelltext jetzt auch.

Die Grafiken für die Pfeile kannst du so ändern, ohne eine eigene Komponente abzuleiten.
Ich finde es ein bisschen komfortabler und ressourcenschonender, die simplen Icons direkt zu zeichnen, statt alle Variationen als Grafiken zu erstellen und zu importieren.

Also danke Euch beiden erstmal. Dann schaue ich mal, ob ich mit der Anpassung zurechtkomme.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#5

AW: TCategoryPanelGroup modifizieren

  Alt 2. Apr 2011, 14:15
fällt mir auf, dass ...
Strg+Linksklick auf TCategoryPanelGroup innerhalb deines XE und du landest meistens in der richtgen Unit und von dort kann man sich gleich zum TCustomCategoryPanelGroup weiterklicken

Statt Strg+Linksklick kann man auch über's Kontextmenü "Deklaration suchen" des Codeeditors dort hin.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#6

AW: TCategoryPanelGroup modifizieren

  Alt 2. Apr 2011, 14:27
Strg+Linksklick auf TCategoryPanelGroup
Das geht imho aber nur, wenn der Pfad zu der pas in den Library-Angabenenthalten ist. Da bei mir der "[...]\RAD Studio\8.0\source\vcl" Pfad dort nicht drin war, hat das mit dem Klicken auch nicht funktioniert.

Ich komme allerdings gerade nicht weiter mit dem Überschreiben einer Funktion der Basiskomponente.
Ich habe jetzt folgendes:
Delphi-Quellcode:
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.
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.
Warum wird DrawHeaderChevron also nicht gefunden?
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#7

AW: TCategoryPanelGroup modifizieren

  Alt 2. Apr 2011, 22:02
Würde mich sehr freuen, wenn mir jemand zeigt, wie das geht!
Habe es selbst leider nicht herausfinden können.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: TCategoryPanelGroup modifizieren

  Alt 2. Apr 2011, 22:50
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Keks

Registriert seit: 25. Mai 2005
122 Beiträge
 
#9

AW: TCategoryPanelGroup modifizieren

  Alt 2. Apr 2011, 23:47
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?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#10

AW: TCategoryPanelGroup modifizieren

  Alt 3. Apr 2011, 07:17
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:44 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