Name eines Objektes ermitteln [Erledigt]

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
psp
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 250
Registriert: Do, 22. Okt 2009 13:42
Kontaktdaten:

Name eines Objektes ermitteln [Erledigt]

Beitrag von psp »

Hallo,

nach kurzer Suche hier im Forum und auf dem Alaska-Newsserver sehe ich meine Frage nicht beantwortet. Die Referenzhilfe ist auch nicht sehr erquickend. Ich möchte gerne den Namen eines Objektes ermitteln.

Code: Alles auswählen

CLASS PSPDialog FROM XbpDialog
   EXPORTED:
     VAR Pos, Size, Minimized, Name
   INLINE Method Init( oParent, oOwner, aPos, aSize, aPP, lVisible )
     ::xbpDialog:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
     ::resize:={|aOldSize, aNewSize, self| self:lockupdate(.T.), func_TeilDlg_resize(self, aOldSize, aNewSize), oDlg:invalidateRect(), Schriftgroesse(self, aOldSize, aNewSize), self:lockupdate(.F.), self:invalidateRect() }
     ::Name:=var2char(self)
     ::icon:=120
     ::Minimized:=.F.
     ::Pos:=aPos
     ::Size:=aSize
   RETURN self
ENDCLASS
In der Zeile

Code: Alles auswählen

     ::Name:=var2char(self)
würde ich gerne den Namen des Objektes vermerken, damit ich in der Create()-Methode und Destroy()-Methode noch etwas mehr mit dem Dialogfenster machen kann. Natürlich nur in Abhängigkeit vom Namen. Doch mit ebendieser Geschichte steht erfahrungsgemäß nun PSPDialog in der Variable Name, was mir natürlich nicht wirklich weiter hilft. Der Grund für diese Vereinfachung liegt in der Vielzahl der Programme und Dialogfenster, die ich sonst per Hand abändern müsste. Dies macht bei 200+ einzelnen Programmdateien mit jeweils 1-15 einzelnen Dialogfenstern keinen Spaß. Vielleicht hat ja noch jemand einen Hinweis für mich, wo ich etwas übersehen habe.
Zuletzt geändert von psp am Do, 22. Jul 2010 13:33, insgesamt 1-mal geändert.
J.Renseler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Do, 15. Nov 2007 11:40
Wohnort: Krefeld
Kontaktdaten:

Re: Name eines Objektes ermitteln

Beitrag von J.Renseler »

Nur zum Verständnis, du möchtest also den Namen der Variable haben in der du dein Objekt gespeichert hast?
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
psp
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 250
Registriert: Do, 22. Okt 2009 13:42
Kontaktdaten:

Re: Name eines Objektes ermitteln

Beitrag von psp »

Genau, ohne dass ich ihn an das Objekt im Klartext in die Cargo-Variable bzw. die neue Name-Variable speichere.
J.Renseler
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 151
Registriert: Do, 15. Nov 2007 11:40
Wohnort: Krefeld
Kontaktdaten:

Re: Name eines Objektes ermitteln

Beitrag von J.Renseler »

*hmm* Von welchem Typ sind die Variablen ? Public, Private, Local, Static?

Spontan fällt mir dafür kein Weg ein, für PUBLIC und PRIVATE bekommst du über SymbolInfo() eine Liste aller verfügbaren Variablen.

Wofür benötigst du überhaupt den Variablennamen?

Gruß,
Jannik
Kassensysteme für den Einzelhande http://ab-software.de
Mitglied der XUG-Cologne http://www.xug-cologne.de
psp
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 250
Registriert: Do, 22. Okt 2009 13:42
Kontaktdaten:

Re: Name eines Objektes ermitteln

Beitrag von psp »

Das Dialog-Objekt ist in dem jeweiligen Programm als Private vordeklariert.

Im Programm wird eine einheitliche Struktur bei den Namen verwendet.

oDlg -> Hauptfenster
oTeilDlg -> MDI-Fenster
oSubDlg/oSuchDlg/oMemoDlg usw. -> per XBP_DISP_APPMODAL an das dazugehörige oTeilDlg gebunden

Mit der PSPDialog-Klasse ersetze ich die XbpDialog-Klasse und gebe jedem Fenster ein paar Dinge zusätzlich auf dem Weg, das sollte soweit verständlich sein. Wenn ich den Namen des abgeleiteten Objektes zur Erstellzeit kennen würde, könnte ich ohne Aufwand in der Create()-Methode ein WinMenu():additem(oTeilDlg) machen und bei der Destroy-Methode ein WinMenu():delItem(oTeilDlg). Dies sind nur ein paar Beispiele, angedacht sind noch weitere Dinge. Damit ich ein brauchbares Fenstermanagement hinbekommen kann. Die Sub-Dialoge sollen davon ausgeschlossen sein. Ich will mir nur das Durchackern der vielen Programme ersparen.
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9367
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 102 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Name eines Objektes ermitteln

Beitrag von Tom »

Hallo, psp.

Ich glaube nicht, dass der Name der Objektvariablen, der die Instanz einer Klasse zugewiesen wird, z.B. innerhalb der Methode :Init() bekannt ist. Wie auch? Die Objektvariable enthält eine Referenz auf die Instanz der Klasse, nachdem diese entstanden ist.

Wenn ich Dich richtig verstehe, erzeugst Du immer eine Instanz Deiner Klasse PSPDialog. Wenn das Ergebnis einer Variablen oDlg zugewiesen wird, soll nichts weiter geschehen, weil es sich um das Hauptfenster handelt. Wenn das Ergebnis aber oTeilDlg heißt (oder zwischen dem Präfix "o" und dem Suffix "Dlg" irgendeinen anderen Text enthält), müssen in Init() und Destroy() zusätzliche Methoden aufgerufen werden. Da beides einige hundert Mal geschieht bzw. bereits so im Code vorhanden ist, suchst Du nach einer schnellen Möglichkeit, beide Varianten unterscheiden zu können.

Mmh. Nach meinem Dafürhalten bestünde die einfachste Möglichkeit darin, einen weiteren Parameter (iVar) für die Klasse einzuführen. Entsprechende Textzeilen im Code sollten sich über regular expressions finden lassen, wenn Dein Editor das hergibt.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12909
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 46 Mal

Re: Name eines Objektes ermitteln

Beitrag von AUGE_OHR »

psp hat geschrieben:Das Dialog-Objekt ...
... Damit ich ein brauchbares Fenstermanagement hinbekommen kann. Die Sub-Dialoge sollen davon ausgeschlossen sein. Ich will mir nur das Durchackern der vielen Programme ersparen.
Namen sind für Menschen ... Nummern für Maschinen ;)

1.) nimm alle Dialog Objekt in ein 2-Dim Array auf
2.) verwende :getHWND() als 2nd Element

dito für Thread verwende ThreadID() und "koppel" den Dialog an den Thread

wenn du unbedingt "Namen" haben möchtest kann man :setName() verwenden ...mit #define

p.s. was ist mit oDialog:Title ? üblicherweise wird damit ein "Fenster", z.b. im Taskmanager, "identifiziert"
gruss by OHR
Jimmy
psp
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 250
Registriert: Do, 22. Okt 2009 13:42
Kontaktdaten:

Re: Name eines Objektes ermitteln [Erledigt]

Beitrag von psp »

Hab mir die Mühe gemacht, bei 117 Dialogfenstern den Namen auf "oTeilDlg" gesetzt, nachdem man dem Dialogfenster die Eigenschaft Name beigebracht hat.

Damit konnte ich ebenfalls einen Resize-Codeblock mit hinterlegen, das Fenster-Management mit WinMenu():additem(oTeilDlg) funktioniert nun wie gewünscht. Jetzt muss das Multi-Threading noch besser arbeiten und ich bin glücklich.
Antworten