Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   AV beim Schliessen von Form mit ShellListview (https://www.delphipraxis.net/90564-av-beim-schliessen-von-form-mit-shelllistview.html)

Luckie 19. Apr 2007 15:31


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:
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;
Und Aufruf:
Delphi-Quellcode:
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;
Was mache ich da falsch?

dataspider 19. Apr 2007 15:49

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

Luckie 19. Apr 2007 16:00

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.

dataspider 19. Apr 2007 16:03

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:
if ShellListview1.SelectedFolder.IsFolder then
Cu, Frank

Luckie 19. Apr 2007 16:13

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?

r2c2 19. Apr 2007 16:20

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

Luckie 19. Apr 2007 16:22

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.

sh17 19. Apr 2007 16:28

Re: AV beim Schliessen von Form mit ShellListview
 
Dann schau Dir mal die VirtualShellTools an

dataspider 19. Apr 2007 16:31

Re: AV beim Schliessen von Form mit ShellListview
 
Hi Luckie,

was spricht gegen die Verwendung von TOpenDialog?

Frank

r2c2 19. Apr 2007 16:32

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: http://forum.dsdt.info/viewtopic.php?t=33072
- ...

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.
Seite 1 von 2  1 2      

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