Díl třetí - vytváříme formuláře a tlačítka
Napsal: 31 říj 2008 18:51
V dnešním třetím díle rozšíříme plugin z minulého druhého dílu. Nejdříve si do pluginu přidáme formulář.
Otevřeme si plugin v Delphi a běžným způsobem přidáme nový formulář. Tedy přes menu File -> New -> Form.
Tím jsme přidali nový formulář který se jmenuje Form1. Teď musíme ještě formulář vytvořit při spuštění pluginu.
K tomu nám poslouží prozatím prázdné procedury CreateControls a FreeControls. Upravíme je nasledujícím způsobem
CreateControls
FreeControls
Dále je potřeba vytvořit v unitu formuláře tyto změny.
Dále bude dobré přidat v Object Inspectoru obsloužení uzavření formuláře.
Provedeme kompilaci pluginu a pokud je vše vpořádku můžete plugin otestovat. Po spuštění Infia se nově založený formulář zobrazí. Plugin je tedy funkční a nám se podařilo korektně přidat formulář do pluginu.
Zobrazení formuláře ihned po spuštení Infia ale není úplně to pravé. Toto zrušíte odstraněním řádku Form1.Show v proceduře CreateControls. Teď se plugin sice spustí, ale náš vytvořený formulář není zobrazen.
Proto si do pluginu přidáme dvě nové zprávy. PM_PLUGIN_CAN_ADD_BTNS která nám vytvoří tlačítko pod avatarem a zprávu PM_PLUGIN_MSG_BTN_CLICK která bude reagovat na kliknutí na tato tlačítka.
Zpravy přidáme do procedury OnQipMessage následujícím způsobem
Dále musíme vytvořit nově volané procedury které zajistí požadované funkce
Vytvořené tlačítko nemá ikonu, ale není ji problém tlačítku ve zprávných parametrech přiřadit.
Takto jsme se dostali do stavu kdy můžeme náš formulář zobrazit kliknutím na tlačítko a zase zavřít.
Na konec dnešního dílu si založíme druhý formulář Form2 stejným způsobem jako první a přiřadíme jej tlačítku "Nastavení" v seznamu pluginů. Přiřazení provedeme úpravou zprávy
To je pro dnešek opravdu vše. Dnešní díl slouží jako ukázka možnosti založení jednoho nebo několika tlačítek a vytvoření formulářů. Zdrojový kód je dnes složitější a celý si jej můžete stáhnout.
Otevřeme si plugin v Delphi a běžným způsobem přidáme nový formulář. Tedy přes menu File -> New -> Form.
Tím jsme přidali nový formulář který se jmenuje Form1. Teď musíme ještě formulář vytvořit při spuštění pluginu.
K tomu nám poslouží prozatím prázdné procedury CreateControls a FreeControls. Upravíme je nasledujícím způsobem
CreateControls
Kód: Vybrat vše
{vytvorime hlavni formular}
Form1 := TForm1.Create(nil);
Form1.PluginSvc := @FPluginSvc;
Form1.DllHandle := FPluginInfo.DllHandle;
Form1.DllPath := FDllPath;
Form1.Show;
Kód: Vybrat vše
if Assigned(Form1) then FreeAndNil(Form1);
Kód: Vybrat vše
private
{ Private declarations }
FPluginSvc : pIQIPPluginService;
FDllHandle : Cardinal;
FDllPath : WideString;
public
{ Public declarations }
property PluginSvc : pIQIPPluginService read FPluginSvc write FPluginSvc;
property DllHandle : Cardinal read FDllHandle write FDllHandle;
property DllPath : WideString read FDllPath write FDllPath;
end;
Kód: Vybrat vše
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caHide;
end;
Zobrazení formuláře ihned po spuštení Infia ale není úplně to pravé. Toto zrušíte odstraněním řádku Form1.Show v proceduře CreateControls. Teď se plugin sice spustí, ale náš vytvořený formulář není zobrazen.
Proto si do pluginu přidáme dvě nové zprávy. PM_PLUGIN_CAN_ADD_BTNS která nám vytvoří tlačítko pod avatarem a zprávu PM_PLUGIN_MSG_BTN_CLICK která bude reagovat na kliknutí na tato tlačítka.
Zpravy přidáme do procedury OnQipMessage následujícím způsobem
Kód: Vybrat vše
PM_PLUGIN_CAN_ADD_BTNS : Pridat_tlacitko(PlugMsg);
PM_PLUGIN_MSG_BTN_CLICK : Kliknuti_na_tlacitko(PlugMsg);
Kód: Vybrat vše
procedure TQipPlugin.Pridat_tlacitko(PlugMsg: TPluginMessage);
var BtnInfo : TAddBtnInfo;
begin
{========== Btn1 ===============}
{You can use icon OR png image for your button if you are coding in delphi else you have to use BtnIcon only}
BtnInfo.BtnIcon := 0; //Handle ikony
// OR use png if using delphi
//LongInt of (TPngObject), PngImage library for delphi only;
BtnInfo.BtnPNG := 0;
BtnInfo.BtnHint := 'Popis funkce tlacitka';
{Send adding btn message}
PlugMsg.Msg := PM_PLUGIN_ADD_BTN;
PlugMsg.WParam := LongInt(@BtnInfo);
PlugMsg.DllHandle := FPluginInfo.DllHandle;
FPluginSvc.OnPluginMessage(PlugMsg);
//Vysledkem zaslane zpravy je ID naseho tlacitka
FMyUniqBtn1 := PlugMsg.Result;
end;
procedure TQipPlugin.Kliknuti_na_tlacitko(PlugMsg: TPluginMessage);
var wAccName : WideString;
iUniqueVal, iProtoDllHandle : integer;
PlugMsg1 : TPluginMessage;
aContDetails : pContactDetails;
begin
{Zjisti ID tlacitka na ktere se kliklo}
iUniqueVal := PlugMsg.WParam;
{get contact account name from message}
// wAccName := PWideChar(PlugMsg.LParam);
{get protocol name of contact from message}
// wProtoName := PWideChar(PlugMsg.NParam);
{get protocol dll handle from message}
// iProtoDllHandle := PlugMsg.Result;
{check which of your buttons clicked}
{Klikli jsme na nase tlacitko?}
if (iUniqueVal = FMyUniqBtn1) then
begin
Form1.Show;
SetForegroundWindow(Form1.Handle);
end;
end;
Takto jsme se dostali do stavu kdy můžeme náš formulář zobrazit kliknutím na tlačítko a zase zavřít.
Na konec dnešního dílu si založíme druhý formulář Form2 stejným způsobem jako první a přiřadíme jej tlačítku "Nastavení" v seznamu pluginů. Přiřazení provedeme úpravou zprávy
Kód: Vybrat vše
PM_PLUGIN_OPTIONS : begin
//ShowMessage('Options window');
Form2.Show;
SetForegroundWindow(Form2.Handle);
end;