AGB  ·  Datenschutz  ·  Impressum  







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

Gleiche Variablen-Namen

Ein Thema von Delbor · begonnen am 8. Mai 2017 · letzter Beitrag vom 10. Mai 2017
Antwort Antwort
Seite 1 von 2  1 2      
Delbor

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

AW: Gleiche Variablen-Namen

  Alt 8. Mai 2017, 18:25
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:
Delphi-Quellcode:
procedure TPathFinderFrame.AddNewNode(ParentNode: TTreeNode; const aCaption,
  aRealName: string; CanGetChildren: Boolean);
var
  Node: TTreeNode;
  NameRec: PNameRec;
begin
  Node := TVPathExplorer.Items.AddChild(ParentNode, aCaption);
  if CanGetChildren then
    begin
      Node.ImageIndex := 1;
      Node.SelectedIndex := 1;
      (* Dummy-Knoten anlegen *)
      TVPathExplorer.Items.AddChild(Node, 'dummy');
    end
  else
    begin
      Node.ImageIndex := 2;
      Node.SelectedIndex := 2;
      FPathlist.Add(aRealName); //<==
    end;
  New(NameRec);
  NameRec^.RealName := aRealName;
  Node.Data := NameRec;
end;
AddNewNode wird das erste mal aus TPathFinderFrame.Create aus aufgerufen, um die Ordner der ersten Ebene darzustellen (Laufwerke). Danach erfolgen die Aufrufe immer aus den Expanding-Events des Treeviews. Denen kann ich die Liste nicht per Aufruf übergeben, da diese per Mousedown ausgelöst werden (wenn der User einen Ordner anklickt). Und bei jedem Klick eine neue Instanz erstellen, dürfte auch nicht wirklich das Wahre sein.

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
SneakyBagels
(Gast)

n/a Beiträge
 
#2

AW: Gleiche Variablen-Namen

  Alt 8. Mai 2017, 18:37
Danke für das Lob. Hätte eigentlich gedacht du erschlägst mich wegen dieser zusammengebastelten Lösung welche alles andere ist als OOP.
  Mit Zitat antworten Zitat
Delbor

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

AW: Gleiche Variablen-Namen

  Alt 8. Mai 2017, 18:55
Hi Hoika

Zitat:
Zitat:
die FPathlist-Felder werden jeweils im Frame und in der Mainform erzeugt und auch da zerstört.
Zitat:
Warum nicht nur im Frame?
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 unterbinden - das heisst, ich müsste alle diese Units bearbeiten.

Nach dem Schichtenmodell kann zwar die GUI auf die Logikschicht, zum Beispiel ein Datenmoudul, zugreifen, aber nicht umgekehrt. Das erspart bei Änderungen eine Menge arbeit.

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

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#4

AW: Gleiche Variablen-Namen

  Alt 8. Mai 2017, 19:08
Wenn der FileSearcher und am besten auch die ihm zugewiesenen EventHandler zum Frame gehören, würde ich die Stringliste auch als privates Feld (und ggf. Public ReadOnly-Property) des Frames deklarieren, dann ist alles schön beisammen und man kommt nicht durcheinander.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Delbor

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

AW: Gleiche Variablen-Namen

  Alt 8. Mai 2017, 19:27
Hi SneakyBagels
Zitat:
...wegen dieser zusammengebastelten Lösung welche alles andere ist als OOP.
Grundsätzlich sind lokale Variablen, die mit Prozedur- oder Funktionsaufrufen übergeben werden, absolut OOP-Konform.
Allerdings habe ich deinen Beitrag nicht wirklich ganz verstanden.


Zitat:
Auf diese Art und Weise schicke ich eine bei Programmstart erstellte Variableninstanz von Ini bis an die Stelle an der das Programm komplett geladen ist.
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 kein Non-OOP.
Zitat:
Verwendet wird diese Instanz von einer Hand voll Prozeduren. Eine globale Instanz kommt nicht in Frage, das immer immer neu-erstellen in jeder Prozedur ebenfalls nicht.
Das habe ich nicht ganz verstanden. Ich verstand das erstmal so, dass du da einen äüsserst gut ausgeklügeltes Aufruf- und Übergabeschema benötigst und allenfalls die Instanz an Prozeduren übergibst, die damit nichts anderes machen, als sie selbst weiterzugeben. Aber auch das ist nicht Non-OOP.
Das Erstellen (und zerstören!) von lokalen Instanzen in einer Prozedur wird in vielen Beispielen angewendet und macht durchaus Sinn, ist aber nicht in jedem Fall Zielführend.

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.196 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Gleiche Variablen-Namen

  Alt 8. Mai 2017, 19:51
Hi DeddyH
Zitat:
Wenn der FileSearcher und am besten auch die ihm zugewiesenen EventHandler zum Frame gehören, würde ich die Stringliste auch als privates Feld (und ggf. Public ReadOnly-Property) des Frames deklarieren, dann ist alles schön beisammen und man kommt nicht durcheinander.
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 ausliest.
So, wie ich Uwe Raabe aber verstanden habe, kann ich den FPathlist-Parameter des Frames problemlos an das private Feld FPathlist der Mainform zuweisen.
Ein vorgehen, dass mich auch in späteren Zeiten beim lesen meines Codes wohl immer etwas irritieren wird. Von daher wäre die Lösung mit dem Property wohl etwas klarer.

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

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#7

AW: Gleiche Variablen-Namen

  Alt 8. Mai 2017, 19:56
Also gibt es auch im Mainform eine entsprechende Liste? Dann ist eine 2. Instanz vermutlich Quatsch, da Du mit einer Public (jetzt aber nicht mehr ReadOnly) Property dasselbe erreichen kannst. Ich tippe hier am Tablet, sonst hätte ich mal schnell etwas Beispielcode geschrieben, so ist mir das aber zu mühsam.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Gleiche Variablen-Namen

  Alt 8. Mai 2017, 21:01
So, wie ich Uwe Raabe aber verstanden habe, kann ich den FPathlist-Parameter des Frames problemlos an das private Feld FPathlist der Mainform zuweisen.
Das habe ich so nicht gesagt! Es muss dann schon geklärt werden, wer da dann was frei gibt.

Besser wäre es, du würdest immer nur die Inhalte von einer StringList in die andere kopieren. Dann hast du auch keine Probleme. Möglicherweise musst du dazu aber noch an deiner Programmstruktur basteln.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
hoika

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

AW: Gleiche Variablen-Namen

  Alt 8. Mai 2017, 19:57
Hallo,
Zitat:
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 unterbinden - das heisst, ich müsste alle diese Units bearbeiten.
Dann nimm eine Globals-Unit, pack dort Deine Variablen rein (von mir aus auch als class var,
dann bleiben wir beim OOP)
die sowohl Main als auch der Frame benutzt.

Ansonsten ist das hier mit Kanonen auf Spatzen schießen.

Zitat:
dass ich vom Frame aus einen TNotifierEvent abfeuere
Und schon sind wir beim Event-Listener
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#10

AW: Gleiche Variablen-Namen

  Alt 8. Mai 2017, 20:15
Das ist aber doch keine Raketentechnik.
Delphi-Quellcode:
type
  TDingensFrame = class(TFrame)
  private
    FPathList: TStrings;
    ...
  public
    property PathList: TStrings read FPathList write FPathList;

...

procedure TDingensFrame.SomeEvent(Param: string);
begin
  if Assigned(FPathList) then
    FPathList.Add(Param);
end;
Jetzt kann das Formular der Frame-Property eine TStrings-Instanz zuweisen, und der nutzt dann diese. Damit gibt es nur eine Instanz, aber beide haben Zugriff darauf.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:27 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