Díl třetí - vytváříme formuláře a tlačítka

V tomto fóru se budeme zabívat tvorbou pluginů pro QIP Infium.
Ukážeme si jak využívat všech možností SDK.
Celý seriál bude doplněn o příklady.
Předpokladem pro dokončení seriálu je instalace DELPHI.
Další podmínkou je alespoň základní znalost programování a používání tohoto vývojového prostředí.

Moderátor: sutrus

Zamčeno
Uživatelský avatar
sutrus
Administrátor
Administrátor
Příspěvky: 272
Registrován: 04 úno 2006 18:36
Bydliště: Jihlava
Kontaktovat uživatele:

Díl třetí - vytváříme formuláře a tlačítka

#1

Příspěvek od sutrus »

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

Kód: Vybrat vše

  {vytvorime hlavni formular}
  Form1            := TForm1.Create(nil);
  Form1.PluginSvc  := @FPluginSvc;
  Form1.DllHandle  := FPluginInfo.DllHandle;
  Form1.DllPath    := FDllPath;
  Form1.Show;
FreeControls

Kód: Vybrat vše

  if Assigned(Form1) then FreeAndNil(Form1);
Dále je potřeba vytvořit v unitu formuláře tyto změny.

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;
Dále bude dobré přidat v Object Inspectoru obsloužení uzavření formuláře.

Kód: Vybrat vše

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caHide;
end;
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

Kód: Vybrat vše

    PM_PLUGIN_CAN_ADD_BTNS    : Pridat_tlacitko(PlugMsg);
    PM_PLUGIN_MSG_BTN_CLICK   : Kliknuti_na_tlacitko(PlugMsg);
Dále musíme vytvořit nově volané procedury které zajistí požadované funkce

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;
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

Kód: Vybrat vše

    PM_PLUGIN_OPTIONS         : begin
                                  //ShowMessage('Options window');
                                  Form2.Show;
                                  SetForegroundWindow(Form2.Handle);
                                end;  
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.
form_plug.rar
Díl třetí. Vytváříme formuláře a tlačítka
(229.88 KiB) Staženo 242 x
Zdeněk Kameník - SPSSoftware
Hardware je vše co se nedá ukrást po síťi. Čím rychlejší počítač je, tím rychleji se rozbije.
Počítač vám ušetří spoustu práce, kterou byste bez něj vůbec neměli.
Zamčeno

Zpět na „Seriál - vytváříme vlastní plugin“