AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls SplitterPanel: Brauche Hilfe für dynamische SubPanels
Thema durchsuchen
Ansicht
Themen-Optionen

SplitterPanel: Brauche Hilfe für dynamische SubPanels

Offene Frage von "Miguel79"
Ein Thema von Miguel79 · begonnen am 2. Nov 2008 · letzter Beitrag vom 3. Nov 2008
Antwort Antwort
Miguel79

Registriert seit: 2. Nov 2008
2 Beiträge
 
#1

SplitterPanel: Brauche Hilfe für dynamische SubPanels

  Alt 2. Nov 2008, 14:30
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.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

Re: SplitterPanel: Brauche Hilfe für dynamische SubPanels

  Alt 2. Nov 2008, 23:44
Zitat von Miguel79:
Woran es liegt, kann ich mir auch vorstellen -> SubPanels müssen beim entfernen korrekt aus der ComponentenListe gelöscht werden. Nur WIE???
Wenn eine Komponente freigegeben wird, werden alle anderen Komponenten davon benachrichtigt.
Die Methode dazu heisst Notification und muss von deiner Klasse überschrieben werden.
Delphi-Quellcode:
procedure TSplitterPanel.Notification(AComponent: TComponent; Operation: TOperation);
begin
  if (Operation=opRemove) and (AComponent=_SubPanel) then
  begin
    _SubPanel := nil;
  end;
end;
Du redest von mehreren SubPanels, hast aber nur eine Variable (_SubPanel) dafür.
Das könnte ein Problem sein.

Hier: http://www.torry.net/pages.php?s=79 kannst du Sourcecode für diverse Panels runterladen.
Ein gute Möglichkeit um Ideen zu holen und dazuzulernen.
  Mit Zitat antworten Zitat
Miguel79

Registriert seit: 2. Nov 2008
2 Beiträge
 
#3

Re: SplitterPanel: Brauche Hilfe für dynamische SubPanels

  Alt 3. Nov 2008, 19:20
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
  Mit Zitat antworten Zitat
Antwort Antwort


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 00: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