Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Button + Edit Feld - zur Laufzeit entfernen? (https://www.delphipraxis.net/105249-button-edit-feld-zur-laufzeit-entfernen.html)

atgis 18. Dez 2007 22:55

Re: Button + Edit Feld - zur Laufzeit hinzufügen?
 
Ja ich weiß...habe es umbenannt...jetzt kann ich auch 1mal meine neuen Objekte hinzufügen. Klicke ich aber nochmal auf das + will es wieder ein Edit1 erstellen, was ja schon vorhanden ist!

http://s2.directupload.net/images/071218/7kfu73cj.jpg

bitsetter 18. Dez 2007 23:14

Re: Button + Edit Feld - zur Laufzeit hinzufügen?
 
Das ist ja auch kein Wunder, da i bei dir eine lokale Variable ist. Dann schon eher die Variable im private Abschnitt deklarieren.

atgis 19. Dez 2007 13:30

Re: Button + Edit Feld - zur Laufzeit hinzufügen?
 
Ok Danke... ich hab noch eine Frage wegen der Ausrichtung der neuen Objekte...

Left und Top müssen ja sozusagen auch immer wieder mit hochgezählt werden. Ich hab das jetzt erstmal so gemacht:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

begin

inc(i);

with TEdit.Create(self) do
 begin
   Parent:= Self;
   Name:= 'Edit'+IntToStr(i);
   Left:= 8;
   Top:= 7+(i)*(25);     //i würde ja nur 1 Pixel Abstand ergeben...deswegen mal 25 für 25px...
   Width:= 233;
 end;
with TBitBtn.Create(self) do
 begin
   Parent:= Self;
   Name:= 'BitButn'+IntToStr(i);
   Caption:= 'Play';
   Left:= 244;
   Top:= 7+(i)*(25);    //...deswegen mal 25 für 25px
   Width:= 22;
   Height:= 22;
 end;
end;
Ist das so i.o.? Oder sollte ich das besser anders machen?


Wie kann ich mit den "-" Button die jeweils letzten beiden Objekte löschen?

bitsetter 19. Dez 2007 16:44

Re: Button + Edit Feld - zur Laufzeit hinzufügen?
 
Zitat:

Zitat von atgis
Wie kann ich mit den "-" Button die jeweils letzten beiden Objekte löschen?

Die einfache aber unschöne Variante wäre mit FindComponent
Delphi-Quellcode:
var
  Edt: TEdit;
begin
  Edt:= TEdit(self.FindComponent('Edit'+IntToStr(i)));
  if System.Assigned(Edt) then
  begin
    dec(i);
    Edt.Free;
  end;
besser wäre jedoch wenn du deine dynamisch erzeugten Komponenten in einer TComponentList oder zumindest in einem Array verwaltest, als sie jedesmal erst zu suchen.

atgis 19. Dez 2007 19:54

Re: Button + Edit Feld - zur Laufzeit entfernen?
 
Aber leider kann ich so den Button nicht löschen...
Delphi-Quellcode:
  Bt:= TBitBtn(self.FindComponent('BitBtn'+IntToStr(i)));
  if System.Assigned(Bt) then
  begin
    dec(i);
    Bt.Free;
  end;
EDIT: Geht doch :wall: hatte Edt.Free geschrieben... Gut Danke für den Tipp...

So...jetzt will ich ja per Klick auf den Button einen Sound abspielen...den jeweiligen Pfad zur Datei, bekomme ich aus dem Edit Feld... also Edit+IntToStr(i)...

Aufrufen will ich die Prozedure so:
Delphi-Quellcode:
with TBitBtn.Create(self) do
 begin
   Parent:= Self;
   Name:= 'BitBtn'+IntToStr(i);
   Caption:= '>';
   Left:= 243;
   Top:= 6+(i)*(25);
   Width:= 22;
   Height:= 22;
   OnClick:=ButtonClick; //<--- hier der Aufruf
 end;
end;
So spielt es aber immer den Sound aus dem 1.Edit Feld ab...ist ja klar
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
 sndPlaySound(PChar(Edit.Text),SND_ASYNC);
end;
Also müsste ich schon beim erzeugen des Buttons
Delphi-Quellcode:
sndPlaySound(PChar(Edit + i.Text),SND_ASYNC);
mit einen OnClick Ereignis zuordnen?

Wie mache ich das?

OnClick:= ?

bitsetter 19. Dez 2007 22:25

Re: Button + Edit Feld - zur Laufzeit entfernen?
 
Man könnte den Tag vom TBitBtn benutzen, dazu müsste man den vorigen Code noch etwas anpassen.
Delphi-Quellcode:
var
  Edt: TEdit;
begin
  inc(i);

  Edt:= TEdit.Create(self);
  with Edt do
  begin
     Parent:= Self;
     Name:= 'Edit'+IntToStr(i);
     Left:= 8;
     Top:= 6 + i * 25;
     Width:= 233;
  end;

  with TBitBtn.Create(self) do
  begin
     Parent:= Self;
     Name:= 'BitBtn'+IntToStr(i);
     Caption:= '>';
     Left:= 243;
     Top:= Edt.Top;
     Width:= 22;
     Height:= 22;
     Tag:= cardinal(Edt);//<--
     OnClick:=ButtonClick;
  end;
Dann auslesen:
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin
  if Sender is TBitBtn then
    Showmessage(TEdit(TBitBtn(Sender).Tag).Text);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:12 Uhr.
Seite 2 von 2     12   

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