Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit nem OpenDialog ^^ (https://www.delphipraxis.net/8526-problem-mit-nem-opendialog-%5E%5E.html)

KochFolie 6. Sep 2003 23:28


Problem mit nem OpenDialog ^^
 
Hi,
ich möchte gerne per OpenDialog eine Datei öffnen und dann den dateinamen benutzen etwas verunstalten und in eine ähnlich heissende datei wieder reinschreiben und die dann speichern
aber egal, denn das klappt :)
nur wenn man im OD auf abbrechen klickt, speichert der in der zuletzt gespeicherten datei anstelle vom alten dateinamen gar nichts ab...
hm... http://dlz.kochfolie.de?file=4 bitte mal ausprobieren...
ich glaub das da oben versteht eh keiner *g*, kann net erklären naja

also noch ein versuch *g*
man klickt auf öffnen, dann kommt if opendialog.execute then und so weiter, mein programm macht nu den pfad weg, und ändert beim namen mit pfad die extension... dann speichert er die neue datei mit pfad und schreibt da sozusagen den alten dateinamen ohne pfad rein...
soweit ok, wenn man das nochmal und nochmal macht wirds immer wieder klappen, nur wenn man auf abbrechen drückt, speichert er in die alte datei einen leeren dateinamen...
ich glaub das versteht man besser :/
kann mir jemand helfen?

den code stell ich auch mal hier rein....

Code:
procedure TForm1.ffnen1Click(Sender: TObject);
var dateiname,dateiname2,dateiname3,dateinamemitpfad,dateinamemitpfad3:string;
    datei:textfile;
begin
try
if open.execute then dateiname:=extractfilename(Open.Filename);
assignfile(datei, ChangeFileExt(open.filename,'.cue'));
rewrite(datei);
write(datei, 'FILE "');
write(datei, dateiname);
writeln(datei, '" BINARY');
writeln(datei, ' TRACK 01 MODE1/2352');
write(datei,  '   INDEX 01 00:00:00');
flush(datei);
closefile(datei);
if deutsch1.checked
  then label3.caption:='Datei erfolgreich gespeichert als:'
  else label3.caption:='File successfully saved as';
dateiname2:=ChangeFileExt(Open.Filename,'.cue');
label4.caption:=dateiname2;
except
error:=true;
if deutsch1.checked
  then begin label3.caption:='Fehler aufgetreten... bitte sende eine e-mail mit einer beschreibung';
             label4.Caption:='von dem was du grad gemacht hast an [email]KochFolie@web.de[/email]';
       end
  else begin label3.caption:='Error accured... please send an e-mail with a little error report';
             label4.caption:='of your actions in it to [email]KochFolie@web.de[/email] (I know my english ;-)';
       end;
end;
if label3.width<label4.width
  then form1.Width:=label4.width+10
  else form1.Width:=label3.width+10;
form1.height:=130;
dateiname3:=dateiname;
dateinamemitpfad3:=dateinamemitpfad;
end;
ich hab (zu?)viele variablen is aber egal das säuber ich nachher noch...erstmal solls funktionieren

falls wer mein problem noch nich kapiert hat :( ich möchte entweder den abbrechen button im OpenDialog deaktivieren (nicht gut) oder ich möchte verhindern dass ein leerer wert in die alte datei geschrieben wird!

danke schonmal :roll:

Christian Seehase 7. Sep 2003 00:02

Re: Problem mit nem OpenDialog ^^
 
Moin KochFolie,

erst einmal herzlich Willkommen hier in der Delphi-PRAXiS.

Zitat:

Zitat von KochFolie
nur wenn man im OD auf abbrechen klickt, speichert der in der zuletzt gespeicherten datei anstelle vom alten dateinamen gar nichts ab...

Da hast Du sogar Glück gehabt.
Dateiname ist eine lokale Variable, deren Wert zu Beginn der Prozedur unbestimmt ist, und nur gesetzt wird, wenn Du beim OpenDialog nicht auf Abbrechen klickst.

Ich sehe da zwei Möglichkeiten:
  1. Soll die Prozedur auch ausgeführt werden, wenn auf "Abbrechen" geklickt wird, muss Dateiname als globale Variable, oder als Feld von TForm1 (oder einem anderen Objekt) deklariert werden. Vielleicht noch besser wäre es
  2. bei Abbruch die Prozedure gar nicht erst auszuführen. Die Execute Methode prüfst Du ja sowieso auf Abbruch oder nicht ab. Ansonsten müsste sichergestellt werden, dass beim ersten Aufruf der Prozedur nicht abgebrochen werden kann, oder dass Dateiname initialisiert ist.

KochFolie 7. Sep 2003 00:16

Re: Problem mit nem OpenDialog ^^
 
hehe irgendwie hab ichs hingekriegt :)
hab das try rausgenommen und alles mit if eingeklammert irgendwie läufts jetzt danke :)
Zitat:

bei Abbruch die Prozedure gar nicht erst auszuführen. Die Execute Methode prüfst Du ja sowieso auf Abbruch oder nicht ab. Ansonsten müsste sichergestellt werden, dass beim ersten Aufruf der Prozedur nicht abgebrochen werden kann, oder dass Dateiname initialisiert ist.
dafür :P

oh und danke an marco unter mir, dadurch ist es noch kürzer geworden... da hatte ich das begin echt vergessen ich nuss :S danke

Code:
procedure TForm1.ffnen1Click(Sender: TObject);
var dateiname,dateiname2,dateiname3,dateinamemitpfad,dateinamemitpfad3:string;
    datei:textfile;
begin
if open.execute then begin
dateiname:=extractfilename(Open.Filename);
assignfile(datei, ChangeFileExt(open.filename,'.cue'));
rewrite(datei);
write(datei, 'FILE "');
write(datei, dateiname);
writeln(datei, '" BINARY');
writeln(datei, ' TRACK 01 MODE1/2352');
write(datei,  '   INDEX 01 00:00:00');
flush(datei);
closefile(datei);
if deutsch1.checked
  then label3.caption:='Datei erfolgreich gespeichert als:'
  else label3.caption:='File successfully saved as';
dateiname2:=ChangeFileExt(Open.Filename,'.cue');
label4.caption:=dateiname2;
if label3.width<label4.width
  then form1.Width:=label4.width+10
  else form1.Width:=label3.width+10;
form1.height:=130;
dateiname3:=dateiname;
dateinamemitpfad3:=dateinamemitpfad;
end;
end;

Marco Haffner 7. Sep 2003 00:17

Re: Problem mit nem OpenDialog ^^
 
Zitat:

Zitat von KochFolie
Delphi-Quellcode:
if open.execute then dateiname:=extractfilename(Open.Filename);
assignfile(datei, ChangeFileExt(open.filename,'.cue'));

Mit if open.execute then überprüftst Du, ob im OpenDialog auf Öffnen geklickt wurde und nur das geschehen ist, wird Dateiname zugewiesen. Die nächste Zeile assignfile wird aber immer ausgeführt, egal was im OpenDialog getan wurde.
Wenn Du hinter if open.execute then ein begin setzt (end; nicht vergessen) wird alles nur dann ausgeführt, wenn Du den Dialog mit Öffnen bestätigst.

Delphi-Quellcode:
begin
  if open.execute then
  begin
    dateiname:=extractfilename(Open.Filename);
    assignfile(datei, ChangeFileExt(open.filename,'.cue'));
    ...
  end;
end;

Christian Seehase 7. Sep 2003 00:20

Re: Problem mit nem OpenDialog ^^
 
Moin Kochfolie,

Delphi-Quellcode:
dateiname:='xyz123987zyx5321abgebrochenblubblub';
if open.execute then dateiname:=extractfilename(Open.Filename);
if dateiname<>'xyz123987zyx5321abgebrochenblubblub' then begin
und warum nicht, in Anlehnung an Marcos Vorschlag so:

Delphi-Quellcode:
if not open.execute then exit;
dateiname:=extractfilename(Open.Filename);

KochFolie 7. Sep 2003 00:25

Re: Problem mit nem OpenDialog ^^
 
jetzt hab ich mich noch verlesen *alles um-editier* ^^
danke für die hilfe ihr :) :D


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