TOpenDialog-Problem :(
-
Hallo, ich hab' ein OpenDialog Problem und zwar folgendes:
Wenn ich abbrechen drücke erscheint eine Exception wegen dem delete am schluss aber warum?
Ich hab keine Methode gefunden die Aufgerufen wird, wenn Cancel gedrückt wird...denn z.B. meine Messagebox erscheint auch wenn abbrechen gedrückt wird...AnsiString filename; TIniFile *OpenFile; try { if (OpenDialog1->Execute()) { filename = OpenDialog1->FileName; } if(!AnsiString(OpenDialog1->FileName).Pos(".bum")) // Nach .bum Im FileName suchen Application->MessageBox("Es dürfen nur BuMaSo-Files (*.bum) geöffnet werden!","Fehler", 16); // Wenn im FileName kein .bum zu finden ist, Fehler ausgeben else { OpenFile = new TIniFile(OpenDialog1->FileName); Achsart_CB->Text=OpenFile->ReadString("Value", "Achsart_CB",0); Edit4->Text=OpenFile->ReadString("Value", "Edit 4",0); Edit3->Text=OpenFile->ReadString("Value", "Edit 3",0); Einheit_CB->Text=OpenFile->ReadString("Value", "Einheit_CB",0); Gesch_CB->Text=OpenFile->ReadString("Value", "Gesch_CB",0); anfangEnd_ED->Text=OpenFile->ReadString("Value", "anfangEnd",0); EndeEnd_ED->Text=OpenFile->ReadString("Value", "EndeEnd",0); Edit7->Text=OpenFile->ReadString("Value", "Edit 7",0); Edit8->Text=OpenFile->ReadString("Value", "Edit 8",0); P_pos_ED->Text=OpenFile->ReadString("Value", "P_pos",0); I_pos_ED->Text=OpenFile->ReadString("Value", "I_pos",0); P_gesch_ED->Text=OpenFile->ReadString("Value", "P_gesch",0); I_gesch_ED->Text=OpenFile->ReadString("Value", "I_gesch",0); Strom_ED->Text=OpenFile->ReadString("Value", "Strom_ED",0); Sollpos2_ED->Text=OpenFile->ReadString("Value", "Sollpos2_ED",0); Edit13->Text=OpenFile->ReadString("Value", "Edit 13",0); Edit14->Text=OpenFile->ReadString("Value", "Edit 14",0); SlaveID_ED->Text=OpenFile->ReadString("Value", "SlaveID_ED",0); Edit18->Text=OpenFile->ReadString("Value", "Edit 18",0); Edit19->Text=OpenFile->ReadString("Value", "Edit 19",0); Edit23->Text=OpenFile->ReadString("Value", "Edit 23",0); STW_CB->Text=OpenFile->ReadString("Value", "STW_CB",0); ziel_ED->Text=OpenFile->ReadString("Value", "Ziel_ED",0); anfang_ED->Text=OpenFile->ReadString("Value", "Anfang",0); ziel_ED->Text=OpenFile->ReadString("Value", "Ende",0); P_pos_ED->Text=OpenFile->ReadString("Value", "P pos",0); I_pos_ED->Text=OpenFile->ReadString("Value", "I pos",0); P_gesch_ED->Text=OpenFile->ReadString("Value", "P gesch",0); I_gesch_ED->Text=OpenFile->ReadString("Value", "I gesch",0); // Zuweisung damit die Regler Felder nur einmal abgespeichert werden müssen Regler_Frm->P_pos_ED->Text=P_pos_ED->Text; Regler_Frm->P_pos_ED->Text=I_pos_ED->Text; Regler_Frm->P_pos_ED->Text=P_gesch_ED->Text; Regler_Frm->P_pos_ED->Text=I_gesch_ED->Text; } } catch (...) { } delete OpenFile;OpenFile=NULL;
-
Vielleicht könntest Du mal abprüfen, ob OpenFile überhaupt erzeugt wurde, sonst
knallt's beim Löschen.roN schrieb:
AnsiString filename; TIniFile *OpenFile = NULL; try { if (OpenDialog1->Execute()) { filename = OpenDialog1->FileName; } if(!AnsiString(OpenDialog1->FileName).Pos(".bum")) // Nach .bum Im FileName suchen Application->MessageBox("Es dürfen nur BuMaSo-Files (*.bum) geöffnet werden!","Fehler", 16); // Wenn im FileName kein .bum zu finden ist, Fehler ausgeben else { OpenFile = new TIniFile(OpenDialog1->FileName); // jede Menge uninteressanter Code... } } catch (...) { } if (OpenFile) { delete OpenFile; OpenFile=NULL; }
Gruß,
Alexander
-
Okay, hab' ich gemacht aber meine MessageBox kommt trozdem noch...
-
Versuch doch mal das:
// ... if (OpenDialog1->Execute()) { filename = OpenDialog1->FileName; } if(filename.Pos(".bum") == 0) // Nach .bum Im FileName suchen Application->MessageBox("Es dürfen nur BuMaSo-Files (*.bum) geöffnet werden!","Fehler", 16); // Wenn im FileName kein .bum zu finden ist, Fehler ausgeben else { // ...
basedow
-
AnsiString filename; TIniFile *OpenFile; try { if (OpenDialog1->Execute()) { filename = OpenDialog1->FileName; if(!AnsiString(filename).Pos(".bum")) Application->MessageBox("Es dürfen nur BuMaSo-Files (*.bum) geöffnet werden!","Fehler", 16); else { OpenFile = new TIniFile(filename); Achsart_CB->Text=OpenFile->ReadString("Value", "Achsart_CB",0); //... delete OpenFile; OpenFile=NULL; } } } catch (...) { }
-
Wie wär's denn, wenn Du im FileOpen-Dialog einen Filter setzt?
Dann sparst Du Dir die Abfrage mit AnsiString(filename).Pos(".bum").
Also:OpenDialog1->Filter = "Bums-Dateien (*.bum)|*.bum";
Oder im Objektinspektor setzen.
Gruß,
Alexander
-
Hätte da mal eine (dumme) Frage:
if(!AnsiString(filename).Pos(".bum")) ...
Könnte man so nicht auch Dateien wie z.B. test.bumaso.txt öffnen?
if(ExtractFileExt(filename)!=".bum")...
Hier ginge das nicht.
Bitte nicht hauen
-
fubar schrieb:
if(!AnsiString(filename).Pos(".bum")) ...
Könnte man so nicht auch Dateien wie z.B. test.bumaso.txt öffnen?
Das kommt noch erschwerend hinzu.
fubar schrieb:
Bitte nicht hauen
Wie fügt man hier eigentlich virtuelle Schläge ein?
Gruß,
Alexander
-
@fubar: Die Bemerkung ist sogar sehr gut (o:
@ron: Wie die andern schon gesagt haben: Deleten kannst du natürlich bloss, was auch erstellt wurde. Da du aber OpenFile nicht erstellst, wenn du cancel drückst...
Ein Reines Ablaufproblem wie du siehst. Vielleicht mal das Struktogramm mit EasyCase anschauen (o; (insider)-junix
-
Alexander Kempf schrieb:
Wie fügt man hier eigentlich virtuelle Schläge ein?
das ist ein spezieller Mod für phpBB, der aber nur Moderatoren vorbehalten ist (o;
-junix