Calling onclick eljárás modul

Hívjon OnClick eljárás modul

Hello, kedves mester.

Van egy forma Form1. Abban forma két gomb. Ott Unit2 egység (forma nélkül).

felhasználások
# XA0; Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
# XA0; Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

típus
# XA0; TForm1 = osztály (TForm)
# XA0; # XA0; Button1: TButton;
# XA0; # XA0; Button2: TButton;
# XA0; # XA0; eljárással Button1Click (Sender: TObject);
# XA0; # XA0; eljárással Button2Click (Sender: TObject);
# XA0; magán-
# XA0; # XA0;
# XA0, köz-
# XA0; # XA0;
# XA0; end;

var
# XA0; Form1: TForm1;

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
# XA0; Test;
végén;

eljárás TForm1.Button2Click (Sender: TObject);
kezdődik
# XA0; ShowMessage ( "Button2Click");
végén;

eljárás Test;
kezdődik
# XA0; Form1.Button2Click (Form1);
végén;

eljárás Teszt (Sender: TObject);

eljárás Teszt (Sender: TObject);
kezdődik
# XA0; Form1.Button2Click (feladó);
végén;

Nos, és ennek megfelelően a hívás vizsgálati eljárás a következő:

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
# XA0; Test (Self);
végén;

1. Magyarázd, kérjük népszerű a különbség:

Form1.Button2Click (feladó); // Csak akkor, ha ez az eljárás nyilvánították: eljárás Test (Sender: TObject);
Form1.Button2Click (Form1);
Form1.Button2Click (nulla);
Form1.Button2.Click;

2. Van-e szükség, hogy állapítsa meg, mint azt az eljárást teszt (Sender: TObject)?

Nem helyességét, de húrok
Form1.Button2Click (feladó); // Csak akkor, ha ez az eljárás nyilvánították: eljárás Test (Sender: TObject);
Form1.Button2Click (Form1);
Form1.Button2Click (nulla);

Hatására a felvezető módszer onclick esemény, amelyet át érvként, hogy a zárójelben

És miért van rá szükség? Az ilyen utasítás híváskezelők - rossz kód.

Form1.Button2.Click;
Módszer fogják hívni Click, amelyen belül különösen az úgynevezett onclick kezelő, mikor nevezték ki, és az argumentum felvezető egy példánya a Button2

Nagyon köszönöm a válaszát.
Ie jobb kihasználása Form1.Button2.Click; ?

Mert mi haszna? Kézi elindítása gombra kattintva az eseményt?

Nem egészen.
Az én esetemben, van egy pár gomb, amelyek rögzített néhány fellépés nagy számban (ezért van, hogy ezek a gombok felvezető kell egy külön modul bontja fel külön eljárások, stb.)
Tehát, néha szükség van, hogy okozhat felvezető onclick egy másik gombot, amely lehet kapcsolni a gombnyomásra.
Ie Nem érdekel, amikor a gomb esemény maga, és egy algoritmus cselekvések, amely hozzá van rendelve ezt a gombot.

Annak érdekében, hogy tisztább, adok egy példát.

Van egy globális változó, például perem: integer;

Az eljárás Unit2 rögzített, például a következő:

eljárás Teszt (Sender: TObject);
kezdődik
A Form1 do
# XA0; esetén perem a
# XA0; 1: // tenni valamit
# XA0; 2: // tenni valamit
# XA0;.
# XA0; 50: Button2Click (Form1);
# XA0;.
# XA0; 100: // tenni valamit
végén;
végén;

AZL. ha
> Fontos, hogy nem magától gomb click esemény, és az algoritmus
> Action, amely hozzá van rendelve ezt a gombot.
az
> Annak érdekében, hogy tisztább, adok egy példát.
típus
# XA0; TForm1 = osztály (TForm)
# XA0; # XA0; Button1: TButton;
# XA0; # XA0; Button2: TButton;
# XA0; # XA0; Button3: TButton;
# XA0; # XA0; eljárással Button1Click (Sender: TObject);
# XA0; # XA0; eljárással Button2Click (Sender: TObject);
# XA0; # XA0; eljárással Button3Click (Sender: TObject);
# XA0; magán-
# XA0; # XA0;
# XA0, köz-
# XA0; # XA0;
# XA0; # XA0; eljárással Raz ();
# XA0; # XA0; eljárással Dva ();
# XA0; # XA0; eljárással Tru ();
# XA0; end;

var
# XA0; Danc123: TForm1;

eljárás TForm1.Raz;
kezdődik
# XA0; // Raz-raz-raz
# XA0; Dva;
# XA0; Tru;
végén;

eljárás TForm1.Dva;
kezdődik
# XA0; Raz;
# XA0; // DVA-dva-dva;
# XA0; Tru;
végén;

eljárás TForm1.Tru;
kezdődik
# XA0; Raz;
# XA0; Dva;
# XA0; // Tru-tru tru-;
végén;

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
# XA0; Raz;
végén;

eljárás TForm1.Button2Click (Sender: TObject);
kezdődik
# XA0; Dva;
végén;

eljárás TForm1.Button3Click (Sender: TObject);
kezdődik
# XA0; Tru;
végén;
végén.

Megértették? és megoldja a problémát, vagy beszélni „Sender” # XA0 és "Unit2"?

> A gombnyomásra OnClick felvezető felajánlott egy másik gombot

Külön modulként Self nem működik, ahelyett, hogy a Self kell írni a nevét a formában. Például, Form1.Button2Click (Form1);
És ez működik. Ezért úgy gondolom, hogy a téma lehet zárni.


> Egy rossz ötlet.

Az angol gyenge. Meg kéne „t használni a két határozatlan névelő egy sorban.

Bevallom, az intézet is oly gyakran tette. De most már értem, hogy ha „a gombnyomásra OnClick felvezető felajánlott egy másik gombot,” ez nyilvánvalóan rosszul átgondolt építészet. Azonban, ha ez a „home projekt programozó» ™, akkor és jön le, amit akar.
És mégis, mit nem elégedett Form1.Button2.Click; vagy Form1.Button2Click (Nil); (Alapértelmezett Nos Sender nem használt)?

> A válasz Jurij Zotov [19]

És ez csak az, hogy ha véghezvinni ezt a helyet, hogy bölcs dolog, hogy nem Form1.Button2Click (Form1.Button2);


> Form1.Button2Click (küldő); // Csak akkor, ha ez az eljárás
> Nyilvánították: eljárás Teszt (Sender: TObject);
> Form1.Button2Click (Form1);
> Form1.Button2Click (nulla);
> Form1.Button2.Click;
>

Govnokod vezető memória hozzáférési hiba.

Újrafelhasználható kód készül külön eljárások / függvények. Bár, h # 235; d-I. az alapokat kért nem is beszélve.


> De most már értem, hogy ha a „hívás által egyetlen gomb megnyomásával
> Onclick kezelő egy másik gombot, „ez nyilvánvalóan rosszul átgondolt
> Építészet.

Úgy tűnik, szükséges volt, hogy nevét a téma egy másik utat. Pontosabban talán lehet nevezni: „az eljárás hívása paraméter (Sender: TObject) a modul forma nélkül.” Mivel nincs só OnClick, nevezetesen (Sender: TObject)


> És mégis, mit nem elégedett Form1.Button2.Click; vagy Form1.
> Button2Click (Nil);

Nem én írtam, hogy nem leszek elégedett, megkérdeztem, mi a különbség. És az ember is hozzá, hogy minden esetben, célszerű használni?


> És ez csak lehet, hogy ha történik ezen az oldalon keresztül,
> # XA0, ez bölcs dolog Form1.Button2Click (Form1.Button2);

Ez attól függ, mit kell kap.
Sender - (Form1.Button2)
Self - (Form1)


> Újrafelhasználható kód készül külön eljárások / függvények.

És ha az adott eljárás paraméter (Sender: TObject), ahogy nevezik a modult?

eljárás TForm1.Example (Sender: TObject);
kezdődik
# XA0; // tenni valamit;
végén;


> És ha az adott eljárás paraméter (Sender: TObject)

nafig nem kell ezt a lehetőséget, hogy az adott eljárás, ha van egy működő kódot téveszmés
Button2Click (Self)


> Nafig nem kell ezt a paramétert Ez a külön eljárás
> # XA0; ha van egy működő kódot téveszmés

Mit jelent? Tényleg? És ha ez az eljárás a következő:

eljárás TForm1.Example (Sender: TObject);
kezdődik
# XA0, ha (Sender TButton), akkor
.
végén;

Itt kell felvenni a programozó, és nincs lehetőség.

törölt moderátor
Megjegyzés: A Konferencia kezdőknek

Csak azt kell megérteni az egyszerű alapot: Modul - az elsődleges, és a forma - másodlagos.
A modul nem tudok semmilyen formában, a forma tudja szükséges modulokat.

Tedd, kényelmes. Bár a go-felhasználás. Mindenféle „hagyomány” a programozás nem mindig indokolt valami több, mint egy másnapos bryaknuvshem néhány guruk, hogy erre nem jó dolog, akkor bután felvette a többit.
Például, én az összes gomb lógni egy processzor, kapcsolja ki a címke gombra, hogy lehetővé teszi számomra, hogy végre nem különösebben zavarja hívó semmit bárhonnan. Úgy érzem, így kényelmes. Írt program a felhasználók számára, nem más programozók. És ha én vagyok kényelmes, kényelmes a felhasználók számára, a többi lényegtelen.


> Konferencia a kezdők számára, valamint azoknak, akik nehezen
> Megmagyarázni, mit akar. Kérjük a résztvevőket, hogy vzaimovezhlivymi,
> # XA0; szakemberek külön kérésére - engedékeny.

Másodszor, ha nem tudja megmagyarázni, hogy miért választ? Vagy ő nem tudja, vagy nem tudja megmagyarázni. Én kifejezetten felhívta a figyelmet erre, tudva, hogy az emberek itt szeretik, hogy rázza a levegőben, és az ilyen kijelentések. Nem kell megoldani egy adott probléma, csak kell egy világos megértése a paraméterek használata, hogy megkértem, hogy magyarázza.


> Csak meg kell érteni egy egyszerű alapot: Module - az elsődleges, és
> Form - másodlagos.
> Modul semmit sem tud semmilyen formában, és a forma tudja
> A szükséges modulokat is.

Itt van több építő. De az nyilvánvaló, a tárgy egészen más.

Végül a magyarázat egyszerű.


> Eljárás TForm1.Example (Sender: TObject);
> kezdődik
> # XA0, ha (Sender TButton), akkor
> # XA0; # XA0; ShowMessage ( "Button")
> # XA0; máshol
> # XA0; # XA0; ShowMessage ( "BitBtn")
> End;
>
> Eljárás TForm1.BitBtn1Click (Sender: TObject);
> kezdődik
> # XA0; Példa (feladó);
> End;
>
> Eljárás TForm1.Button1Click (Sender: TObject);
> kezdődik
> # XA0; Példa (feladó);
> End;

Csak egy ilyen feltétel felvezető példa eljárást végzik, mint amire szükségünk van, azaz Az üzenetet valójában mi lett nyomva. Abban az esetben, példa (Self); Példa (Form1); Példa (nulla); minden alkalommal végeznek ShowMessage ( „BitBtn”), függetlenül attól, hogy melyik gombot nyomták.

Végül Form1.Button2.Click; - eljárás tervezett szoftver gombot nyomja meg. Például, ha szüksége van egy csomó időt, hogy nyomjon meg egy gombot, például, egy bizonyos intervallumban. Ehhez kézzel, meg tudod csinálni egy időzítő. Rámutatva felvezető Button2.Click időzítő; Sőt, ahelyett, hogy az időmérő lesz, hogy erre a gombra kattint.

Ez az, amit hallani akartam.

Köszönöm, a téma lehet zárni.

Itt az volt a kérdés nem az, hogy jobb vagy helyes. Csak hallani akartam magyarázatot teljes megértéséhez.

A kérdésre, hogy „mi a küldés”? Itt van, amit szállít, és a hívó lesz eseményeket, és mit kell tenni, vagy mit nem, el kell döntenie, a felvezető. Levél minden csak meg kell tudni, hogy olvassa el egy tárgyat, függetlenül az aktuális nevek az aktuális száma egy form, stb ..

Hogy van az, hogy használja függ a vágyakat. Talán el kellene meghatározni, vagy gomb knopka_s_pridelannoy_mnoy_fintiflyushkoy - ez az egyik, de talán nasozdavali dinamikusan (runtime) 100 gomb és rendeljen egy felvezető majd meghatározni, hogy milyen gomb - egy másik, és Mauger. és az ötödik, és a tizedik, és még sok más Mauger.


> Nem igazán, vagy egyáltalán nem.

Nem egészen értek egyet. mert ha inaktív egérgombbal sajtó lehetetlen, de ezzel a módszerrel OnClick eljárást kell végrehajtani.

> AZL # XA0; (10/20/14 14:21) [26]

> Mivel nem lehet nyomni, ha inaktív gombos egér,

Ez így van, ez az, amit valószínűleg akart programozó, ha egy bizonyos időpontban tette a gomb inaktív.

> De a módszer segítségével onclick eljárást kell végrehajtani.

És ez valami más --buratino-- programozó még mindig keresi a módját, hogy átszúrja az orr kályha - mondják, van egy legitim módja ennek, és akkor, uraim mesterek, tőlem leplezni.

Micsoda képtelenség. Amint ez a kódhoz belül a felvezető ilyen teoriyamio programozó vágyak és Pinokkió?

Példa: egy hőmérséklet-szabályozóval (kód felvezető) részt kibaszott fűtési-hűtési eljárás. Két gomb, hogy manuálisan melegítjük lehűtjük. Úgy hívják ezt az eljárást.
Van egy automata módban. Ő kikapcsolja a gombok, de a lényeg a tettei, ő is az egyik kattintással, majd a másik.

És ez, hogy írjon egy csomó ugyanaz, hogy ne legyen Pinocchio?


> Nem kapcsolódik közvetlenül a gombnyomásra? És ugyanazzal az eljárással
> Az úgynevezett amikor a gomb lenyomásakor?

Természetesen lehet. közvetve. levelet funkció, a lényeg az, hogy a hívás egy másik funkció. Nem vártam egy ilyen javaslat egy elektronikai;)

Gyakori példa adható. Ugyanez a hőmérséklet-szabályozás.

A hőmérséklet a tartályban 98TS. Munka proramma:

Kézi üzemmódban. Jelenik meg az a gomb megnyomása „+” vörös „legnagyobb megengedhető hőmérséklet.” Megtiltják a „+” gombot, vagy a jelentés „teperatura elérte a határt, hogy megakadályozzák robbanó tartály baleset, további növekedése még nem került sor”, amikor megpróbál nyomja udvariasan modulált hang.

Számos különböző módon a gomb kezelő, és a felvezető komparátor.

Ah. Mindenesetre, a „felvezető gombokat kell lennie egy külön modul, szeparált eljárások”, hogy húzza ki a hátsó felület.

Nem csak azért, hogy a kocsi előtt a lovat, de Esch # 235; és megfojtani a kanca.

Azt javaslom, hogy vezessenek kézműves webes szolgáltatások, tizenegy darab, egyenként # 235; d # 235; és a RGANI DataSnap a kupac.