Instalacja komponentów w Turbo Delphi Explorer
Turbo Delphi Explorer to świetne środowisko dla obiektowego Pascala, niestety jako darmowa edycja ma zablokowaną możliwość instalowania dodatkowych komponentów. Postaram się pokazać jak mimo tego ograniczenia skorzystać z zewnętrznego kawałka kodu.
Metoda opiera się na dynamicznym tworzeniu instancji komponentu, zatem jest ona zgodna z licencją i nie narusza jej w żaden sposób. Oczywiście niesie to za sobą pewne niedogodności i nie zawsze może być stosowane, jednak w znakomitej większości przypadków tak.
Jako przykład, wykorzystam komponentem THTTPGet, służący do pobierania plików z internetu. Nie jest to komponent wizualny, tzn. udostępnia pewną funkcjonalność a nie element widoczny dla użytkownika końcowego.
W pierwszej kolejności, po umiejscowieniu plików na dysku, musimy dodać wybraną lokalizację do ścieżki przeszukiwania bibliotek. Robimy to w menu Tools > Options > Library – Win32 > Library path. Jeśli ten krok mamy już za sobą, dodajemy do sekcji uses nazwę komponentu:
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, HTTPGet;
Kolejno musimy stworzyć nową instancję komponentu, w zależności od tego czy wykorzystujemy go tylko w określonym fragmencie kodu, czy też globalnie, funkcje tworzenia i zwalnianie umieszczamy w stosownym miejscu. Ja postanowiłem utworzyć komponent zaraz po załadowaniu aplikacji oraz zwolnić go przy jej zamykaniu:
procedure TForm1.FormCreate(Sender: TObject); begin HTTPGet := THTTPGet.Create(Self); end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin HTTPGet.Free; end;
HTTPGet to nazwa zmiennej zadeklarowanej w sekcji private klasy TForm1. W tym momencie możemy już korzystać z komponentu, odnosząc się do zmiennej HTTPGet.
To rozwiązanie pozwala nam na swobodę w doborze komponentów w Turbo Delphi Explorer, jednak niesie ze sobą pewne ograniczenia. W przypadku komponentów wizualnych, nie możemy w wygodny sposób umieścić ich na formie oraz manipulować ich wyglądem. Musimy tego dokonać po przez odnoszenie się do odpowiednich właściwości w samym kodzie, najlepiej tuż po jego stworzeniu.
Na koniec zamieszczam całościowy listing kodu wykorzystanego w tym wpisie, wraz z przykładowym zastosowaniem THTTPGet:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, HTTPGet, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
private
HTTPGet: THTTPGet;
procedure FileDone(Sender: TObject; FileName: String; FileSize: Integer);
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
HTTPGet := THTTPGet.Create(Self);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
HTTPGet.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Button1.Enabled := False;
with HTTPGet do
begin
BinaryData := True;
URL := 'http://downloads.sourceforge.net/sevenzip/7z465.exe';
FileName := '7z465.exe';
OnDoneFile := FileDone;
GetFile;
end;
end;
procedure TForm1.FileDone(Sender: TObject; FileName: String; FileSize: Integer);
begin
Button1.Enabled := True;
end;
end.