AGB  ·  Datenschutz  ·  Impressum  







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

Die unerklärliche AV

Ein Thema von Delbor · begonnen am 9. Feb 2018 · letzter Beitrag vom 11. Feb 2018
Antwort Antwort
Seite 2 von 2     12   
Delbor

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

AW: Die unerklärliche AV

  Alt 9. Feb 2018, 19:25
Hi Stvie
Hast du möglicherweise Lokalisierungen die nicht aktualisiert wurden? Da stecken auch die dfm resourcen drin und wenn da noch nicht die ListBox2 drin ist, wird sie beim dfm streamen nicht erstellt und demnach bleibt das ListBox2 Feld nil.
Bezüglich Lokalisierung hab ich noch nichts unternommen. Damit gelten also die Defaulteinstellungen meines Systems.
Das Programm selbst ist zur Zeit eher eine Testanwendung, die in einem weiteren Schritt um eine SQLite-DB ergänzt werden soll. Hauptziel: Effizientes organisieren meiner eigenen Dokumente.

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

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#12

AW: Die unerklärliche AV

  Alt 9. Feb 2018, 22:25
Ansonsten findet sich die komplette pas im Anhang meines letzten posts.
"Komplett" war früher auch mal mehr.

Das Problem scheint doch vermutlich schon vorher zu existieren und da fehlt gleich mal Alles.

Delphi-Quellcode:
Assert(Assinged(PDFOfficerMain));
Assert(Assinged(PDFOfficerMain.ListBox1));
Assert(Assinged(PDFOfficerMain.ListBox2));
Direkt an den Anfang von TPathFinderFrame.AddNewNode und auch nach dem Application.ProcessMessages; , zu dem ich jetzt besser mal nix sage.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 9. Feb 2018 um 22:32 Uhr)
  Mit Zitat antworten Zitat
Delbor

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

AW: Die unerklärliche AV

  Alt 10. Feb 2018, 00:30
Hi himitsu
Zitat:
"Komplett" war früher auch mal mehr.
Ufff!! Sorry, mein Fehler! Ich hab da zwar eine Note++-Datei angelegt, aber nicht hochgeladen
Ich hab mal nur die Pathfinder-Unit angehängt, da hier die Listbox2 angesprochen wird.

Gruss
Delbor
Angehängte Dateien
Dateityp: pas PathFinderFrameUnit.pas (17,6 KB, 6x aufgerufen)
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
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Die unerklärliche AV

  Alt 10. Feb 2018, 04:22
Hallo,
wir brauchen auch die Main-Pas und -Dfm.
Am besten das ganze Projekt.

Und markier mal die Stelle, wo es knallt.
Heiko
  Mit Zitat antworten Zitat
Delbor

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

AW: Die unerklärliche AV

  Alt 10. Feb 2018, 09:16
Hi zusammen
Das Projekt erfordert allerdings etwas Zusatzaufwand, da die Vorrausetzungen für einen Zip-Upload nicht so ohne weiteres einzuhalten waren.
Das Projekt erwartet:
Die PDFium-DLL von Google(freeware), die in den Debug-Ordner kopiert werden muss oder da, wo die Exe erstellt wird.
Die TFilesearcher-Komponente von DeddyH, die ich hier ebenso beilege. Diese benötigt eine Zusatzdatei DDFileUtils, die enthalten ist und sich meiner erfahrung nach im Projekteverzeichnis befinden sollte, ohne aber explizit dem Projekte hinzugefügt zu werden.

Gruss
Delbor
Angehängte Dateien
Dateityp: zip FileSearchv1.1.zip (36,4 KB, 5x aufgerufen)
Dateityp: zip pdfium.zip (4,96 MB, 7x aufgerufen)
Dateityp: zip PDFOfficer.zip (271,0 KB, 8x aufgerufen)
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
 
#16

AW: Die unerklärliche AV

  Alt 10. Feb 2018, 16:59
Hi zusammen

Wie ich gesehen habe, wurden meine Zips schon mal heruntergeladen. Da es hier dazu bislang noch keinen Kommentar gab, befürchte ich, dass auf anderen Rechnern dieseAV nicht auftritt. 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 himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#17

AW: Die unerklärliche AV

  Alt 11. Feb 2018, 16:31
LOL

Irgendwer kommt auf die geniale Idee im Create des Frame auf die globale Variable der Form zuzugreifen, die gerade eben erstellt wird und dann wundert er sich, dass Komponenten, die erst nach dem Frame erstellt werden, noch nicht existieren, da sie noch nicht erstellt wurden.

Verschiebe diesen Code in eine Methode und rufe sie im OnCreate der Form aus, nachdem alles erstellt wurde.




ODER: Trenne alle globalen Abhängigkeiten auf.

Erstmal solltest du lernen, dass man diese Variablen besser nicht verwenden sollte.
Stattdessen sollte dein Frame (deine Komponente) ein Property für diese Listboxen bekommen, mit denen er arbeiten soll.
Wenn der Frame registriert wird und Delphi-Referenz durchsuchenRegisterComponent und als "Komponente" auf der Form liegt, dann bekommst du auch diese Property im OI angeboten.

Als Nebeneffekt sind die einzelnen Komponenten voneinander unabhängig, können ausgetauscht oder auch in anderen Programmen wiederverwendet werden.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (11. Feb 2018 um 17:14 Uhr)
  Mit Zitat antworten Zitat
Delbor

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

AW: Die unerklärliche AV

  Alt 11. Feb 2018, 17:58
Hi Himitsu

Du sprichst von dieser Prozedur:
Delphi-Quellcode:
procedure TPathFinderFrame.AddNewNode(ParentNode: TTreeNode; const aCaption,
  aRealName: string; CanGetChildren: Boolean);
var
  Node: TTreeNode; NodeRect: TRect;
  NameRec: PNameRec; DefaultDraw: Boolean;BCaption : String;
begin
  Node := TVPathExplorer.Items.AddChild(ParentNode, aCaption);
  PDFOfficerMain.ListBox1.Items.Add('aRealName := ' + aRealName); // Hier wird Listbox1 auf
  PDFOfficerMain.ListBox1.Items.Add('aCaption := ' + aCaption); // der Mainform ausgefüllt.
  BCaption := ExtractFileExt(aCaption); // Und zwar mit sen hier angegbenen drei
  PDFOfficerMain.ListBox1.Items.Add('ExtractFileExt := '+ BCaption); // Zeilen, die für jedes der 13 Laufwerke je einmal
  Application.ProcessMessages;
  if CanGetChildren then // Boolean-Wert für Isdirectory aus dem TSearchanalizer(TFilesearcher)
  begin
    FDefaultdraw := False;
    FIsDirectory := True;
    Node.ImageIndex := 1;
    Node.SelectedIndex := 1;
    (* Dummy-Knoten anlegen *)                      
    TVPathExplorer.Items.AddChild(Node, 'dummy');
// PDFOfficerMain.ListBox2.Items.Add('procedure TPathFinderFrame.AddNewNode'); // Hier die AV: Listbox2 ist Bil, obwohl sie sich auf der Form befindet
// PDFOfficerMain.ListBox2.Items.Add('CanGetChildren := True');
// PDFOfficerMain.ListBox2.Items.Add('');
  end
  else
  begin
    if BCaption = FFilter then // Boolean
    begin
....
Jetzt brauch ich aber ganz schnell ein recht tiefes Mausloch, in das ich mich verkriechen kann!!

Da hab ich erst grade in einem andern Thread geschrieben, dass der Constructor des Frames vor demjenigen der Form abläuft, weil in dieser eine Frameinstanz angelegt werden soll - und jetzt dies! Natürlich läuft die Prozedur AddNewNodes zum ersten mal vor dem Form-Constructor ab und ebenso natürlich gibt es zu dieser Zeit keine Listbox2.

Das Problem ist nur - es gibt zu diesem Zeitpunkt auch keine Listbox1. Die aber wird anstandslos gefüllt, ob es sie nun schon gibt oder nicht! Und das dürfte auch nicht sein!?
Im Constructor des Frames gibt es keinen Zugriff auf die Main- oder irgendeine andere Form.
Delphi-Quellcode:
constructor TPathFinderFrame.Create(AOwner: TComponent);
  var RGindex, L: integer; Drive, D: string;
      Drives: TStringlist;
begin
  inherited;
  FDefaultDraw := False;
  Drives := TStringlist.Create;
  try
    TDrives.ListDrivesAndNames(Drives);
    FReportlist := TStringlist.Create;
    FReportlist.Add('----');
    for Drive in Drives do
    begin
      D := Copy(Drive, 1, 3);
      AddNewNode(nil, Drive, Copy(Drive, 1, 3), true); //AddNew wird hier aufgerufen, bevor die Form crestet wird.
      FReportlist.Add(D);
    end;
  finally
    FreeAndNil(Drives);
  end;
  FReportlist.Add('----');
  PathFinder1.SearchType := stBoth;
  FileMaskInit;
  
  FPathlist := TStringlist.Create;
  FNodeList := TStringlist.Create;
  FNodeList.Sorted := False;
  RGindex := 0;
end;
Also: Zu dem Zeitpunkt, da der Frame createt wird:
  • gibt es noch keine Mainform.
  • Also gibt es weder Listbox1 noch Listbox2
  • Der Constructor des Frames greift aber via aufruf von AddNewNode indirekt auf auf beide zu.
  • Wesshalb erzeugt nur der Zugriff auf die noch nicht vorhandenen Listbox2 eine AV, nicht aber der auf die ebenfalls noch nicht vorhandene Listbox1?

Gruss
Delbor

PS:
Zitat:
Irgendwer kommt auf die geniale Idee im Create des Frame auf die globale Variable der Form zuzugreifen,
Das muss dieser ominöse Fehler sein, der da vor meinem Bildschirm sitzt...
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (11. Feb 2018 um 18:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#19

AW: Die unerklärliche AV

  Alt 11. Feb 2018, 22:13
Bei Frames gibt es halt zwei Varianten,

entweder als Frame, der durch die IDE verwaltet wird. (wie hier)
  • Da wird es schwer, dass die Daten "automatisch" rein bekommen,
    abgesehn davon der Code wird in Methoden gelegt, die manuell vom Programm aufgerufen werden.
    > statt im eigenen Contructor dann im Contructor der Form aufgerufen
  • Property des Frame sind im OI nicht nutzbar, da die IDE für solche Frames, Forms und Datenmodule eine "Dummy"-Kompoente im Formdesigner nutzen. (und da eben nur die bekannten Grundtypen, wie TFrame).
    Das Selbe gilt auch für Vererbung diesen Modulen, so lange die Vorfahren nicht in der IDE registriert werden.
  • aber dafür gibt es auch keine Abhängigkeit zur IDE
oder man behandelt den Frame als Komponente
  • hier muß man diesen Frame aber in der IDE registrieren/installieren, also erstmal in ein Laufzeitpackage stecken
  • aber dafür kennt die IDE dann diese Klasse und kann auch ihre Property und Property-/Component-Helper verwenden

Was ich schon immer vermisst habe.
Es gibt das TComponent.Loaded -Ereignis, welches nach dem Erstellen und Laden aller Property via DFM ausgeführt wird.
Es gibt aber leider kein Ereignis für "Form fertig geladen", so wie z.B. csDestroying, wo alle Sub-Komponenten erstmal diesen Status bekommen, bevor auch nur eine Komponente freigegeben wird.
Ein AfterModulCreate und BeforeModulDestroy in TComponent (TForm/TFrame/TDataModule) wäre toll.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 15:39 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