AGB  ·  Datenschutz  ·  Impressum  







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

Variablen einer Klasse auslesen

Ein Thema von Timmyew · begonnen am 10. Mai 2021 · letzter Beitrag vom 10. Mai 2021
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Variablen einer Klasse auslesen

  Alt 10. Mai 2021, 11:14
Du musst aber auch davon ausgehen, dass ebendiese TNotifyEvents schon belegt sind (ein TButton.OnClick, ein TForm.OnResize) weil da schonmal jemand was reinprogrammiert hat. In dem Fall musst du nehmen was im jeweiligen Event drinsteht, das dir wo wegspeichern, das Event auf deine eigene Routine zeigen lassen
Das könnte schwierig werden, wenn Events dynamisch im Programm zugewiesen werden bzw. Komponenten dynamisch erzeugt werden.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Variablen einer Klasse auslesen

  Alt 10. Mai 2021, 11:18
Zeiger des alten Events in Variable speichern, bevor man sich selbst registriert (überschreibt).
Und das dann im eigenen Event aufrufen.

(bei "dynamisch", wenn Deines nachher wieder vom Programm überschrieben wird, dann hast Problem)

Man könnte noch via TVirtualMethodInterceptor sich reinhängen, aber wäre ist wie einen Blauwal auf einen armen Spatzen zu werfen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.210 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Variablen einer Klasse auslesen

  Alt 10. Mai 2021, 12:12
Das könnte schwierig werden, wenn Events dynamisch im Programm zugewiesen werden bzw. Komponenten dynamisch erzeugt werden.
Ja, das kommt erschwerend hinzu.

Wenn der Anwendungsfall wirklich ist "Ich will mitloggen wenn der Hauptthread der Anwendung hängt" würde ich das trotzdem anders machen. Ich hatte so etwas mal angefangen, aber nie zu Ende geführt: Ich meine man konnte einen Thread erstellen der periodisch Messages an den Hauptthread sendet und wenn der nicht schnell genug antwortet konnte man den Stack des Hauptthreads zu dem Zeitpunkt feststellen und das dann loggen. Dann konnte man direkt sehen was sich aufgehangen hat.

Denn selbst wenn man jedes "OnChange"-Event mit seiner Ausführungszeit mitloggt, ich glaube nicht dass ich zuverlässig feststellen könnte, was denn nun diese lang hängende Aktion ausgelöst hat. Was wenn ich drei Frames mit jeweils einem "submitButton: TButton" drauf habe: Woher weiß ich jetzt, welches Absenden das Programm zum Hängen gebracht hat?
  Mit Zitat antworten Zitat
Timmyew

Registriert seit: 6. Jan 2020
7 Beiträge
 
#4

AW: Variablen einer Klasse auslesen

  Alt 10. Mai 2021, 12:16
Ich glaube das schweift jetzt ein bisschen aus ^^.

Ich möchte eigentlich nur wissen wie ich an die Variablen eines bestimmten Types komme und diese dann bearbeiten kann mithilfe der RTTI ^^.

Das Problem mit den Zeigern ist leicht zu lösen.

Die Zeitmessung basiert auf der QueryPerformanceCounter Funktion der Winapi.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Variablen einer Klasse auslesen

  Alt 10. Mai 2021, 12:27
MSDN-Library durchsuchenIsHungAppWindow (kennt man z.B. wenn Windows das Fenster ersetzt ... ja es wird quasi ersetzt durch ein anderes Fenster, mit dem letzten Screeshot dieses Fensters)

Standardmäßig agiert Windows, wenn das Fenster 5 Sekunden lang nicht reagiert, also auch die MessageQueue dessen Threads. (die Zeit könnte man in der Registry ändern)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.732 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Variablen einer Klasse auslesen

  Alt 10. Mai 2021, 12:40
Ich glaube das schweift jetzt ein bisschen aus ^^.
Das kommt hier häufiger vor.

Ich möchte eigentlich nur wissen wie ich an die Variablen eines bestimmten Types komme und diese dann bearbeiten kann mithilfe der RTTI ^^.
Mit RTTI kann man alle published Properties eines Objekts ermitteln und sie auch lesen und schreiben. Events sind nichts anderes als published Properties, die einen Methodenpointer speichern. Standardmäßig haben sie einen Namen, der mit "On" beginnt.

Vorgehensweise also:
  • alle Forms und darauf liegenden Controls durchgehen
  • deren published Properties durchgehen, (optional nur) alle, die mit "On" beginnen, weiterbehandeln
  • Per RTTI den Datentyp ermitteln und nur noch solche, die TNotifyEvent sind, weiterbehandeln.

Wenn ich mich recht erinnere, war das nicht weiter schwierig, wenn man mal die generelle Verwendung von RTTI verstanden hatte. Ich stecke da allerdings momentan nicht tief genug drin, um konkreten Code vorzuschlagen.

Ich finde die Idee übrigens gut.
Thomas Mueller
  Mit Zitat antworten Zitat
Timmyew

Registriert seit: 6. Jan 2020
7 Beiträge
 
#7

AW: Variablen einer Klasse auslesen

  Alt 10. Mai 2021, 14:32
Hey,

wollte mich nochmal bedanken .
Ich habe es so hinbekommen wie ich es haben wollte !

Gruß,
Timmy !
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
3.091 Beiträge
 
Delphi 12 Athens
 
#8

AW: Variablen einer Klasse auslesen

  Alt 10. Mai 2021, 19:08
Bei neuen Delphi's ist eine Lite Version des AQtime Profilers dabei.
Kann per Tools/GetIt installiert werden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Variablen einer Klasse auslesen

  Alt 10. Mai 2021, 19:46
Ist schon länger datei und war auf der Addon-CD, die man sich zum Setup von Emba runterladen konnte.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 05:45 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