Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 17 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 20.11.09
Prihlásený: 02.11.14
Príspevky: 241
Témy: 58
Bydlisko: Myjava
Príspevok NapísalOffline : 17.02.2011 18:21

Zaujimalo by ma, ci sa da, aby bola vykonana EVENT (procedura), ktora patri pod UNIT1, ju uskutocnit na UNIT2 ?

Priklad:
EVENT: FormCreate, na UNIT1
Kód:
procedure TForm1.FormCreate(Sender: TObject);
begin

end;


Da sa, aby bola tato procedura aj v UNIT2 ? Ak, nie ako sa riesi toto spojenie?







_________________
"Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 17.02.2011 21:24

ake spojenie myslis ?


Offline

Užívateľ
Užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 20.11.09
Prihlásený: 02.11.14
Príspevky: 241
Témy: 58
Bydlisko: Myjava
Príspevok Napísal autor témyOffline : 17.02.2011 22:25

Ide o tento komponet TMS Async32, co sa nan jeden uzivatel pytal http://www.pcforum.sk/rs-232-vt109347.html .

Problem je v tom, ze ten komponent mam umiestneny na Form1. A potreboval by som aj vo Form2 aby som mohol precitat ked mi pride novy bajt na RS232.
Komponent pracuje tak, ze po prijme noveho bajtu vykona EVENT _ OnRxChar, procedura -
Kód:
procedure TForm1.VaComm1RxChar(Sender: TObject; Count: Integer);
a samotny prikaz na precitanie prijateho bajtu je
Kód:
VaComm1.ReadText
.

Zatial to riesim takym sposobom, ze mam nastaveny casovac (TIMER) a ten pravidelne vzorkuju a cita stav portu, ibaze chcel by som odlachsit PC, tak by bolo dobre miesto casovaca (TIMER) aby nastala EVENT (procedura) po novom prijme (ako je to na FORM1).







_________________
"Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 18.02.2011 8:02

no toto asi iba tak ze v TForm1.VaComm1RxChar budes mat volanie procky z unitu2 cize v TForm1.VaComm1RxChar nacitas data z commportu a bud ich spracujes pre potreby form1 alebo ich volanim procky z uni2 posles do form2. apropo aj ine komponenty to riesia cez timmer takze s vytazenim pc by som si take starosti nerobil.


Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 18.02.2011 9:02

Ak som správne pochopil, chceš volať event triedy z jedného unitu v inom unite rovnakej triedy? Ak áno, tak skús spraviť nasledovnú vec, či to je to, čo chceš:

1.) Vytvor si nový projekt, a na formulár umiestni button, v ktorého OnClick evente bude:

Kód:
procedure TForm1.Button1Click(Sender: TObject);
begin

  ShowMessage( 'Text z prveho unitu..' );

end;

2.) V menu vyber vytvoriť nový form a do Unitu2 do uses pridaj Unit1.
3.) Na Form2 umiestni taktiež button
4.) Do OnCreate eventu Form2 pridaj:
Kód:
procedure TForm2.FormCreate(Sender: TObject);
begin

  Button1.OnClick := Form1.Button1.OnClick;

end;

5.) Nakoniec nastav v Object Inspectore pre oba formuláre Visible na true ( aby boli oba viditeľné hneď po štarte )

Spusť aplikáciu a po kliknutí na tlačidlo na jednom i druhom formulári sa vykoná rovnaká udalosť Button1 eventu z Form1. Ak si potreboval práve toto, tak máš postup, ako priradiť event druhej triede.


Offline

Užívateľ
Užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 20.11.09
Prihlásený: 02.11.14
Príspevky: 241
Témy: 58
Bydlisko: Myjava
Príspevok Napísal autor témyOffline : 18.02.2011 13:08

to coldak:
tak 1. moznost by sla :) , ibaze ja som to chcel mat pekne oddele jedna cast progrmu vo form1 druha cast vo form2, ... form5 takto by som to vsetko do form1 nabachal.
No ked nebude ine riesenie, necham to na tom TIMER, je tam cas 50 ms vzorkovania, je to OK pre PC ?

to Fico:
No ja som to trochu inak myslel, v Form1 by sa vykonala jedna instrukcia a v druhom Form2 by sa zas ina instrukcia vykonala. Pricom by ten komponet v Form1, vyvolal EVENT aj na tom Form2.


Inak povedane, dal by som prvok Edit1 na Form1, po zmene textu by sa vykonala EVENT na Form1
Kód:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  ShowMessage( 'Zmenil sa text EDIT, vyvolal 1. UNIT..' );
end;


A na Form2 by som chcel nech tiez mi vyvola EVENT - Edit1Change, pricom by bol iny prikaz vykonany napr:
Kód:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  ShowMessage( 'Zmenil sa text EDIT, vyvolal 2. UNIT..' );
end;


Cize vlastne obe hlasky by vyskocili po zmene textu v EDIT1, pricom tu 2. hlasku by vykonal 2 UNIT. Snad som to dobre vysvetlil :roll:







_________________
"Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek
Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 18.02.2011 13:50

Tak to potom môžeš volať jeden event z toho druhého:

Kód:
procedure TForm2.Edit1Change(Sender: TObject);
begin

  ShowMessage( 'Zmenil sa text EDIT, vyvolal 2. UNIT..' );

end;


uses Unit2;
Kód:
procedure TForm1.Edit1Change(Sender: TObject);
begin

  ShowMessage( 'Zmenil sa text EDIT, vyvolal 1. UNIT..' );
  Form2.Edit1Change( Sender );

end;


Nebude to už systémové volanie, ale neviem, či sa dá nastaviť objektu viac ako jedna obsluha na jeden event.


Offline

Užívateľ
Užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 20.11.09
Prihlásený: 02.11.14
Príspevky: 241
Témy: 58
Bydlisko: Myjava
Príspevok Napísal autor témyOffline : 18.02.2011 14:23

Ak by si mohol, poslal by si mi to v projekte, pretoze presne som asi nepochopil co kde dat a nechce mi to skompilovat.

Urobil som to takto, na Form1 som dal EDIT1 a na Form2 nic som nepridava.

Unit1:
Kód:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit2, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure Edit1Change(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
begin
  ShowMessage( 'Zmenil sa text EDIT, vyvolal 1. UNIT..' );
  Form2.Edit1Change(Sender);
end;

end.



Unit2:
Kód:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm2 = class(TForm)
    Edit1: TEdit;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Edit1Change(Sender: TObject);
begin

  ShowMessage( 'Zmenil sa text EDIT, vyvolal 2. UNIT..' );

end;

end.


Co som zle spravil?







_________________
"Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek
Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 18.02.2011 14:28

Do definície typu triedy TForm2 si nedal funkciu Edit1Change:

Kód:
type
  TForm2 = class(TForm)
    Edit1: TEdit;
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Edit1Change(Sender: TObject);
  end;


Offline

Užívateľ
Užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 20.11.09
Prihlásený: 02.11.14
Príspevky: 241
Témy: 58
Bydlisko: Myjava
Príspevok Napísal autor témyOffline : 18.02.2011 14:54

Opat velka vdaka Fico.
Uz mi to ide pod tym komponetom TMS Async32, aspon sa o nieco odlahsi PC a nieco nove som sa naucil.

EDIT:
To volanie je asi ako rychle? Potreboval by som aspon do 50ms, to snad je?







_________________
"Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek
Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 18.02.2011 15:50

Volanie prebehne okamžite po ukončení celého kódu pred ním

Kód:
  (*
   * vsetok kod v prvom evente, ktory sa ma vykonat
   *)
  Form2.Edit1Change(Sender);


Čiže najprv sa vykoná jeden potom druhý. Ak potrebuješ, aby bežali takmer súčasne oba eventy, môžeš použiť vlákna, ale daj pozor na synchronizáciu, ak pracuješ s rovnakými dátami.


Offline

Užívateľ
Užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 20.11.09
Prihlásený: 02.11.14
Príspevky: 241
Témy: 58
Bydlisko: Myjava
Príspevok Napísal autor témyOffline : 18.02.2011 15:55

OK, nepotrebujem sucastne aby pracovali. Takto to plne vyhovuje.


Teraz ma napadla taka vec (mimo temy) ako sa da v Delphi urobit oneskorenie radovo us? pretoze sleep/ timer, vsetko je od 1 ms







_________________
"Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek
Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 18.02.2011 16:20

Skús pozrieť, neskúšal som to:
http://www.swissdelphicenter.ch/torry/printcode.php?id=1727

Ale myslím, že tak malé oneskorenie ani nie je nutné, môžeš rovno pokračovať bez čakania, prípadne si sprav krátku slučku for s prázdnym telom.


Offline

Užívateľ
Užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 20.11.09
Prihlásený: 02.11.14
Príspevky: 241
Témy: 58
Bydlisko: Myjava
Príspevok Napísal autor témyOffline : 18.02.2011 18:26

Zaujimave riesenie, vies mi aj vysvetlit ako to funguje. Mne to pripada, ze na zaklade taktu prepocita pocet instrukcii a tym vyde to oneskorenie, alebo sa mylim ?







_________________
"Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 18.02.2011 22:03

presne tak riesit kratke cakanie nema zmysel, aj tak ho nedokazes vykonat presne, nakolko samotna rezia na take nieco zaberie viac casu. a musis si uvedomit ze tam mas preemptivny multitasking cize tvoj proces nieje vykonávaný kontinualne ale raz za cas mu je prideleny procesorovy cas a interval pristupu k procesoru je rozny v zavyslosti od aktualneho poctu prave beziacich procesov a ich priorit.


Offline

Užívateľ
Užívateľ
[Delphi] prenesenie EVENT na cudzi UNIT

Registrovaný: 20.11.09
Prihlásený: 02.11.14
Príspevky: 241
Témy: 58
Bydlisko: Myjava
Príspevok Napísal autor témyOffline : 19.02.2011 11:35

To je pravda, len zaujimalo by ma, ked su rozne meracie zariadenia, ktore musia mat pristup na port aj 1 E+5 za 1 sek, ako je to riesene, zvysia si prioritu, ale aj tak multitasking to nezastavi ?







_________________
"Digitálna technika pozostáva len z 0 a 1, ktoré sú v správny čas na správnom mieste." M. Valášek
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 19.02.2011 16:17

citanie z portu funguje tak ze si vytvoria vlakno ktore si otvori port a snazi sa z neho nieco nacitat, cize caka na nejake data kym netimeoutuje, po timeoute si bud nieco kratke vykona alebo sa hned zase pokusi citat z portu a zase pokial netimeoutuje. vdaka timeout nemusi tak casto skusat.


Odpovedať na tému [ Príspevkov: 17 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Delphi: rozdiel unit a library

v Delphi, Visual Basic

3

912

02.08.2009 0:46

Loko11 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. požiadavka na cudzí server

v JavaScript, VBScript, Ajax

5

454

07.07.2011 14:00

coldak Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. FB - nemôže mi cudzí ludia likovať fotku

v Sociálne siete

10

591

05.05.2014 18:46

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. delphi zapis cisla do editu v delphi

v Delphi, Visual Basic

3

1105

11.05.2008 12:02

p360t Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. unit TJPEGImage

v Delphi, Visual Basic

9

730

06.06.2011 12:02

coldak Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. G-unit koncert

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Akcie, zrazy, festivaly, koncerty

35

2436

13.10.2007 13:07

Libor Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. [Lazarus] Fatal: Circular unit reference

v Assembler, C, C++, Pascal, Java

2

335

13.06.2013 22:15

Redpoint1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. event script

v JavaScript, VBScript, Ajax

1

592

24.11.2010 18:40

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Event 41

v Operačné systémy Microsoft

12

541

29.01.2020 17:53

aX1s Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pascal:problem s otvaranim Unit subormi

v Assembler, C, C++, Pascal, Java

6

953

28.06.2008 2:11

Roberbo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Prenesenie miesta

v Operačné systémy Unix a Linux

3

428

17.10.2010 20:01

Nanosonda Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Prenesenie fora

v Ponuka práce

5

1483

01.09.2006 9:37

wix Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. prenesenie programu

v Ostatné programy

4

479

19.03.2011 18:38

Rayiner Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Prenesenie programu

v Ostatné programy

2

271

13.12.2013 8:53

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. jQuery click event

v JavaScript, VBScript, Ajax

3

349

01.10.2013 22:18

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Metropolitan Police Central e-crime Unit {mpceu}

v Antivíry a antispywary

4

606

22.03.2012 9:24

tombi Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra