![]() |
Button + Edit Feld - zur Laufzeit entfernen?
Hallo,
Ich bastle gerade an einem kleinem Programm, welches simple Wav-Dateien abspielen soll. Das ist ja soweit auch kein Problem...über das Edit Feld gebe ich den Pfad ein und drücke auf Play! Funktioniert! Nun möchte ich aber gerne mehrere Sounds abspielen können. Also brauche ich mehrere Edit-Felder und Abspielbuttons. Nun möchte ich die gern dynamisch über eine Button (+,-) hinzufügen/entfernen. ![]() ![]() Wie mache ich das? Objekte während der Laufzeit hinzufügen? Das Edit-Feld in meinem Programm heißt "Edit1" der Button "BitBtn1"...diese müssten doch dann beim hinzufügen (also klick aufs +) hochgezählt werden? Also Edit2, Edit3 usw... Oder gibt es eine viele bequemere und einfacher Lösung als meine Idee? MfG |
Re: Button + Edit Feld - zur Laufzeit hinzufügen?
Pack doch eine ListBox drunter und fülle sie aus dem Edit ;)
|
Re: Button + Edit Feld - zur Laufzeit hinzufügen?
Ja hab ich auch schon gedacht...aber ich wollte gerne eine Lösung mit Buttons (o.ä.)...damit man schnell einen Sound abspielen kann.
Wenn man erst einen Sound in einer ListBox suchen müsste, würde es schon zulang dauern :wink: |
Re: Button + Edit Feld - zur Laufzeit hinzufügen?
Delphi-Quellcode:
Inc(Index);
with TEdit.Create( self) do begin Parent := Self; Name := 'Edit'+IntToStr( index); Left := ... ... end; with TButton.Create( self) do begin Parent := Self; Name := 'Edit'+IntToStr( index); Caption := ... Left := ... ... end; |
Re: Button + Edit Feld - zur Laufzeit hinzufügen?
Und hinterher schön wieder freigeben ;)
P.S.: Ob ich jetzt den entsprechenden Abspiel-Button suchen muss oder den Dateinamen in einer ListBox, ist IMHO Jacke wie Hose :mrgreen: |
Re: Button + Edit Feld - zur Laufzeit hinzufügen?
Freigeben muss man Komponenten nicht, wenn man einen Owner hat.
|
Re: Button + Edit Feld - zur Laufzeit hinzufügen?
Wer das "Nippelboard" von TV-Total kennt, weiß was ich bezwecken möchte... :zwinker:
|
Re: Button + Edit Feld - zur Laufzeit hinzufügen?
Zitat:
|
Re: Button + Edit Feld - zur Laufzeit hinzufügen?
So richtig funktioniert es noch nicht...
Delphi-Quellcode:
Undzwar erzeugt es ja das Edit-Feld und nennt es Edit+i (=Edit1). Dann erzeugt es den Button und nennt ihn auch Edit+i (=Edit1) -> dadurch bekomme ich eine Exception, da das Objekt schon vorhanden ist...
//+
procedure TForm1.Button1Click(Sender: TObject); var i: integer; begin inc(i); with TEdit.Create(self) do begin Parent:= Self; Name:= 'Edit'+IntToStr(i); Left:= 8; Top:= 32; Width:= 233; end; with TBitBtn.Create(self) do begin Parent:= Self; Name:= 'Edit'+IntToStr(i); Caption:= 'Play'; Left:= 244; Top:= 32; Width:= 22; Height:= 22; end; end; Benenne ich einen Namen um...also z.b. Editblabla...kann ich zwar einmal beide Objekte erzeugen, doch beim 2. mal wieder der Fehler wie oben. Editblabla1 ist schon vorhanden... Mh... |
Re: Button + Edit Feld - zur Laufzeit hinzufügen?
weil du dem edit den selben namen wie dem bitbtn gibst.
richtig:
Delphi-Quellcode:
für das edit
Name:= 'Edit'+IntToStr(i);
Delphi-Quellcode:
für den button
Name:= 'BitBtn'+IntToStr(i);
bei dir ist das bei beiden gleich ==> beide haben den selben namen ==> exception |
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!
![]() ![]() |
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.
|
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:
Ist das so i.o.? Oder sollte ich das besser anders machen?
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; Wie kann ich mit den "-" Button die jeweils letzten beiden Objekte löschen? |
Re: Button + Edit Feld - zur Laufzeit hinzufügen?
Zitat:
Delphi-Quellcode:
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.
var
Edt: TEdit; begin Edt:= TEdit(self.FindComponent('Edit'+IntToStr(i))); if System.Assigned(Edt) then begin dec(i); Edt.Free; end; |
Re: Button + Edit Feld - zur Laufzeit entfernen?
Aber leider kann ich so den Button nicht löschen...
Delphi-Quellcode:
EDIT: Geht doch :wall: hatte Edt.Free geschrieben... Gut Danke für den Tipp...
Bt:= TBitBtn(self.FindComponent('BitBtn'+IntToStr(i)));
if System.Assigned(Bt) then begin dec(i); Bt.Free; end; 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:
So spielt es aber immer den Sound aus dem 1.Edit Feld ab...ist ja klar
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;
Delphi-Quellcode:
Also müsste ich schon beim erzeugen des Buttons
procedure TForm1.ButtonClick(Sender: TObject);
begin sndPlaySound(PChar(Edit.Text),SND_ASYNC); end;
Delphi-Quellcode:
mit einen OnClick Ereignis zuordnen?
sndPlaySound(PChar(Edit + i.Text),SND_ASYNC);
Wie mache ich das? OnClick:= ? |
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:
Dann auslesen:
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;
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 09:11 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