Einzelnen Beitrag anzeigen

marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Evtl Bug in Delphi bzgl. Reihenfolge auf dem Formular

  Alt 4. Okt 2005, 06:41
Hallo padavan,

ich erinnere mich jetzt an deinen DreamPlayer. Wenn normalerweise die PlayList (ListBox) sichtbar ist und andere Ein- bzw. Ausgabeelemente am gleichen Ort angezeigt werden sollen, dann bleibe ich bei meinem Vorschlag: Du musst deine Komponenten nicht zur Entwurfszeit stapeln, du kannst ein Panel auch erst zur Laufzeit erzeugen und an der gewünschten Stelle einblenden:

Delphi-Quellcode:
unit DemoFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TDemoForm = class(TForm)
    ListBox: TListBox;
    InfoButton: TButton;
    procedure InfoButtonClick(Sender: TObject);
    procedure PanelClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FreeList: TList;
    procedure AppIdle(Sender: TObject; var done: boolean);
  end;

var
  DemoForm: TDemoForm;

implementation

{$R *.dfm}

procedure TDemoForm.AppIdle(Sender: TObject; var done: boolean);
begin
  // free objects one by one
  with FreeList do
  if Count > 0 then
    TObject(Extract(First)).Free;
end;

procedure TDemoForm.InfoButtonClick(Sender: TObject);
begin
  with TPanel.Create(self) do
  begin
    Parent := self; // make visible
    Left := ListBox.Left + 10;
    Top := ListBox.Top + 10;
    // ...
    OnClick := PanelClick;
  end;
end;

procedure TDemoForm.PanelClick(Sender: TObject);
begin
  with Sender as TPanel do
  if Caption = ''
    then Caption := DateTimeToStr(now)
    else FreeList.Add(Sender);
end;

procedure TDemoForm.FormCreate(Sender: TObject);
begin
  FreeList := TList.Create;
  Application.OnIdle := AppIdle;
end;

procedure TDemoForm.FormDestroy(Sender: TObject);
begin
  FreeList.Free;
end;

end.
Der Vorteil bei dieser Vorgehensweise ist, dass du ein Infopanel vor der PlayList schwebend anzeigen kannst - der Nachteil ist der erhöhte Programmieraufwand.

Hast du dir die Notebook-Komponente einmal angeschaut? Damit kannst du deine Komponenten alle schon zur Entwurfszeit gruppieren und anordnen und schaltest zur Laufzeit zwischen den Gruppen (Pages) um. Es wird allerdings immer das ganze Rechteck ausgewechselt, d.h. die Listbox auf Seite 1 des Notebooks verschwindet ganz, wenn ein InfoPanel auf Seite 2 angewählt wird.

Grüße vom marabu
  Mit Zitat antworten Zitat