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