![]() |
SplitterPanel: Brauche Hilfe für dynamische SubPanels
Hallo,
ich habe erst kürzlich begonnen, mich mit Delphi auseinanderzusetzen und stoße leider ein wenig an meine Grenzen. Das Ziel ist es, ein Splitterpanel als Komponente zu erzeugen, welches von TPanel abgeleitet wird. Soweit so gut. Das dynamische hinzufügen funktioniert auch problemlos, wenn man allerdings im Designer ein SubPanel entfernt, dann gibt es einen Fehler. Woran es liegt, kann ich mir auch vorstellen -> SubPanels müssen beim entfernen korrekt aus der ComponentenListe gelöscht werden. Nur WIE??? Es gibt ja bereits viele SplitterPanel auch FreeWare mit Source, aber ich möchte nicht der Verwendung wegen diese Komponente erstellen, sondern weil ich es einfach verstehen möchte, wie es funktioniert. Eine um bereits funktionierende Routinen verkürzte Version des Quelltextes habe ich beigefügt. Vielleicht hat ja jemand eine Idee und könnte es mir erklärem, wie ich die SubPanels wieder entfernen und den Speicher freigeben kann. Vielen Dank schonmal im Voraus, Miguel
Delphi-Quellcode:
unit SplitterPanel;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, ComCtrls; type TSplitterPanel = class(TPanel) private _SubPanelQuantity : Integer; _SubPanel : TPanel; function GetSubPanelQuantity : Integer; procedure SetSubPanelQuantity(_Value: Integer); protected public constructor Create(_aOwner: TComponent); override; destructor Destroy; override; published property SubPanelQuantity : Integer Read GetSubPanelQuantity Write SetSubPanelQuantity; property SubPanel : TPanel Read _SubPanel; end; procedure Register; implementation procedure Register; begin RegisterComponents('TestComponents', [TSplitterPanel]); end; constructor TSplitterPanel.Create; begin inherited Create(_aOwner); _SubPanelQuantity := 1; end; destructor TSplitterPanel.Destroy; begin inherited Destroy; end; function TSplitterPanel.GetSubPanelQuantity: Integer; begin result := _SubPanelQuantity; end; procedure TSplitterPanel.SetSubPanelQuantity(_Value: Integer); var i : Integer; begin If _Value <> _SubPanelQuantity Then Begin If _Value > _SubPanelQuantity Then Begin With _SubPanel Do Begin Name := 'SubPanel' + IntToStr(Self.ComponentCount-1); End; _SubPanel := TPanel.Create(Self.Parent); _SubPanel.Parent := Self; _SubPanel.Name := 'SubPanel' + IntToStr(Self.ComponentCount); End Else Begin End; _SubPanelQuantity := _Value; End; End; end. |
Re: SplitterPanel: Brauche Hilfe für dynamische SubPanels
Zitat:
Die Methode dazu heisst Notification und muss von deiner Klasse überschrieben werden.
Delphi-Quellcode:
Du redest von mehreren SubPanels, hast aber nur eine Variable (_SubPanel) dafür.
procedure TSplitterPanel.Notification(AComponent: TComponent; Operation: TOperation);
begin if (Operation=opRemove) and (AComponent=_SubPanel) then begin _SubPanel := nil; end; end; Das könnte ein Problem sein. Hier: ![]() Ein gute Möglichkeit um Ideen zu holen und dazuzulernen. |
Re: SplitterPanel: Brauche Hilfe für dynamische SubPanels
Hey das nenne ich doch mal INFORMATION !!!
Vielen Dank schonmal. In einem Delphi-Buch habe ich zwar bereits von der Methode gelesen, sie allerdings noch nicht weiter beachtet. Was die einfache Deklaration von _SubPanels angeht verwalte ich sie in _SubPanelList abgeleitet von TList. Das funktioniert auch soweit ganz gut. Der Link war übrigens auch ganz nett. Auch wenn ich selbst oft sage, dass man nicht immer das Rad neu erfinden muss, so halte ich das für eine sehr gute Lernmethode. Selbst komme ich eigentlich aus dem .NET Bereich und programmiere eher mit C# oder auch VB. Mir ist halt seitens Pascal-Syntax nur "TurboPascal 7" aus Schulzeiten bekannt, und die Syntax von Delphi allein wegen der OOP nicht ganz geläufig. Ist aber doch irgendwie alles sehr ähnlich. Programmieren ist halt Programmieren ;-) Also vielen Dank nochmal. Miguel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:45 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