Stránka 1 z 1

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

Napsal: 31 říj 2008 18:51
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 268 x