![]() |
Delphi-Version: XE8
Seltsame AV
Hi zusammen
Ich habe mir einen eigenen "FileDlg" gebastelt - wenn der fündig wird, feuert er ein Event ab , dem er eine Stringvariable mit dem Ordnernamen und eine Liste mit den in diesem Ordner vorhandenen (Bild-)Dateien mitgibt. Der Eventhandler dazu:
Delphi-Quellcode:
In der auskommentierten Zeile wird die erste eimer Reihe von Insert-Prozeduren mit 3 Parametern aufgerufen. Einer davon ist Pathlist, die Liste mit den vom Event erhaltenen Pfaden.
procedure TFDSQLiteDML.DoPathlistEvent(Sender: TObject; const Ordner: String;
const Pathlist: TStringlist); var Bildpfad, LPath : String; ID_GUID: TGUID; LPathCount : integer; begin LPathCount := Pathlist.Count;//* CM_First.CreateProgressbarDlg(LPathCount); try CM_First.ProgressbarDlg.Top := (Screen.Height - (CM_First.ProgressbarDlg.Height + 10)); CM_First.ProgressbarDlg.Left := (Screen.Width - CM_First.ProgressbarDlg.Width) div 2; Application.ProcessMessages; CM_First.Listbox1.Items.AddStrings(Pathlist); Bildpfad := PathList[0]; LPath := ExtractFilePath(Bildpfad)+'IdentFile.cgf'; if not FileExists(LPath+'IdentFile.cgf') then begin ID_GUID := CreateIDFile(LPath); ShowMessage(Id_GUID.toString); end; try FDSQLiteDML.FDSQLiteConnection.StartTransaction; BildTabelleInsert2(100, ID_GUID,Pathlist); //<=== Startet die Insert-Prozeduren Self.FDSQLiteConnection.Commit; except Self.FDSQLiteConnection.Rollback; end; finally CM_First.ProgressbarDlg.FormStyle := fsnormal; CM_First.ProgressbarDlg.Close; FreeAndNil(CM_First.ProgressbarDlg); // if assigned(FolderID) then // FolderID.Free; end; end;
Delphi-Quellcode:
An der bezeichneten Stelle erhalte ich die AV, obwohl FTotal korrekt als privates integerfeld deklariert und Pathlist offenbar korrekt gefüllt ist - Pathlist.Count hat den Wert 44.
procedure TFDSQLiteDML.BildTabelleInsert2(Seitenlaenge: Integer; ID_GUID : TGUID; Pathlist : TStringlist);
var BMap, WorkMap: TBitmap; BJpeg: TJPEGImage; LPicture : TPicture; Bildname, Bildpfad, LIdFolder: string; startTime, CInserttime: Cardinal; BildTabelleLastId, i,inserted : Integer; // ,IDBild begin LPicture := TPicture.Create; BMap := TBitmap.Create; WorkMap := TBitmap.Create; BJpeg := TJpegImage.Create; BJpeg.CompressionQuality := 100; BJpeg.PixelFormat := jf24Bit; try FTotal := PathList.Count; // <<======================= AV for i := 0 to PathList.Count - 1 do begin // if i = 0 then // startTime := GetTickCount; // FRest := FPathList.Count - i; // if FDQueryMain.Active then // FDQueryMain.Active := False; Bildname := ExtractFileName(FPathList[i]); Bildpfad := FPathList[i]; Delete(BildName,Length(BildName)-3,4); if ExtractFileExt(FPathList[i]) = '.NEF' then begin LPicture.LoadFromFile(PathList[i]); BMap.Assign(LPicture.Graphic); WorkMap.Assign(LPicture.Graphic); FModifyBitmap.ScaleBitmaps(BMap, Seitenlaenge); BJpeg.Assign(BMap); LIdFolder := ID_GUID.ToString; BildTabelleLastId := BildInsertQuery(BJpeg,WorkMap,LIdFolder); //Ab hier werden nacheinander die Insert-Prozeduren BildDescribeTabelleInsert(BildTabelleLastId,BildName,Bildpfad); //aufgerufen .... Zu //* : Diese Zuwweisung macht keine Probleme. Ich sehe auch keinen Grund, wieso eine Methode eine per Event erhaltene Stringliste nicht weiterreichen könnte. Oder irre ich mich da? Gruss Delbor |
AW: Seltsame AV
Du verwendest mal
Delphi-Quellcode:
, mal
PathList
Delphi-Quellcode:
. Sieht anhand des gezeigten irgendwie nicht richtig aus.
FPathList
|
AW: Seltsame AV
Hi zusammen
Das "Mysterium" hat sich aufgelöst. Zur Erinnerung: In der ersten gezeigten Prozedur habe ich eine Zuweisung:
Delphi-Quellcode:
Dabei steht das 'L' für lokale Variable. Ich hab das testeise mal ersetzt durch:
LPathCount := Pathlist.Count;
Delphi-Quellcode:
Also 'F' für private Felder. Und das hat mir Delphi dann um die Ohren gehauen...
FPathCount := Pathlist.Count;
Gruss Delbor |
AW: Seltsame AV
Hi Uwe Raabe
Zitat:
Früher hatte ich in jeer Unit eine Liste angelegt, in der ich eine brauchte- Dann wurde mir (Dank dieses Forums ) klar, dass auch durch übergebene Listen iteriert werden kann. Oder besser gesagt: die übergebene Liste wird nicht 'arbeitslos', bzw. freigegeben, nur weil ich deren Strings an eine andere Liste übergeben habe, sondern erst, nachdem der Event und die darin aufgeufenen Prozeduren abgearbeitet und der Event zurückgekehrt ist. Von daher also noch dieses FPathlist, so Quasi als Überbleibsel der Feldvariablen. Aber wie gesagt - die ist, zumindest in dieser Unit, jetzt raus. Gruss Delbor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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