Autor Téma: Dynamická událost  (Přečteno 7226 krát)

Offline jiimdk

  • Příspěvků: 6
  • Karma: 0
    • Verze Delphi: 7
Dynamická událost
« kdy: 10-03-2014, 20:37:02 »
Zdravím ve spolek,
nevíte někdo jak do události onclick  na tlačítko přidat dynamicky kód?
Příklad: vytvořím si v programu toolbox s tlačítky, třeba takto
http://docwiki.embarcadero.com/CodeExamples/XE2/en/TToolButtonCreate_(C%2B%2B)
http://docwiki.embarcadero.com/CodeExamples/XE2/en/TToolButtonCreate_(Delphi)
a nevím jak si do nich přidat události po kliku, které mám uložené v externím souboru.
Píšu to v c++ ale klidně i návod v delphi by mi stačil


Díky za odpověď

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 562
  • Karma: 23
Re:Dynamická událost
« Odpověď #1 kdy: 10-03-2014, 21:29:14 »
Jednoduše ne, v takových jazycích tam musíš dát nějakou existující metodu. Ale mohl bys tam pak třeba zavolat něco z externího dll nebo použít něco, co dokáže interpretovat nějaký skript (teď si ale žádnou knihovnu pro Delphi nevybavuji). Co konkrétně se snažíš dělat?

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 29
    • Verze Delphi: 7, 2009, XE3
Re:Dynamická událost
« Odpověď #2 kdy: 11-03-2014, 03:09:54 »
...např. Pascal Script... ;)

Offline jiimdk

  • Příspěvků: 6
  • Karma: 0
    • Verze Delphi: 7
Re:Dynamická událost
« Odpověď #3 kdy: 11-03-2014, 07:44:18 »
Konkrétně se snažím udělat IDE pro KIVY s možností přidávat si  vlastní komponenty. Mám to vymyslené pomocí speciálního strukturovaného souboru a narazil sem na to že neumím do vytvořeného tlačítka vložit kód. 

Offline jiimdk

  • Příspěvků: 6
  • Karma: 0
    • Verze Delphi: 7
Re:Dynamická událost
« Odpověď #4 kdy: 11-03-2014, 08:13:17 »
Možná to zkusím vyřešit unikátníma "caption" a řídit se podle nich

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1252
  • Karma: 28
    • Pepak.net
Re:Dynamická událost
« Odpověď #5 kdy: 11-03-2014, 08:33:29 »
Nejjednodušší by to bylo s DLL knihovnou - v DLL exportuješ nějakou proceduru, v obsluze tlačítka si načteš DLL (LoadLibrary), načteš adresu procedury (GetProcAddress) a pak tu proceduru zavoláš. Triviální a přitom snadno použitelné.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1650
  • Karma: 68
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (teď XE8 a XE10)
    • O Delphi v češtině
Re:Dynamická událost
« Odpověď #6 kdy: 11-03-2014, 09:07:11 »
Já stále nechápu co chceš dělat. Kivy myslíš tohle ? http://en.wikipedia.org/wiki/Kivy.

To znamena ze v externim souboru mas nejaky Python kod a ten chces zavolat?
Embarcadero MVP - Czech republic

Offline jiimdk

  • Příspěvků: 6
  • Karma: 0
    • Verze Delphi: 7
Re:Dynamická událost
« Odpověď #7 kdy: 11-03-2014, 09:17:41 »
Já mám nějaké memo a dookola tlačítka, po kliku se mi do mema vepíše python kód. Teď je tam natvrdo, ale to se mi moc nelíbí, tak sem tu udělal strukturu kterou čtu ze souboru a podle toho se mi vytvářejí tlačítka, ale zatím nedokážu nějak inteligentně vepsat do tlačítek události, ale mám určitou myšlenku : udělám si funkci která se zavolá a argument bude název. Snad to bude fungovat :)

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1650
  • Karma: 68
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (teď XE8 a XE10)
    • O Delphi v češtině
Re:Dynamická událost
« Odpověď #8 kdy: 11-03-2014, 09:29:34 »
Tlačítko má property Tag.

Při vytváření tlačítek ze souboru si (např.) vytvoř TStringList, a jakmile máš vytvořit tlačítko, přidej si do listu ten Python kod, a do Tag tlačítka dej index do toho listu.
Všechny tlačítka mají společnou obsluhu a v ní se podíváš na tag (přes sender) a tím máš index do listu těch python kodů a voilá máš ten kod.

to byl přiklad řešení
Embarcadero MVP - Czech republic

Offline jiimdk

  • Příspěvků: 6
  • Karma: 0
    • Verze Delphi: 7
Re:Dynamická událost
« Odpověď #9 kdy: 11-03-2014, 09:31:40 »
Hmm velmi zajímavé řešení, hned večer to vyzkouším :)
Díky!!

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 29
    • Verze Delphi: 7, 2009, XE3
Re:Dynamická událost
« Odpověď #10 kdy: 11-03-2014, 12:43:02 »
Property Tag měli dávno z VCL vyhodit. Viděl jsem už pár "řešení" používajících tuto všemocnou property a popravdě bych za ně střílel.

Offline jiimdk

  • Příspěvků: 6
  • Karma: 0
    • Verze Delphi: 7
Re:Dynamická událost
« Odpověď #11 kdy: 11-03-2014, 13:23:23 »
:) Abych pravdu řekl nikdy sem nevěděl jaký má "tag" účel

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1252
  • Karma: 28
    • Pepak.net
Re:Dynamická událost
« Odpověď #12 kdy: 11-03-2014, 13:25:06 »
:) Abych pravdu řekl nikdy sem nevěděl jaký má "tag" účel
Účel Tagu je nabídnout property, které mají všechny komponenty a které si uživatel může použít k předávání svých dat. Nevidím na něm nic špatného, problém je akorát to, když tvůrce komponent Tagu přiřadí konkrétní význam.

Offline TLama

  • Guru
  • *****
  • Příspěvků: 597
  • Karma: 29
    • Verze Delphi: 7, 2009, XE3
Re:Dynamická událost
« Odpověď #13 kdy: 11-03-2014, 13:53:28 »
Nevidím na něm nic špatného, problém je akorát to, když tvůrce komponent Tagu přiřadí konkrétní význam.

Vyznat se ve změti kódu využívající Tag stejného typu komponent pro 5 různých účelů na průplesk je.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 1650
  • Karma: 68
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (teď XE8 a XE10)
    • O Delphi v češtině
Re:Dynamická událost
« Odpověď #14 kdy: 11-03-2014, 14:06:40 »
Já Tag používám opatrně, ale v tomto případě je to nejjednoduší a celkem čisté řešení. Nevidím na občasném použítí Tag nic špatného a zvláště u dynamických komponent je to zajímavá možnost.

Mimochodem během beta testu XE2 se uvažovalo zda má být Tag jen 32bit nebo NativeInt (tj. že pro 64bit by byl 64bit) a v podstatě valná většina testerů tlačila na to, aby byl nativeInt - a já s tím souhlasím :-). To jen pro zajímavost.
Embarcadero MVP - Czech republic

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Upozornění: do tohoto tématu bylo naposledy přispěno před 120 dny.
Zvažte prosím založení nového tématu.

Jméno: E-mail:
Ověření:
Datový typ v Delphi, který má True a False: