Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi neue Komponente? (https://www.delphipraxis.net/2667-neue-komponente.html)

heiopei 31. Jan 2003 21:39


neue Komponente?
 
hallo,
wie kann ich zur laufzeit eines programmes z.b. ein neues label erzeugen?
(ich kann ja keine 100 labels bei der programmierung erzeugen und dann zur
laufzeit visible jeweils auf true stellen!!)
danke,
heiopei

Christian Seehase 1. Feb 2003 02:53

Moin heiopei,

zum Beispiel so:

Delphi-Quellcode:
procedure TfrmMAIN.Button1Click(Sender: TObject);
begin
  with TLabel.Create(self) do
  begin
    Parent := self;
    Caption := 'TEST';
  end;
end;
Wichtig:
Da der Aufruf innerhalb einer OnClick Routine des Hauptformulares (frmMAIN) erfolgt, ist self das Hauptformular.
Dadurch (Create(self)) wird das Formular Besitzer des Labels, so dass es automatisch freigegeben wird, wenn das Formular freigegeben wird.
Bei Create(nil) müsste man sich selber um die Freigabe kümmern.

Daniel B 1. Feb 2003 09:31

Re: neue Komponente?
 
Hallo heiopei,
Zitat:

Zitat von heiopei
ich kann ja keine 100 labels bei der programmierung erzeugen und dann zur

Warum nicht?
In der Komponenten-Palette oben, 10x Doppelklick auf LAbel. Dann alle 10 Labels auf dem Formular markieren, Strg+c und dann 10x Strg+v. Schon hast Du 100 Labels, jetzt nur noch Sortieren, also, alle 100 Markieren, rechtsklick und dann im nächsten Fenster nach Deinen Wünschen ausrichten. Ich behaupte das dies sogar schneller geht als eine for-Schleife zu schreiben, die Dir 100 zur Runtime erzeugt. :mrgreen:
Zitat:

laufzeit visible jeweils auf true stellen!!)
Musst Du ja nicht, sind automatisch schon auf Visible und Enabled.

Grüsse, Daniel :hi:

heiopei 1. Feb 2003 13:53

Moin,
Zitat:

Musst Du ja nicht, sind automatisch schon auf Visible und Enabled.
eigentlich meinte ich damit, dass die labels erst einzeln erscheinen sollen
und nicht schon anfangs sichtbar sind!

Zitat:

ich kann ja keine 100 labels bei der programmierung erzeugen und dann zur...
leider würde ich dann die übersicht völlig verlieren, da ich sowieso
schon sehr viele koponenten auf dem bildschirm habe!

welche funktion hat "parent"?

grüße heiopei

RomanK 1. Feb 2003 14:06

Hoi,
schau mal in der Hilfe nach dort steht das ganz gut beschrieben.
Wenn du mal wieder nicht weist was ein Begriff bedeutet dann schreiben ihn in die Unit, klicke ihn an und dann F1, dann kommt die Hilfe ...

heiopei 1. Feb 2003 14:08

dankeeeeeeee

nailor 1. Feb 2003 16:00

Davon abgesehen, dass ich glaube die Schleife schneller getippt hätte, wie die ganzen Label voneinander runtergeschoben, ist es mit der Schleife viel einfacher, weil man sie danach auch alle ordentlich ansprechen kann. Nicht so ein Kram mit FindComponent (die mMn unsinnigste Delphi-Funktion aller Zeiten!)

RomanK 1. Feb 2003 16:40

Zitat:

Zitat von Nailor
Davon abgesehen, dass ich glaube die Schleife schneller getippt hätte, wie die ganzen Label voneinander runtergeschoben, ist es mit der Schleife viel einfacher, weil man sie danach auch alle ordentlich ansprechen kann. Nicht so ein Kram mit FindComponent (die mMn unsinnigste Delphi-Funktion aller Zeiten!)

:wiejetzt: Du sagsch, mit ner Schleife geht es besser, findest aber FindComponent unsinnig ... sag mir mal bitte wie das mit einer Schleife, aber ohne FindComponent, gehen soll :shock:

Brüggendiek 1. Feb 2003 16:53

)Hallo!

Zitat:

Zitat von FuckRacism
Du sagsch, mit ner Schleife geht es besser, findest aber FindComponent unsinnig ... sag mir mal bitte wie das mit einer Schleife, aber ohne FindComponent, gehen soll

Wenn die Elemente zur Laufzeit erzeugt werden (mit einer Schleife), kann man doch das Ganze in ein Array packen und dann mit einer weiteren Schleife ohne FindComponent (was ist das - habe ich nie gebraucht :mrgreen:) darauf zugreifen.

Gruß

Dietmar Brüggendiek

Christian Seehase 1. Feb 2003 18:28

Moin Dietmar,

ein eigenes Array kann man natürlich auch erstellen.
Mit FindComponent wird nur das interne Array der Komponenten durchsucht.
Vom Grundprinzip her also kein Unterschied, obwohl das eigene Array natürlich schneller sein kann.

nailor 1. Feb 2003 19:17

...und man das eigene Array umbenennen kann. Wen du mit FindComponent arbeitest, wird das nachher ein sehr schöner Spass, die Variabelnamen zu ändern!

Haegar 1. Feb 2003 20:09

hi,
bin j auch noch ein bissel lernbedürftig, hab bisher auch wie brüggendiek das ganze mir array gemacht, aber wie funktioniert denn so eine "FindComponent" genau??
also vielleicht ein einfacher Beispiel-source mit erklärung, soweit das keine umstände macht!
danke schonmal

ciao haegar

Daniel B 1. Feb 2003 20:23

Du bist schon a bisserl Faul?! :twisted: :twisted:
1. Suche benutzen, dies wurde schon sehr oft besprochen.
2. Sagt die OH folgendes dazu:
Delphi-Quellcode:
Indicates whether a given component is owned by the component.

function FindComponent(const AName: string): TComponent;

Description

FindComponent returns the component in the Components property array with the name that matches the string in the AName parameter. Use FindComponent to determine whether a given component is owned by another.
Delphi-Quellcode:
The following example creates 20 edit boxes, using FindComponent with the edit box name to access each newly created edit box.

procedure TForm1.Button1Click(Sender: TObject);

var
  i: Integer;
const
  NamePrefix = 'MyEdit';
begin
  for i := 1 to 20 do begin
    TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
    with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
    begin
      Left := 10;
      Top := i * 20;
      Parent := self;
    end;
  end;
end;
Grüsse, Daniel :hi:

Haegar 1. Feb 2003 20:29

ja hast ja recht, sry, werd das nächste mal erst inne hilfe schauen ;)
trotzdem danke

Christian Seehase 1. Feb 2003 22:39

Moin Nailor,

Zitat:

...wird das nachher ein sehr schöner Spass, die Variabelnamen zu ändern!
könntest Du mir bitte mal auf die Sprünge helfen?
Das hab' ich nicht verstanden.

Daniel B 1. Feb 2003 22:47

Moin Christian,
Zitat:

Zitat von Christian Seehase
könntest Du mir bitte mal auf die Sprünge helfen?

Ich denke Er meint, das wenn man in einer Schleife, Komponenten erzeugt, dann haben die ja einen Index. Eins bis sowieso.
Wenn man nun die Namen ändert, so hat man natürlcih keine Chanche mehr mit FindComponent('Name' + IntToStr(i));

Ich denke das Er dies gemeint hat. So hab ich das verstanden.

Grüsse, Daniel :hi:


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