Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Find(Compo oder Prozedur? (https://www.delphipraxis.net/173883-find-compo-oder-prozedur.html)

beanbear6 22. Mär 2013 08:20

Find(Compo oder Prozedur?
 
Hallo,
vielleicht etwas doofe Frage, aber ich bin immer wieder am überlegen, was ist in der Verarbeitung schneller - Beispiel: Ich hab z.B. 20 Buttons, deren Höhe ich verändern muss.

Ich könnete nur zum einen mit ner Procedure machen:

Proc Höhe bla bla bla
begin
But01.Height := 50;
But02.Height := 50;
usw.
end;

oder das Ganze mit for x = 1 to usw. dann mit
FindComponent...

Was ist in der Geschwindigkeit besser?
Danke für jeden Tip...
Beanbear6

Der schöne Günther 22. Mär 2013 08:25

AW: Find(Compo oder Prozedur?
 
Jedes Teil einzeln zu suchen ist mit Sicherheit langsamer. Aber warum speicherst du dir die nicht einmal in einer Liste ab und gehst dann die Liste durch?

DeddyH 22. Mär 2013 08:28

AW: Find(Compo oder Prozedur?
 
FindComponent kostet zumindest etwas Zeit, daher ist die andere Variante schneller. Du könntest Dir aber auch einmalig ein Array oder eine Liste (TComponentList z.B.) definieren, das/die zusammengehörigen Controls auf nimmt. Anschließend kannst Du dann in einer Schleife über dieses Array/ diese Liste iterieren.

[edit] 2 L8 :( [/edit]

beanbear6 22. Mär 2013 08:32

AW: Find(Compo oder Prozedur?
 
Hallo Ihr beiden...
Wie ich das mit ner Liste machen soll - ouou ich weiß nicht wie...
Mit Array hab ich schon mal versucht, aber ebenso gescheitert...
Bin noch nicht so fit in Delphi...
Vielleicht gibts ein kleines Beispiel?? Nur so als Ansatz?
Lernen und testen möcht ich dann schon selber :-)
Danke erstmal für die erste Info.
Gruß Reiner

Der schöne Günther 22. Mär 2013 08:41

AW: Find(Compo oder Prozedur?
 
Zitat:

Zitat von beanbear6 (Beitrag 1208372)
Bin noch nicht so fit in Delphi...

Super, ich auch nicht 8-)

Eine einfache Liste zum Dinge dranhängen, wieder rausnehmen und etwas mit allen Dingen darin anstellen ist die
Delphi-Quellcode:
TList
:
  • Delphi-Quellcode:
    System.Generics.Collections
    der
    Delphi-Quellcode:
    uses
    -Klausel hinzufügen
  • Variable vom Typ
    Delphi-Quellcode:
    TList<TButton>
    deklarieren, am besten als privates Feld deiner Form
  • z.B. bei
    Delphi-Quellcode:
    onFormCreate
    die Liste erstellen (
    Delphi-Quellcode:
    TList<TButton>.Create()
    ) und die Buttons dranhängen:
    Delphi-Quellcode:
    meineListe.Add(Button1); meineListe.Add(Button2); [...]
  • Willst du später etwas mit den Buttons, die du in die Liste gesteckt hast tun:
    Delphi-Quellcode:
    var
       button:TButton;
    begin
       for button in meineListe do
          button.Height := 50;

    end;

Bummi 22. Mär 2013 08:43

AW: Find(Compo oder Prozedur?
 
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FMyButtonList:TList;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 i:Integer;
begin
   for I := 0 to FMyButtonList.Count -1 do
    with TButton(FMyButtonList[i]) do
      begin
        Height := 50;
        Width := 100;
      end;

end;

procedure TForm1.FormCreate(Sender: TObject);
var
 i:Integer;
begin
      FMyButtonList:=TList.Create;
      for I := 0 to ControlCount - 1 do
          if Controls[i] is TButton then
            if TButton(Controls[i]).Tag=123 then //oder eine andere Art der Identifizierung
              FMyButtonList.add(Controls[i]);


end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
      FMyButtonList.Free;

end;

end.

DeddyH 22. Mär 2013 08:44

AW: Find(Compo oder Prozedur?
 
Delphi-Quellcode:
type
  TDeinForm = class(TForm)
    ...
  private
    FButtonArray: array[0..9] of TButton;
    ...
  end;

...

procedure TDeinForm.FormCreate(Sender: TObject);
begin
  FButtonArray[0] := btnIrgendwas;
  FButtonArray[1] := btnIrgendwasAnderes;
  ...
  FButtonArray[9] := btnLetzterButton;
end;

...

procedure TDeinForm.MachWas;
var
  i: integer;
begin
  for i := Low(FButtonArray) to High(FButtonArray) do
    FButtonArray[i].Left := 20;
end;

beanbear6 22. Mär 2013 10:48

AW: Find(Compo oder Prozedur?
 
Wow und uuups...
ey vieeelen Dank für Eure Mühe... Bin gleich mal
dran das zu lernen und üben und testen... Issja genial :-)
Vielen Dank!
Gruß Reiner


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:42 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