AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE IF Assigned(EventMethode) zur DesignTime
Thema durchsuchen
Ansicht
Themen-Optionen

IF Assigned(EventMethode) zur DesignTime

Ein Thema von himitsu · begonnen am 6. Nov 2017 · letzter Beitrag vom 6. Nov 2017
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

IF Assigned(EventMethode) zur DesignTime

  Alt 6. Nov 2017, 14:48
Ich habe da ein winziges Problemchen,
Assigned liefert falsche Werte, also False obwohl es True sein müsste.

Minimalbeispiel:
Delphi-Quellcode:
type
  TMyComp = class(TComponent)
  private
    FTest: TNotifyEvent;
    function TestStored: Boolean;
  published
    property TestProp: TNotifyEvent read FTest write FTest stored TestStored;
  end;

function TMyComp.TestStored: Boolean;
begin
  Result := Assigned(TestProp);
end;
Wie kann ich zur DesignTime feststellen, ob irgendwas zugewiesen ist, wenn Assigned nicht hilft? (in einem Setter/Getter/StoredProc)

Wenn ich hier einen Setter an dem Property habe und da im ObjektInspector ein Event zuweise, dann wird der Setter auch aufgerufen.



Auch eine Prüfung ob ein bestimmtes Event zugewiesen ist (im Contructor zugewiesen und im OI überschreibbar) funktioniert da nicht.
Delphi-Quellcode:
function TMyConnection.BeforeConnectStored: Boolean;
begin
  Result := Assigned(BeforeConnect) and (TMethod(BeforeConnect).Code <> @TMyConnection.DoBeforeConnect);
end;

constructor TMyConnection.Create(Owner: TComponent);
begin
  inherited;
  BeforeConnect := DoBeforeConnect;
end;
Und nein, ich muß mich leider so an die Events hängen, da die Komponenten keine Möglichkeit einer überschreibbaren virtuellen Methode bietet.
(TPgConnection, aber der Schrott fängt schon bei DB Access von Devart an)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: IF Assigned(EventMethode) zur DesignTime

  Alt 6. Nov 2017, 16:08
Tritt das Problem nur zur Designtime auf?
in normalem Code kann ich es nicht nachvollziehen
Fritz Westermann
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: IF Assigned(EventMethode) zur DesignTime

  Alt 6. Nov 2017, 16:09
Delphi-Quellcode:
type
  TMyComp = class(TComponent)
  private
    FTest: TNotifyEvent;
    function TestStored: Boolean;
  published
    property TestProp: TNotifyEvent read FTest write FTest stored TestStored;
  end;

function TMyComp.TestStored: Boolean;
var
  MyTest: TNotifyEvent;
begin
  MyTest := Self.TestProp;
  Result := Assigned(MyTest);
end;
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.017 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: IF Assigned(EventMethode) zur DesignTime

  Alt 6. Nov 2017, 16:25
Ich check grad die Sinnhaftigkeit davon nicht.

Events werden doch eh nur in die dfm geschrieben, wenn sie assigned sind.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie ( 6. Nov 2017 um 16:27 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: IF Assigned(EventMethode) zur DesignTime

  Alt 6. Nov 2017, 16:25
Das scheint nur in der IDE zu passieren, für Komponenten auf der Form, welche Methoden der Form referenzieren.

Doch, ich schreibe sie zurück (unter bestimmten Voraussetzungen anderer Property), die Eigenschaft wird sogar gelesen und auch in die DFM geschrieben,
aber in Getter/Setter/StoredProc sagt Assigned es sei nichts zugewiesen, obwohl es das ist.

Wenn ich da fest True oder False in der StoredProc definiere, dann wird das Property gespeichert oder nicht.
Aber wie gesagt, das hier ist eine Kurzfassung für nen Testcode. Original hängt die StoredProc an z.B. einem String-Property, welches nur gespeichert wird, wenn auch das passende Event vorhanden ist.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 6. Nov 2017 um 16:30 Uhr)
  Mit Zitat antworten Zitat
4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#6

AW: IF Assigned(EventMethode) zur DesignTime

  Alt 6. Nov 2017, 16:59
schonmal geloggt bei was für ComponentState die TestStored aufgerufen wird?

aber brauchst du den aufruf von stored ?
warum geht nicht:
property TestProp: TNotifyEvent read FTest write FTest;// stored TestStored; ?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: IF Assigned(EventMethode) zur DesignTime

  Alt 6. Nov 2017, 17:32
aber brauchst du den aufruf von stored ?
Wenn die Einstellungen aus einer anderen Komponente übernommen werden, dann sollen sie bei dieser Komponente nicht (nochmal) in der DFM gespeichert werden.

StoredProc wird beim Speichern der Form aufgerufen
und beim Anzeigen des Property im ObjectInspector. (steuert dort, ob das Property fett geschrieben wird)

Bitte nicht darauf versteifen, dass im vereinfachten "Beispiel" das eine Property sich selber regelt, ob es gespeichert wird.
Und das Selbe passiert auch innerhalb der Setter und Getter.



Ich dachte Anfangs es wäre ein neueres Problem,

aber ich habe seit über einem Jahr auch einen Bereinigungscode, der ständig etwas löscht, obwohl es nicht passieren sollte.
Nur fand ich da nie raus warum. (hatte auch nicht so intensiv gesucht und das über einen Kommentar im SVN erledigt -> da rückgängig machen, wenn es fehlt < knallt beim Kompilieren und passiert nur selten ... hatte schon fast die Vermutung, dass wir irgendwo noch ein Stück alten Löschcode vergessen hatten, bei den letzten Aufräum-/Umbauaktionen dieser Codes > es gab mehrere Stellen wo sowas gemacht wurde und das wurde an einer Stelle zusammengefasst)
Da werden in DBGrids alte Columns gelöscht, welche man daran erkennt, dass kein FieldName zugewiesen ist, welcher beim DFM-Laden verschwindet, bzw. aus alten GridLayouts stammt, wenn im DataSet das TField fehlt.
Bei inaktivem Dataset wird Column.Fieldname in einem String gespeichert und ist das DataSet vorhanden/aktiv, dann wird intern TField.FieldName referenziert, was leer ist, wenn das Field fehlt)
Es gibt aber noch zwei Stellen, wo Columns mit Livedaten existieren, die nicht auf das DataSet verweisen und daran erkannt werden, dass dort ein bestimmtes Event zugewiesen ist -> hier auch das Problem mit dem Assigned.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 21:45 Uhr.
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