-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
10. Mai 2017
Hi Haentschman
Zitat:
Sorry, ich wollte dies nicht einfach so abtun. Irgendwie hab ich die Vorstellung, auf Papier meinen Code hinzuschreiben und dann zu erwarten, dass der auch so funktioniert.
Ein Quasi-Schema zu zeichnen, wie du das in deinem Anhang zeigst, macht aber durchaus Sinn. Nur würde ich persönlich dafür nicht Bleistift und Papier vewenden, sondern im einfachsten Fall ein...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
10. Mai 2017
Hi DeddyH
Dann hab ich das schlicht und einfach überlesen oder falsch interpretiert. Andrerseits deutete schon darauf hin, dass der Listeninhalt an eine Listbox oder was auch immer übergeben werden kann, dass das möglich ist - wie auch immer, was mich letzten Endes blockiert hat, ist mir momentan nicht wirklich klar.
Gruss
Delbor
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
10. Mai 2017
Hi zusammen
Ich habe - zumindest ansatzweise - eine Lösung gefunden:
procedure TDMLSQLite.DoPathListEvent(Sender: TObject;
const Ordner: String; const Pathlist: TStringList);
var i : integer;
begin
// Self.Pathlist.Assign(Pathlist);//<<=== Das hat nie, in welcher Form auch immer, funktioniert
for i := 0 to Pathlist.Count -1 do
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi DeddyH
Wie kommst du darauf, dass die einzige Instanz der Liste im Datenmodul erzeugt wird?
constructor TPathFinderFrame.Create(AOwner: TComponent);
var RGindex, L: integer; Drive, D: string;
Drives: TStringlist;
begin
inherited;
Drives := TStringlist.Create;
try
TDrives.ListDrivesAndNames(Drives);
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi Haentschman
Im Anhang die drei pas-Dateien. Ursprünglich hatte ich den Eventhandler in der Mainform. Aber wenn damit keine Gui-Ausgabe erfolgt, gehört er da eigentlich nicht hin.
Gruss
Delbor
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
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...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi Haentschman
Der Auslöser des Events ist, wenn der Filesearcher seine Dateisuche beendet hat:
procedure TPathFinderFrame.FileSearcher1ExecuteComplete(Sender: TObject);
begin
if Assigned(FCurrentNode) then
FCurrentNode.Expand(false);
if Assigned(FOnPathListEvent) then
FOnPathListEvent(Sender, FOrdner, FPathlist);
end;
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
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'...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi Haentschman
Die ist:
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
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi Sherlock
Der Grund ist:
Nenne ich den übergebenen ListenParameter im Empfänger AList, muss er auch bei der Eventdeklaration so heissen. Ich habe im Frame die Deklaration der Liste mal probeweise nach Public verschoben. Das hatte jedoch keine Auswirkungen - wenn, dann hätte ich erwartet, dass von den angesprochenen 2 Fehlermeldungen eine ausbleibt.
Gruss
Delbor
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi zusammen
@ Jumpy
Ups - da hab ich jetzt nicht daran gedacht!
Ich habe mich hierauf gestützt - von Namensgleicheit ist hier nicht die Rede.
Ein Zitat daraus:
Also müsste der Zielparameter an z.B. erster Stelle vom Typ des Quellparameters sein, auch wenn er anders heisst.
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi zusammen
@DeddyH:
Sorry, aber Papier und Bleistift meckern nicht. Wenn ich also was ungewöhnliches umsetzen will, schreibe ich kleine Testprogramme, die einen Bruchteil dessen tun,was im eigentlichen Programm getan werden soll. Auf diese Weise merke ich dann relativ schnell, ob etwas geht oder nicht.
Klar, ich hätte von Anfang an sehen können: Da sind zwei gleichnamige Variablen, die...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi zusammen
Eben hab ich versucht, Uwe Raabes Vorschlag umzusetzen. Der Empfänger des Events befindet sich bislang in der Mainform, und so wolllte ich ihn ins Datenmodul verlegen. Dazu kopierte ich die Prozedur in der Mainform, fügte sie im Datenmodul ein und liess sie per Shift/Control/C deklarieren. Anschliessend versuchte ich, die Variable FPathlist per Refactoring als privates Feld...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi zusammen
@DeddyH:
@Ghostwalker:
Wenn Mainform (oder Datenmodul) einerseits und der Pathfinderframe andrerseits ihre eigene Instanz haben, sind die beiden voneinander unabhängig - sollte sich irgendwas in einer der beiden ändern, muss ich nicht mehrere Stellen bearbeiten, sondern nur diejenige, in der ein Event abgefangen wird.
Aber jetzt fällt mir auf:
TOnComplete =...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi Ghostwalker
Ja, danke. Daran habe ich auch schon gedacht, mich dann aber für dieses Vorgehen entschieden, da ich ja auch noch ein Feld FOrdner habe, in dem der Name des Parentfolders enthält.
Klar könnte dieser Name aus einem Dateipfad herausgefiltert werden. Für die jetzige Vorgehensweise habe ich mich entschieden, weil Teile dieses Namens als DBName verwendet werden sollen. Und um...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
9. Mai 2017
Hi zusammen
Vielen Dank, Uwe Raabe. An sowas habe ich weniger gedacht, da es mir zu wenig klar erschien. Aber klar - Self.FPathlist kann unmöglich der Parameter sein, womit klar wäre, welche der beiden Variablen an welche zugewiesen und von wem gelöscht wird.
Ohne die klare Adressierung mindestens der einen Variablen ist ja auch nicht wirklich klar, wer wem zugewiesen wird.
@DeddyH:...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
8. Mai 2017
Hi Uwe Raabe
Hmm... Und wie wird, bzw. kann dies geklärt werden? Indem der Compiler darüber informiert wird, welche der Variablen zu was gehört?
Genau das hat aber meine Frage veranlasst.
Zur Erinnerung: Meine bisherige Prozedur gibt die Liste direkt aus, ohne sie in einem Feld zwischenzuspeichern:
procedure TSQLiteTestMain.DoPathListEvent(Sender: TObject;
const FOrdner: String;...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
8. Mai 2017
Hi DeddyH
Da gibts jetzt aber ein gewaltiges Missverständnis: Die Mainform darf/muss dem Pathfinderframe keinen String zuweisen. Die Aufgabe des Frames ist es ja gerade, die von seiner Komponente TFilesearcher gefundenen Pfade in einer Liste zu sammeln und diese nach aussen zu senden/von aussen auszulesen zu lassen. dieser Liste einen String von der Mainform, aus zuzuweisen.
Diese...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
8. Mai 2017
Hi DeddyH
Die Sache mit dem Property habe ich mir auch überlegt. Einen Event müsste ich vom Frame aus aber so oder so abfeuern, da die Mainform ja nicht wissen kann, wann der PathfinderFrame die Liste (und damit das Listenproperty) neu bestückt. Das würde dann heissen, dass ich vom Frame aus einen TNotifierEvent abfeuere, den die Mainform empfängt und dabei dann das Listen-Property des Frames...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
8. Mai 2017
Hi SneakyBagels
Grundsätzlich sind lokale Variablen, die mit Prozedur- oder Funktionsaufrufen übergeben werden, absolut OOP-Konform.
Allerdings habe ich deinen Beitrag nicht wirklich ganz verstanden.
Das heisst also, du deklarierst und erzeugst die Variable in der ProjektUnit noch bevor Mainform.Create aufgerufen wird? Das ist tatsächlich eher ungewöhnlich, aber meines Wissens noch...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
8. Mai 2017
Hi Hoika
Weil ich dann jeweils von der Mainform aus mit der Framepathlist arbeiten müsste. Da FPathlist ein privates Feld ist, ist dies nicht möglich, ausser ich mache das Feld zu einer Public-Variable.
Klar, ich könnte so aus jeder Unit mit der Framevariable arbeiten. Aber sobald sich in einem Projekt keine PathfinderFrame befindet, muss ich in allen Units, die darauf zugreifen, dies...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
8. Mai 2017
Hi SneakyBagels
Tönt nicht schlecht - auf diese Weise hätte ich genau eine Instanz meiner FPathlist. Allerdings hat das in meinem Fall einen kleinen Haken:
FPathlist übernimmt in meinem PathfinderFrame die von DeddyH'sTFileSearch gefundenen Pfade:
procedure TPathFinderFrame.AddNewNode(ParentNode: TTreeNode; const aCaption,
aRealName: string; CanGetChildren: Boolean);
var
Node:...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
8. Mai 2017
Hi Uwe Raabe
Ich habe mir einen eigenen FileOpenframe (TPathFinderFrame) geschrieben, und der füllt FPathList jeweils mit Dateipfaden, wenn ein Ordner geöffnet wird.
Verarbeitet wird diese Liste allerdings ausserhalb: aus den enthaltenen Pfaden sollen Bilddateien geladen werden und anschliessend in eine SQLite-DB geschrieben werden.
Die FPathlist-Felder werden jeweils im Frame und in der...
-
Forum: Object-Pascal / Delphi-Language
Delphi
by Delbor,
8. Mai 2017
Hi zusammen
Zu Beginn: die bewusste Variable ist ein Feld vom Tip TStringlist und hat überall den selben Namen: FPathlist. Da (und solange) es sich dabei um ein privates Feld handelt, ist das im Grunde kein Problem.
Hier feuere ich einen Event und übergebe dabei unter anderem FPathlist:
procedure TPathFinderFrame.FileSearcher1ExecuteComplete(Sender: TObject);
var LPathlist: TStringlist;...