Lazarus, czyli Delphi w Linuksie

Z openSUSE wiki

Uporządkowanie.png Ten artykuł wymaga uporządkowania. Szczegóły można znaleźć na stronie dyskusji.

Wskazówka.png Wskazówka: Artykuł pochodzi z magazynu Dragonia, na którego łamach możesz znaleźć więcej zagadnień związanych z programowaniem. Więcej informacji o magazynie znajdziesz na jego stronie domowej.

Lazarus jest zintegrowanym środowiskiem programistycznym opierającym sie o kompilator FreePascal.

Autor: PIOTR KRAKOWIAK "dragon"

Lazarus, jest to „Delphi dla linuksa”, z resztą środowisko te pozwala importować projekty napisane w Delphi. Programy napisane w środowisko Lazarus można kompilować dla dowolnego obsługiwanego procesora, systemu operacyjnego i interfejsu okienek. Jeżeli miałeś kontakt ze srodowiskiem Delphi to nie będziesz miał problemów z Lazarusem. A by stać się posiadaczem srodowiska Lazarus musimy udać sie na stronę domowa projektu, pobrać i zainstalować pakiety z freepascalem i lazarusem. Adres strony podany jest na końcu artykułu. Teraz dla przykładu napiszemy prosty programik do szyfrowania plików. Program będzie szyfrował metoda XOR. Istotna cecha funkcji XOR jest jej przemienność:

A XOR B = C
C XOR B = A
C XOR A = B

Cecha ta powoduje , ze xor jest często wykorzystywany do szyfrowania. Dodając za pomocą xor bit klucza (K) do bitu tekstu jawnego (T) otrzymuje my bit kryptogramu (S). Od szyfrowanie polega na dodaniu do bitu kryptogramu (S) bit klucz a (K) otrzymujemy w wyniku bit tekstu jawnego (T). Szyfrowanie: K XO R T = S Deszyfrowanie: K XO R S = T Teraz możemy zabierać się za tworzenie naszego programu. Przed uruchomieniem Lazarusa stwórzmy sobie katalog w którym będziemy przechowywać pliki z projektu, u mnie będzie to katalog /home/dragon/projekty/szyfrator/. Uruchamiamy Lazarusa i zabieramy się za tworzenie programu. Z menu Projekt wybieramy Nowy Projekt, ukaże nam się okienko z listą i z niej wybieramy Aplikacja i zatwierdzamy wybór przyciskiem Create. Z menu Plik wybieramy Zapisz wszystkie i zapisujemy projekt we wcześniej stworzonym katalogu (u mnie jest to katalog szyfrator) . Teraz w Inspektorze obiektów szukamy opcji Name i zmieniamy jego wartość z Form1 na Szyfrator, automatycznie powinna się zmienić wartość opcji Caption również na Szyfrator. Jak widać okno naszej aplikacji nazywa się teraz Szyfrator. U góry Lazarusa znajdują się komponenty podzielone zakładkami na kategorie. My na razie wybierzemy kategorię Standard i z niej użyjemy komponentu Tpanel. Należy kliknąć na ikonkę z komponentem TPanel a następnie narysować go na formatce.

Upewniamy się czy w Inspektorze Obiektów jest zaznaczony komponent Panel1:TPanel jeżeli nie to go zaznaczamy, następnie w opcji Caption kasujemy tekst „Panel1” automatycznie powinien ten tekst zniknąć z panelu na formatce. Teraz do naszej formatki dodamy pole tekstowe - komponent Tedit robimy to analogicznie jak poprzedni komponent czyli klikamy na ikonkę przedstawiająca komponent Tedit następnie rysujemy go na formatce szyfratora. W inspektorze obiektów upewniamy się czy zaznaczony jest komponent Edit1:Tedit jeżeli jest to w opcji Text tego komponentu kasujemy tekst Edit1, ten sam tekst powinien automatycznie zniknąć z komponentu na formatce. Następnie dodajemy dwa przyciski – komponent TButton. W pierwszym zmieniamy wartość caption na dwie kropki, w drugim wpisujemy tekst „Szyfruj/Deszyfruj”

Teraz dodajmy jeszcze komponent TOpenDialog z zakładki Dialogs. Ostatnie komponenty to pasek postępu abyśmy wiedzieli jak posuwa się nasze szyfrowanie/deszyfrowanie oraz dwa labele które znajdują się w zakładce Standard i noszą nazwę TLabel zmieniamy im wartość Caption na Wybierz plik: i Haslo:. Komponent paska postępu znajduje się w zakładce Common Controls i nazywa się TProgressBar.

Od strony wizualnej program mamy gotowy można go nawet uruchomić, robimy to przez wciśnięcie. klawisz F9. Zabieramy się za kod, klikamy dwukrotnie na przycisk Button1 (to ten z trzema kropkami) lazarus automatycznie wygeneruje akcję Button1Click przeniesie nas do okna edytora źródeł i ustawi nam kursor w odpowiednim miejscu. Teraz trzeba tylko uzupełnić akcję kodem. Tak wygląda procedura po uzupełnieniu jej kodem:

 procedure TSzyfrator.Button1Click(Sender: TObject);
var
  fname: string;
  ffile : file;
begin
  OpenDialog1.Filter:='Wszystkie pliki (*.*)|*.*';
  if opendialog1.execute then
     try
       AssignFile(ffile,OpenDialog1.FileName);
       Reset(ffile,1);
       CloseFile(ffile);
       fname:= opendialog1.FileName;

       Panel1.Caption:=fname;
     except
        MessageDlg('Nie mona znalezc pliku.',mtInformation,[mbok],0);
     end;
end;  

Możemy teraz uruchomić program i sprawdzić czy działa nasz przycisk do wybierania pliku do szyfrowania/deszyfrowania.

Teraz klikamy dwukrotnie na przycisk Szyfruj/Deszyfruj i dodajemy kod.

procedure TSzyfrator.Button2Click(Sender: TObject);

    type cyc = record
              A: LongInt;
              B: Byte;
           end;
var
  ffile           : file;
  Key         : string;
  adres, bajt : cyc;
  bb          : Byte;
  CodedByte   : Char;
  StanScan    : Integer;
  Selektor    : LongInt;
  i, j        : Integer;
label 1, 2, 3;

begin
     if length(Panel1.caption)=0  then
        begin
          MessageDlg('Wybierz plik do szyfrowania\deszyfrowania !', mtInformation, [mbOk], 0);
          goto 1;
        end;
     if length(edit1.text)=0  then
        begin
          MessageDlg('Wpisz swoje haslo !', mtInformation, [mbOk], 0);
          goto 1;
        end;
     if (Length(edit1.text)<>0) and (Length(edit1.text)<6) then
        begin
          MessageDlg('Haslo musi miec przynajmniej 6 znakow !', mtInformation, [mbOK], 0);
          goto 1;
        end;

     j:=1;
     Key:=Edit1.Text;
  2: for i:=1 to (6-j) do
                        begin
                          if Key[j]<>Key[i+j] then goto 3;
                        end;
     if j=9 then
              begin
                MessageDlg('Co najmniej 2 z pierwszy 6 znakow w hasle musza byc rozne !', mtInformation, [mbOK], 0);
                goto 1;
              end;
     Inc(j);
     goto 2;

  3: StanScan:=0;
     Selektor:=400;

     AssignFile(ffile,opendialog1.FileName);
     Reset(ffile,1);
     adres.A := 1;
     Key:=Edit1.text;
     repeat
       Application.ProcessMessages;
       StanScan:=((adres.A)*100)div(FileSize(ffile));
       if adres.A = Selektor then
                             begin

                               ProgressBar1.Position:=(StanScan);
                               Selektor:=Selektor+400;
                             end;
       seek(ffile,adres.A);
       bb:=bajt.B;
       BlockRead(ffile,bb,1);
       CodedByte:=Char(bb xor Ord(Key[6])  xor Ord(Key[5])
                          xor Ord(Key[4])  xor Ord(Key[3])
                          xor Ord(Key[2])  xor Ord(Key[1]));
       adres.A:=adres.A-1;
       seek(ffile,adres.A) ;
       bb:=bajt.B;
       BlockRead(ffile,bb,1);
       BlockWrite(ffile,CodedByte,1);
       adres.A:=adres.A+2;
     until adres.A>=FileSize(ffile);


     CloseFile(ffile);
     MessageDlg('Szyfrowanie/Deszyfrowanie zakonczone!',mtInformation,[mbok],0);
1:end;   

Teraz uruchamiamy program przez naciśnięcie klawisza F9 . Wybieramy plik do zakodowania (u mnie będzie to plik tekstowy text.txt zawierający jedno zdanie), wpisujemy hasło i naciskamy przycisk Szyfruj/Deszyfruj.

No i to by było na tyle, w katalogu z programem znajduje sie samodzielny plik wykonywalny czyli nasz program plik nazywa sie project1. Nazwę generowanego pliku z programem można zmienić, wybierając z menu Projekt opcję Opcje projektu... następnie w oknie które sie pokazało w polu Nazwa i polu Docelowa nazwa pliku wpisujemy szyfrator zatwierdzamy zmiany przyciskiem OK i wciskamy F9. Teraz w katalogu z programem jest już plik szyfrator z programem. Programy wygenerowane w Lazarusie zajmują sporo miejsca ale za to bardzo ładnie się pakują. Szyfrator ważył aż 6,7 MB, a po spakowaniu zajmował już tylko 1,5 MB. Pozdrawiam i zachęcam do korzystania z Lazarusa.