![]() |
AV beim Schliessen von Form mit ShellListview
Ich habe mir gerade einen eigenen SaveDialog gebastelt mit der ShellComboBox und dem ShellListview. Nur immer, wenn ich ihn schliessen will, bekomme ich eine AV:
Delphi-Quellcode:
Und Aufruf:
procedure TfrmSaveTemplate.btnOKClick(Sender: TObject);
begin FAuthor := edtAuthor.Text; FDescription := memDescription.Text; FFilename := edtFile.Text; if ShellListview1.SelectedFolder.IsFolder then FFilename := ShellListview1.SelectedFolder.PathName + '\' + edtFile.Text else FFilename := ShellListview1.SelectedFolder.PathName; end; procedure TfrmSaveTemplate.edtFileChange(Sender: TObject); begin btnOK.Enabled := edtFile.Text <> ''; end; function TfrmSaveTemplate.Execute: Boolean; begin Result := Self.ShowModal = mrOK; end; procedure TfrmSaveTemplate.ShellListView1Click(Sender: TObject); var Filename : WideString; begin if ShellListView1.ItemIndex > -1 then begin Filename := ShellListview1.SelectedFolder.PathName + ShellListview1.Items[ShellListview1.ItemIndex].Caption; if not ShellListview1.SelectedFolder.IsFolder then edtFile.Text := ExtractFilenameW(Filename); end; end;
Delphi-Quellcode:
Was mache ich da falsch?
var
TemplateFile : TTemplateIO; begin if frmSaveTemplate.Execute then begin ShowMessage(frmSaveTemplate.Filename + ', ' + frmSaveTemplate.Author + ', ' + frmSaveTemplate.Description); TemplateFile := TTemplateIO.Create(False); TemplateFile.FreeOnTerminate := True; TemplateFile.Author := frmSaveTemplate.Author; TemplateFile.Description := frmSaveTemplate.Description; TemplateFile.Page := ImageEnVect; TemplateFile.SaveToFile(frmSaveTemplate.Filename); end; |
Re: AV beim Schliessen von Form mit ShellListview
Hi,
gehe ich richtig in der Annahme, dass du das SaveTemplateForm bereits erzeugt hast und im Speicher behältst, also kein Action := caFree evtll. vererbst? Cu, Frank |
Re: AV beim Schliessen von Form mit ShellListview
Die Form wird schon beim Start der Anwendung erzeugt. Wenn ich das debuggen will und in Zeile 6 einen Breakpoint setze, will er von mir an der Stelle den Pfad zur ShellCtrl.pas wissen. Kommentiere ich alle ab Zeile 6 aus, geht es ohne Probleme. Es muss also was mit dem ShellListview zu tun haben.
|
Re: AV beim Schliessen von Form mit ShellListview
Hi,
das Einzige, was mir auffällt: ShellListview1.SelectedFolder kann nil sein! In diesem Fall crasht es bei:
Delphi-Quellcode:
Cu, Frank
if ShellListview1.SelectedFolder.IsFolder then
|
Re: AV beim Schliessen von Form mit ShellListview
Wann könnte es denn nil sein? Und wie vermeide ich das?
OK, es ist nil. Aber warum? Ich habe doch den Listview benutzt, um in den Ordner zu navigieren. Oder gibt es eine andere, bessere Möglichkeit mein Ziel zu erreichen und einen Dateinamen mit Pfad zurückzugeben? |
Re: AV beim Schliessen von Form mit ShellListview
Mal genz abgesehen von konkreten Problem: Wenn ich dir einen Rat geben darf, dann meide ShellListView & Co. Die sind a) lahm und b) total verbuggt. Bastel dir was eigenes, dann weist du, woran du bist... Ich hab diese Komponenten vor einiger Zeit des öfteren benutzt, und würde sie aufgrund der Probleme, die ich mit ihnen hatte, nur noch mit der Beißzange anfassen...
mfg Christian |
Re: AV beim Schliessen von Form mit ShellListview
Ich habe aber keine Zeit was eigenes zum implementieren. Desweiteren will ich ja nichts aussergewöhnliches. Nur im Ordnersystem navigieren.
|
Re: AV beim Schliessen von Form mit ShellListview
Dann schau Dir mal die
![]() |
Re: AV beim Schliessen von Form mit ShellListview
Hi Luckie,
was spricht gegen die Verwendung von TOpenDialog? Frank |
Re: AV beim Schliessen von Form mit ShellListview
Dann nur mal 2 Beispiele, wie toll diese Komponenten sind:
- ich hatte - damals noch unter Win98 und D6PE- massivste Ressourcenprobleme. ==> Etwa in 50% aller Fälle(ich konnte es nicht wirklich reproduzieren) - stieg der Ressourcenverbrauch innerhalb einer gewissen Zeit(ne halbe Stunde vielelicht) auf 100%, was zum Systemstillstand geführt hat(Win98 eben). Dabei reichte es n ShellListView auf dem Formular zu haben. - grad heute is wieder n Bugreport aufgetaucht: ![]() - ... Wie gesagt man kann diese Komponenten benutzen. Es geht. Irgendwie. Wenn ich heute aber sowas bräuchte, würde ich mir entweder ne entsprechende OpenSource-Komponente suchen oder selber basteln. Was du machst ist deine Sache. Wollte dich nur warnen... mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:05 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 by Thomas Breitkreuz