Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mehrere Buttons erstellen (https://www.delphipraxis.net/3692-mehrere-buttons-erstellen.html)

[TP]Hawk274 25. Mär 2003 20:47


mehrere Buttons erstellen
 
Ich möchte mehrere Buttons erstellen. Dabei will ich aber auf jeden Button einen Pointer haben. Des weiterem will ich alle Buttons als Array verwalten. Also möchte ich quasi ein Array Pointer. Doch dabei bin ich auf Probleme gestoßen.
Folgende Lösungsansatz habe ich bereits. Doch beim ersten Create eines Buttons kommt eine Schutzverletztung. Aber warum? In diesem Source ist auch noch nicht realisiert das ich auf alle Buttons einen Pointer habe. Oder ist die Variable pbTemp dann als Zeiger "an zu sehn"!?
Code:
  const
    MAX_BUTTONS = 500;

  var
    pbTemp: Array of TButton;
 
  .
  .
  .

  SetLength(pbTemp,MAX_BUTTONS);
  for i:=0 to MAX_BUTTONS-1 do
    pbTemp := nil;

  for i:=0 to MAX_BUTTONS do
  begin
    pbTemp[i] := TButton.Create(nil);
    pbTemp[i].Name := 'ButtonNr' + IntToStr(i);
    pbTemp[i].Parent := Form1;
    pbTemp[i].Top := 16 + 1;
    pbTemp[i].Left := 300;
  end;

Luckie 25. Mär 2003 20:56

Öhm.
Delphi-Quellcode:
pTemp := nil;
Nach
Delphi-Quellcode:
setlength(ptemp, MAXBUTTONS);
Macht das dein Array nicht wieder zu nichte?

Daniel 25. Mär 2003 20:58

Re: mehrere Buttons erstellen
 
Delphi-Quellcode:
  for i:=0 to MAX_BUTTONS-1 do
    pbTemp := nil;
Mit diesem Code setzt Du das Array als solches 500 mal auf NIL. Was Du beabsichtigt hast, was folgendes:

Delphi-Quellcode:
  for i:=0 to MAX_BUTTONS-1 do
    pbTemp[i] := nil;
Da Du danach aber so oder so gleich 500 Einträge in das Array schreibst, kannst Du Dir diese Initialisierung hier auch sparen und gleich die Buttons erzeugen:

Delphi-Quellcode:
  for i:=0 to MAX_BUTTONS-1 do
  begin
    pbTemp[i] := TButton.Create(nil);
    pbTemp[i].Name := 'ButtonNr' + IntToStr(i);
    pbTemp[i].Parent := Form1;
    pbTemp[i].Top := 16 + 1;
    pbTemp[i].Left := 300;
  end;
Die "-1" hinter der Konstanten nicht vergessen... :wink: Der Rest müsste aber klappen.

Luckie 25. Mär 2003 21:07

Noch ein Tipp: Überdenk mal diese Zeile
Delphi-Quellcode:
pbTemp[i].Top := 16 + 1;
Wenn das ein großes i ist dann liegen alle Buttons um ein Pixel verschoben aufeinander. Mach aus + mal ein *.

[TP]Hawk274 26. Mär 2003 22:33

Danke für eure Tipps.

Zitat:

Wenn das ein großes i ist dann liegen alle Buttons um ein Pixel verschoben aufeinander. Mach aus + mal ein *.
Das ist mir Wurst wo die Buttons liegen. Ich lösche diese sowieso wieder.

Zitat:

Mit diesem Code setzt Du das Array als solches 500 mal auf NIL
Stimmt erstens brauch mal das Array nicht intialisieren, wenn man es danach sowieso wieder bearbeitet. Aber wenn man alle Array's intialisieren will muss man dieses auch tun und nicht wie ich :wink:

Luckie 27. Mär 2003 05:50

Zitat:

Zitat von [TP
Hawk274]
Das ist mir Wurst wo die Buttons liegen. Ich lösche diese sowieso wieder.

Und wozu dann das ganze? :shock:

[TP]Hawk274 28. Mär 2003 17:01

Zitat:

Und wozu dann das ganze?
Ich wollte mal einen performenztest machen. Deshalb habe ich u.a. ein paar Buttons erstellen lassen.


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