Autor Beitrag
Grafix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: Sa 17.07.10 18:00 
Hey,

ich möchte mit einer FileOpenDialog-Komponente den User einen Dateipfad festlegen lassen. Nach dem Auswählen soll der Pfad in einer Edit gespeichert werden und anschließend nur in einer Textdatei gespeichert werden.

Wenn ich drei Pfade angeben lassen möchte, brauche ich dafür 3 dieser Komponenten? Oder kann ich einfach jeweils mit einem anderen Button diese Komponente ansprechen und entsprechend in eine andere EditKomponente einfügen?

Am ende der Form soll der User bestätigen und mittels diesem Button sollen die drei FODs mit Free gelöscht werden. Ist das so ok oder besser gleich nach der Dateiauswahl freen?

Lg

Grafix
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Sa 17.07.10 18:09 
Wenn du die File-Open-Komponente auf der Form hast, dann solltest du die gar nicht selber freigeben. Das passiert am Ende das Programmes automatisch.

Zu dem anderen: Nein, du brauchst nur eine Komponente. Jeweils nach dem Execute des Dialogs trägst du den Filename an der passenden Stelle ein.

_________________
We are, we were and will not be.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Sa 17.07.10 19:00 
user profile iconGrafix hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich drei Pfade angeben lassen möchte, brauche ich dafür 3 dieser Komponenten? Oder kann ich einfach jeweils mit einem anderen Button diese Komponente ansprechen und entsprechend in eine andere EditKomponente einfügen?

Nein, brauchst du nicht. Wie Gausi sagte. Evtl wäre es sinnvoll, dass man alle Dateien auf einmal anwählen kann, da gibts ne MultiSelect(?) Option des OpenDialogs für.

user profile iconGrafix hat folgendes geschrieben Zum zitierten Posting springen:
Am ende der Form soll der User bestätigen und mittels diesem Button sollen die drei FODs mit Free gelöscht werden. Ist das so ok oder besser gleich nach der Dateiauswahl freen?

Das kommt auf deine Implementierung an. Wenn du sie dynamisch erstellst, dann musst du sie löschen. Wenn du sie jedes mal beim Dialog öffnen createst, dann musst du es nach jedem Aufruf löschen ;)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 17.07.10 22:30 
user profile iconXion hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du sie dynamisch erstellst, dann musst du sie löschen. Wenn du sie jedes mal beim Dialog öffnen createst, dann musst du es nach jedem Aufruf löschen ;)
Aber nur, wenn kein Owner angegeben wurde, also nil.

Denn wenn ein Owner angegeben ist, kümmert sich dieser schon selbst darum. Wenn man die Komponente dann selbst freigibt, kann das seltsame Effekte nach sich ziehen.
Grafix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 18.07.10 12:37 
Ich habe leider nur die Hälfte verstanden, von eurer Ausführlichen Erklärung :(

Was hat das mit dem Owner zu tun?

Zur dynamischen Programmierung: Ich habe es denke ich nicht dynamisch programmiert, es können maximal drei Pfade ausgewählt werden, mittels drei Buttons. Ich möchte es jedoch nicht mit Mehrfachauswahl machen.

Habe hier einfach mal meinen Code gepastet, dreimal das selbe und recht simple, wieso gibt er mir da eine Zugriffsverletzung sobald ich einen Button zur Auswahl drücke??

Ist es bei diesem Code nötig am ende FileOpenDialog.Free auszuführen?


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
implementation

{$R *.dfm}

procedure TFInstall.BSkin_SearchClick(Sender: TObject);
begin
  if FileOpenDialog.Execute then
    ESkin.Text := FileOpenDialog.FileName
  else
    ESkin.Text := '';
end;

procedure TFInstall.BSP_SearchClick(Sender: TObject);
begin
  if FileOpenDialog.Execute then
    ESP.Text := FileOpenDialog.FileName
  else
    ESP.Text := '';
end;

procedure TFInstall.BWOM_SearchClick(Sender: TObject);
begin
  if FileOpenDialog.Execute then
  begin
    EWOM.Text := FileOpenDialog.FileName;
  end
  else
    EWOM.Text := '';
end;

procedure TFInstall.FormCreate(Sender: TObject);
begin
  // OpenFileDialogs schließen
  FileOpenDialog.Free;
end;
end.


danke für eure Hilfe
Andreas L.
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1703
Erhaltene Danke: 25

Windows Vista / Windows 10
Delphi 2009 Pro (JVCL, DragDrop, rmKlever, ICS, EmbeddedWB, DEC, Indy)
BeitragVerfasst: So 18.07.10 16:18 
Im OnCreate-Ereignis gibst du den Dialog frei, welchen Sinn macht das? ;-)

Entferne

ausblenden Delphi-Quelltext
1:
FileOpenDialog.Free;					


und alles sollte klappen.

EDIT: Du brauchst den Code für die Buttons auch nicht 3 mal schreiben. Definiere folgende Methoden und stell diese dann im Objekt-Inspektor der Buttons ein
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TFInstall.SelectFileClick(Sender: TObject);
var
  btn: TButton;
begin
  //überprüfen ob der übergebene Sender ein Button ist.
  //Wenn deine Buttons nicht vom Typ TButton sind (z. B. TSpeedButton) 
  //musst du das natürlich ändern.
  if Sender is TButton then 
  begin
    //Dialog aufrufen
    if FileOpenDialog.Execute then
    begin
      //Button aus Sender holen oder besser gesagt in die Variable casten
      btn := TButton(Sender);
      if btn = BSkin_Search then
        ESkin.Text := FileOpenDialog.FileName
      else if btn = BSp_Search then
        ESP.Text := FileOpenDialog.FileName
      else if btn = BWOM_Search then
        EWOM.Text := FileOpenDialog.FileName;
    end;
  end;
end;
Grafix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 122

Windows 7 Professional
Delphi 2009, PHP, Prolog, Python, Java
BeitragVerfasst: So 18.07.10 22:51 
Vielen Dank, Problem gelöst =)