Delphi-PRAXiS
Seite 5 von 7   « Erste     345 67      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Gleiche Variablen-Namen (https://www.delphipraxis.net/192650-gleiche-variablen-namen.html)

Delbor 9. Mai 2017 16:43

AW: Gleiche Variablen-Namen
 
Hi Haentschman
Die ist:
Delphi-Quellcode:
TPathListEvent = procedure(Sender:TObject; const FOrdner: String; const FPathlist: TStringList) of Object;
Und wie gesagt: eine Gui-Ausgabe funktioniert nach wie vor tadellos. Entweder; es liegt an der Empfängermethode oder schlicht daran, dass ich versuche, Objekte zu übergeben.

Gruss
Delbor

haentschman 9. Mai 2017 16:47

AW: Gleiche Variablen-Namen
 
:gruebel: Fehlermeldung?

IST Stand:
Event:
Delphi-Quellcode:
TPathListEvent = procedure(Sender:TObject; const FOrdner: String; const FPathlist: TStringList) of Object;
.
EventHandler: ?
Auslösen des Events: ?

siehe Beispiel Aviator...http://www.delphipraxis.net/1370782-post40.html

Delbor 9. Mai 2017 16:55

AW: Gleiche Variablen-Namen
 
Hi Heantschman

Ups! ich dachte, ich hätte die monströsen Dinger schon gepostet, konnte sie allerdings jetzt gerade nicht wiederfinden. Die sind:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt SQLiteTestProject.exe ist eine Exception der Klasse $C0000005 mit der Meldung 'access violation at 0x007e007d: read of address 0x0000007c' aufgetreten.
---------------------------
und
---------------------------
Im Projekt SQLiteTestProject.exe ist eine Exception der Klasse EAccessViolation mit der Meldung 'Zugriffsverletzung bei Adresse 007E007D in Modul 'SQLiteTestProject.exe'. Lesen von Adresse 0000007C' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

Ich hab in der Zeile, in der die Zuweisung stattfindet, einen Haltepunkt, die erste Fehlermeldung erscheint, wennn ich mit F8 weiterzusteppen versuche, und die zweite, wenn ich die erste mit Fortsetzen weggeklickt habe.

Gruss
Delbor

Delbor 9. Mai 2017 17:01

AW: Gleiche Variablen-Namen
 
Hi Haentschman

Der Auslöser des Events ist, wenn der Filesearcher seine Dateisuche beendet hat:
Delphi-Quellcode:
procedure TPathFinderFrame.FileSearcher1ExecuteComplete(Sender: TObject);
begin
  if Assigned(FCurrentNode) then
    FCurrentNode.Expand(false);
  if Assigned(FOnPathListEvent) then
    FOnPathListEvent(Sender, FOrdner, FPathlist);
end;
Der Eventhandler:
Delphi-Quellcode:
procedure TDMLSQLite.DoPathListEvent(Sender: TObject;
  const FOrdner: String; const FPathlist: TStringList);
begin
//  FFileList.AddStrings (FPathlist);
  SQLiteTestMain.LBxPathlist.Items.AddStrings(FPathlist);
end;
Gruss
Delbor

haentschman 9. Mai 2017 17:03

AW: Gleiche Variablen-Namen
 
Hänge das Testprojekt mal an... Bevor wir weiter raten. :wink:

Ich tippe darauf das beim Absenden des Events FPathlist: TStringList (das F kommt aus dem Original) nil (0x0000007c) ist. :wink:

Wo erzeugst du die FPathlist: TStringList Instanz? :gruebel:

Aviator 9. Mai 2017 17:06

AW: Gleiche Variablen-Namen
 
Zitat:

Zitat von haentschman (Beitrag 1370787)
Ich tippe darauf das beim Absenden des Events FPathlist: TStringList (das F kommt aus dem Original) nil (0x0000007c) ist. :wink:

Wenn das Objekt nil ist, dann wäre die Adresse eher 0x00000000. Ich kann mich aber auch täuschen. Nur kenne ich es nur so, dass die Adresse dann 0x00000000 wäre.

EDIT: @Delbor: Hast du meinen Post #40 gesehen. Dort habe ich mal ein Minimalbeispiel gemacht, wie so ein Event erstellt werden kann.

haentschman 9. Mai 2017 17:14

AW: Gleiche Variablen-Namen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallöle...:P
Zitat:

Wenn das Objekt nil ist, dann wäre die Adresse eher 0x00000000.
Zitat:

Ich kann mich aber auch täuschen
...ist leider so. :wink: Auch wenn das Objekt nil ist kannst du auch Adressen > 0 haben. In der Regel sind aber die Adressen im niedrigem 2 stelligem Bereich. :wink:

Aviator 9. Mai 2017 17:21

AW: Gleiche Variablen-Namen
 
Zitat:

Zitat von haentschman (Beitrag 1370789)
Hallöle...:P
Zitat:

Wenn das Objekt nil ist, dann wäre die Adresse eher 0x00000000.
Zitat:

Ich kann mich aber auch täuschen
...ist leider so. :wink: Auch wenn das Objekt nil ist kannst du auch Adressen > 0 haben. In der Regel sind aber die Adressen im niedrigem 2 stelligem Bereich. :wink:

Ja ok. In deinem Fall (Screenshot) ist es allerdings ein nicht initialisiertes Objekt. Eine Variable, der explizit nil zugewiesen wurde, ist eigentlich immer an 0x00000000. Aber es kann ja gut sein, dass es bei ihm auch so ist.

Einigen wir uns einfach auf eine nicht (mehr) existierende Objekt Instanz bzw. einen dangling Pointer. :stupid: :mrgreen:

haentschman 9. Mai 2017 17:25

AW: Gleiche Variablen-Namen
 
:P
Zitat:

dem explizit nil zugewiesen wurde, .... Aber es kann ja gut sein, dass es bei ihm auch so ist.
... da tippe ich auch drauf. :wink: Solange wir den QT nicht gesehen haben ist alles nur raten. :?
Zitat:

Einigen wir uns einfach auf eine nicht (mehr) existierende Objekt Instanz bzw. einen dangling Pointer.
... jawoll ja. :thumb:

Delbor 9. Mai 2017 17:26

AW: Gleiche Variablen-Namen
 
Hi Aviator

Ja, den hab ich gesehen, zwar erst kürzlich, aber...
Und eigentlich machst du da genau das, was ich versucht habe: Im Eventhandler einen andern Bezeichner verwenden, als bei der Tip-Deklaration. Wobei ich gerade sehe, dass du die abweichenden Variablen schon beim abfeuern verwendest; jene im Eventhandler sind eigentlich schon die zweite abweichende Variablengruppe, da sie anderswo deklariert sind.

Delphi-Quellcode:
TMyEvent = procedure(Street: string; Country: string) of object;
...
   if Assigned(FOnReport) then
     FOnReport(tmpStreet, tmpCountry); // Hier wird das Event ausgelöst
...
 // EventHandler für TMyClass.OnReport
 // Hier könnten die Parameter Bezeichner sogar schon von der Event-Deklaration abweichen
 // Wichtig sind die Datentypen. Die müssen in Reihenfolge und Typ mit der Event-Deklaration übereinstimmen
 procedure TForm1.ReportHandler(Street: string; Country: string);
 begin
   ShowMessage(Street + sLineBreak + Country);
 end;
Und das entspricht meinen Deklarationen.

Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:01 Uhr.
Seite 5 von 7   « Erste     345 67      

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