Einzelnen Beitrag anzeigen

Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Die AV, die es gar nicht gibt

  Alt 20. Feb 2022, 16:28
Delphi-Version: 11 Alexandria
Hi zusammen

Ich fürchte, ich habe eines meiner Testprogramme zum einen mit Delphi Alexandria geöffnet, um dann mit Sydney daran weiterzuarbeiten - anders kann ich mir nicht erklären, dass das Programm keinen weiteren Frame mehr akzeptiert (wo andere mehreredutzend oder hundert in ihren Programmen haben), sich die Codevervollständigung verabschiedete hat und das Programm bei F9 fürchterlich lange zum aufstarten braucht.

Also hab ich damit begonnen, unter Verwendung des bestehenden Codes eine neue Anwendzung zu bauen. Die jetzt verwendeten Fremdkomponenten, Frames, Forms und Units tragen alle den Namen 'Alex' irgendwo im Namen, Methodenköpfe werden in Alexandria erzeugt.
Vom bestehenden Programm werden gerade mal die lokalen Deklarationen und alles/das meiste zwischen begin und end inklusive übernommen.
Das sieht im konkreten Fall zB. so aus: (alt)
Delphi-Quellcode:
constructor TOpenFileFrame.Create(AOwner: TComponent);
begin
  inherited;
  FReportlist := TStringlist.Create;
  FPopUpModeList:= TStringlist.Create;
  DisplayAllFiles; //<== Läuft problemlos durch
  FPathlist := TStringlist.Create;
  FPopUpItemList := TStringlist.Create;
  PnlLookOut.Align := alClient;
  FCmbxItem := False;
  FFileType := 'Alle Dateien';
  FPopUpNode := NIL;
  NewPopUpItem;
end;
und neu (Der Frame wurde nicht unter einem andern Namen gespeichrt, sondern von Null an neu aufgebaut):
Delphi-Quellcode:
constructor TAlexOpenfileFrame.Create(AOwner: TComponent);
begin
  inherited;
  FReportlist := TStringlist.Create;
  FPopUpModeList:= TStringlist.Create;
  DisplayAllFiles;
  FPathlist := TStringlist.Create;
  FPopUpItemList := TStringlist.Create;
  PnlLookOut.Align := alClient;
  FCmbxItem := False;
  FFileType := 'Alle Dateien';
  FPopUpNode := NIL;
  NewPopUpItem;
end;

procedure TAlexOpenfileFrame.DisplayAllFiles; // D: string;
  var Drives: TStringList; Drive, D: string;
begin
  Drives := TStringlist.Create;
  try
    TDrives.ListDrivesAndNames(Drives);
    FReportlist.Add('--OpenFileFrame.ReportList--');
    FReportlist.Add('--Start : --');
    for Drive in Drives do
    begin
      D := Copy(Drive, 1, 3);
      AddNewNode(nil, Drive, Copy(Drive, 1, 3), true); // Zugriffsverletzung. Der Code ist genau der selbe wie vorher
      FReportlist.Add('procedure TOpenFileFrame.DisplayAllFiles');
      FReportlist.Add(D);
    end;
  finally
    FreeAndNil(Drives);
  end;
  FileSearcherAlex1.SearchType := stBoth;
  FReportlist.Add('--procedure TOpenFileFrame.DisplayAllFiles;--');
  Self.Zurcksetzen1.Enabled := False;
end;
AddNewNode schreibt die gefundenen Ordner und Dateien in ein Treeview - hier gerade mal die ersten Laufwerksbuchstaben (C:\ etc).
In TOpenFileFrame läuft diese Prozedur seit Jahren problemlos ab.
Eine Frameinstanz ist auf der Mainform vorhanden. Ich seh also keinen Grund für die AV. Was habe ich übersehen?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat