Einzelnen Beitrag anzeigen

R2009

Registriert seit: 9. Mär 2009
Ort: Heidelberg
440 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Schalter Programm, Hilfe gesucht!

  Alt 2. Nov 2009, 07:14
Hi,
mir ist das jetzt klar. Die Buttons wurden lokal erzeugt und dann in der Objectlist abgelegt. Mir geht immer noch der Sinn des Ganzen ab. Wäre es nicht genau das Gleiche gewesen wenn ich das Array global definiert hätte?
OK mit der Liste hast du eine dynamische Verwaltung deiner Buttons und kannst eventuell noch andere Objects verwalten.
Habe mal ein kurzes Beispiel geproggt um zu zeigen wie man soetwas nutzen kann.
Mit Button1 werden die Buttons erstellt. Mit Button2 wird jeweils einer davon gelöscht.
Übrigens: mit DeineObjektListe.OwnsObjects:=true; veranlasst man, dass die Liste die angehängten Objekte selbst verwaltet. Es genügt also ein Element aus der Liste zu löschen, dann ist es auch freigegeben. xxx.free ist dann völlig überflüssig.

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
    DeineObjektListe:tobjectlist;
    procedure ButtonClick(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.ButtonClick(Sender: TObject);
begin
if Sender is TButton then
  begin
    if TButton(Sender).Tag = 0 then
    begin
      TButton(Sender).Tag := 1;
      TButton(Sender).Caption := 'An';
    end
    else
    begin
      TButton(Sender).Tag := 0;
      TButton(Sender).Caption := 'Aus';
    end;
    label1.caption:=inttostr(TButton(Sender).top)+'/'+inttostr(TButton(Sender).left);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  NewButton:array[1..10,1..10] of TButton;n,m:integer;
begin
For n:=1 to 10 do
  For m:=1 to 10 do
    begin
      NewButton[n,m] := TButton.Create(Self);
      NewButton[n,m].Parent := Form1;
      NewButton[n,m].Caption := 'Aus';
      NewButton[n,m].top:=n*NewButton[n,m].height;
      NewButton[n,m].left:=m*NewButton[n,m].width;
      NewButton[n,m].OnClick := ButtonClick;
      DeineObjektListe.Add(NewButton[n,m]);
    end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DeineObjektListe:=TObjectList.create;
  DeineObjektListe.OwnsObjects:=true;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var n:integer;
begin
// For n:=DeineObjektListe.Count-1 do DeineOjektliste.items[n].free;---> durch DeineObjektListe.OwnsObjects:=true überflüssig
  DeineObjektListe.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  DeineObjektListe.Remove(DeineObjektListe.items[22]);
end;

end.
Grüsse
Rainer
Angehängte Dateien
Dateityp: zip objectlist_175.zip (300,3 KB, 2x aufgerufen)
Rainer Unger
Mein Profil:
Studium Allgemeine Elektrotechnik TH Darmstadt
Entwicklung von Tools für die Rundsteuer und Zählertechnik.
uP's Atmel Prozessoren (ATmega16,32,88...) in C und Assembler.
  Mit Zitat antworten Zitat