AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Seltsame AV

Ein Thema von Delbor · begonnen am 28. Okt 2017 · letzter Beitrag vom 28. Okt 2017
Antwort Antwort
Delbor

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

Seltsame AV

  Alt 28. Okt 2017, 12:38
Delphi-Version: XE8
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:
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;
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.

Delphi-Quellcode:
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]) = '.NEFthen
        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
....
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.
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
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
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Seltsame AV

  Alt 28. Okt 2017, 13:23
Du verwendest mal PathList , mal FPathList . Sieht anhand des gezeigten irgendwie nicht richtig aus.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Delbor

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

AW: Seltsame AV

  Alt 28. Okt 2017, 13:29
Hi zusammen

Das "Mysterium" hat sich aufgelöst. Zur Erinnerung: In der ersten gezeigten Prozedur habe ich eine Zuweisung:
LPathCount := Pathlist.Count; Dabei steht das 'L' für lokale Variable. Ich hab das testeise mal ersetzt durch:
FPathCount := Pathlist.Count; Also 'F' für private Felder. Und das hat mir Delphi dann um die Ohren gehauen...

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
Delbor

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

AW: Seltsame AV

  Alt 28. Okt 2017, 13:41
Hi Uwe Raabe
Zitat:
Du verwendest mal PathList , mal FPathList . Sieht anhand des gezeigten irgendwie nicht richtig aus.
Stimmt - ich hoffe, ich habe diese FPathlist nun endgültig raus.

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
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
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz