Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Button.OnClick Procedure aus DB lesen? (https://www.delphipraxis.net/197363-button-onclick-procedure-aus-db-lesen.html)

strom 2. Aug 2018 04:22

Button.OnClick Procedure aus DB lesen?
 
Hallo,

ist es möglich die OnClick (Event) aus einer DB zu lesen?


Vielleicht so? :roll:
Delphi-Quellcode:
Button1.OnClick := Tabel1.FieldByName('Funktion').Text;

Der schöne Günther 2. Aug 2018 06:09

AW: Button.OnClick Procedure aus DB lesen?
 
Delphi ist keine Skriptsprache. Die Ereignis-Behandler müssen von dir geschriebener Code sein der sich in der erstellten .exe-Datei befindet. Du kannst hingegen in der Datenbank hinterlegen welche der von dir geschriebenen Handler benutzt werden soll.

Delphi-Quellcode:
var
   onClickName: String;
begin
   onClickName := Tabel1.FieldByName('Funktion').AsString;
   
   if (onClickName = 'spezial') then
      Button1.OnClick := onClickSpezial
   else if (onClickName = 'super-spezial') then
      Button1.OnClick := onClickSuperSpezial
   else
      Button1.OnClick := onClickNormal;
end;

strom 2. Aug 2018 07:06

AW: Button.OnClick Procedure aus DB lesen?
 
ah :-D

super, danke für Deine Hilfe

TigerLilly 2. Aug 2018 07:51

AW: Button.OnClick Procedure aus DB lesen?
 
Hmmm. Ich hab das noch nicht ausprobiert, aber das da
http://www.malcolmgroves.com/blog/?t...nymous-methods
behandelt Anonyme Funktionen wie Daten. Und Daten bekomme ich in die Datenbank +kann sie von dort lesen. 8-)

Das da ist auch hilfreich:
https://stackoverflow.com/questions/25500770/is-there-a-way-in-delphi-to-assign-an-anonymous-method-to-a-button-event?rq=1


Solltest du da was ausprobieren, lass es uns wissen.

himitsu 2. Aug 2018 10:06

AW: Button.OnClick Procedure aus DB lesen?
 
Zitat:

ist es möglich
JaNein.

Methoden sind Zeiger. (eigentlich Zwei, aber wenn du das Objekt kennst, dann nur noch Einer)
Die Namen sind "eventuell" in der TypeInfo und RTTI hinterlegt und man kann darüber den Zeiger bekommen.
Delphi-Referenz durchsuchenSystem.TMethod (Code = der Methoden-Zeiger und Data = die Object-Referenz, was in der Methode dann das Self ist)

Das Delphi-Referenz durchsuchenTObject.MethodAddress und Delphi-Referenz durchsuchenTObject.MethodName nutzt z.B. der DFM-Reader (Delphi-Referenz durchsuchenTReader/Delphi-Referenz durchsuchenTWriter) und es geht natürlich nur für Methoden, die published sind.
Und dann gibt es noch Einiges in den Units TypInfo und RTTI.

freimatz 2. Aug 2018 10:41

AW: Button.OnClick Procedure aus DB lesen?
 
Zitat:

Zitat von TigerLilly (Beitrag 1409453)
http://www.malcolmgroves.com/blog/?t...nymous-methods
behandelt Anonyme Funktionen wie Daten. Und Daten bekomme ich in die Datenbank +kann sie von dort lesen. 8-)

Na ja stenggenommen werden nicht die Methoden in der DB gespeichert sondern nur Keys dazu. Zur Kompilierzeit muss der Code also schon bekannt sein.

Wenn man wirklich den Code speichern möchte, dann geht das IMHO nur wenn man eine Art Plugin-System implementiert was man mit DLLs oder BPLs machen kann und dann kann man diese dann als BLOB speichern. (Wobei ich mir jetzt keine sinnvoll Anwendung vorstellen kann)

Oder man implementiert halt doch eine Scriptsprache ins Programm und speichert die Scripts.

Delphi.Narium 2. Aug 2018 14:56

AW: Button.OnClick Procedure aus DB lesen?
 
Wenn man ins Programm PascalScript von RemObjects einbaut, sollte sowas möglich sein.

Man braucht dann halt ein Script, dass man kompilieren und ausführen kann. Diese Scripts kann dan auch Ereignisroutinen enthalten, die man diversen Komponenten im Programm zuweisen kann.

Ein ganz banales Beispiel, dass dem DataSet meines Editors 'ne AfterScroll-Routine zuweist wäre:
Delphi-Quellcode:
program Test;

procedure MachWas(DataSet: TDataSet);
begin
  Status(DataSet.Fields.Fields[0].AsString);
end;

begin
  DataSet.AfterScroll := @MachWas;
end.
Ab jetzt wird beim Scrollen durch die Datenmenge in der Statuszeile der Inhalt des ersten Feldes des aktuellen Datensatzes angezeigt.

Das kann man analog auch mit jeder anderen Komponenten machen.

Wenn man also in der Datenbank ein Script hat, das sowohl die Ereignisroutinen, als auch deren Zuweisung enthält, kann man das gewünschte umsetzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 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