![]() |
OpenDialog nonvcl
Hab hier ein problem mit dem opendialog glaube von turboPASCAL: War ( ist ) der.
Einmal kann ich meinen Song einladen danach kracht es ... Hab den fehler noch nicht gefunden.
Delphi-Quellcode:
Aufruf..
function OpenFileDialog(hParent: THandle; Filter: String): string;
var ofn: TOpenFilename; FileNames: array[0..MAX_PATH - 1] of Char; FFilter: array[0..MAX_PATH - 1] of Char; i: integer; begin Result := ''; if Filter = '' then begin Filter := 'All files (*.*)|*.*'; end else begin ZeroMemory(@FFilter[0], sizeof(FFilter)); for i := 0 to length(Filter)-1 do if Filter[i+1] = '|' then FFilter[i] := #0 else FFilter[i] := Filter[i+1]; end; ZeroMemory(@FileNames[0], sizeof(FileNames)); ZeroMemory(@ofn, sizeof(TOpenFilename)); if IsNt5OrHigher then ofn.lStructSize := sizeof(TOpenFilename) else ofn.lStructSize := OPENFILENAME_SIZE_VERSION_400; ofn.hWndOwner := hParent; ofn.hInstance := hInstance; ofn.lpstrFile := @FileNames[0]; ofn.nMaxFile := sizeof(FileNames); ofn.Flags := OFN_EXPLORER or OFN_ALLOWMULTISELECT or OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST; ofn.lpstrFilter := FFilter; ofn.lpstrInitialDir := '.'; { Datei-Öffnen-Dialog aufrufen } if GetOpenFileName(ofn) then Result := ofn.lpstrFile else Result := ''; end;
Delphi-Quellcode:
gruss
ID_LOAD:
begin if MidiTracker.FVisible then TrackerFile := SKAERO_OpenFileDialog(MainHandle, 'MidiTracker files (*.mtf*)|*.mtf*'); if TrackerFile <> '' then MidiTracker.ParseFile(TrackerFile); TrackerFile := ''; end; |
AW: OpenDialog nonvcl
Hallo Emil,
Du solltest lange genug dabei sein, um zu wissen, dass Du ansagen könntest, wo es kracht und was die genaue Fehlermeldung ist. :hi: |
AW: OpenDialog nonvcl
Zitat:
Zitat:
Start ich mein Programm nochmal und lade die selbe Datei wiederum ein gibt es kein Problem. gruss |
AW: OpenDialog nonvcl
Zitat:
|
AW: OpenDialog nonvcl
Hallo,
Es wäre ganz nützlich wenn du mal durchsteppen würdest (Breakpoint setzen und mit F7/F8 weitersteppen) und sagen könntest in welcher Zeile genau die Zugriffsverletzung auftaucht. Ansonsten habe ich maximal rausgefunden, dass diese Zeile:
Delphi-Quellcode:
ofn.hInstance := hInstance;
laut MSDN nicht nötig ist: Zitat:
|
AW: OpenDialog nonvcl
Mit Breakpoint tut sich leider nichts..
Aber nach der Meldung wenn ich weiter klicke steht er in dieser Zeile.
Delphi-Quellcode:
TrackerFile := '';
Deshalb denke ich das es nur am Dialog liegen kann. Zumal vorheriges Laden bei jeder Datei erfolgreich ist. Solange ich nicht eine andere oder die selbe nochmal einlade. gruss |
AW: OpenDialog nonvcl
Was bin ich doch manchmal was von blöd
Delphi-Quellcode:
Das war der Fehler.
try
if (not assigned(myList)) then myList := TstringList.Create; ClearGrids; ParsetoMidiTracker(TrackerFile, ExtractFilePath(ParamStr(0)), myList); finally myList.Free; mylist := nil; //<<<< Dachte immer ein Free genügt ? Anscheinend nicht! end; Die hInstance kann ich ja noch russchmeißen wenn sie nicht benötigt wird. gruss Danke für die hilfe. |
AW: OpenDialog nonvcl
Free löscht nur die Objekte hinter dem Zeiger, setzt den Zeiger aber nicht auf Nil. So das ein Assigned() immer noch true liefert, da der Zeiger immer noch eine gültige Adresse beinhaltet. deswegen habe ich mir angewöhnt die Prozedur FreeAndNil zu verwenden.
|
AW: OpenDialog nonvcl
Zitat:
Danke gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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