Instalacja komponentu z Delphi w Lazarusie

0

Panowie i Panie

Mam komponent napisany dla Delphi. To komponent służący do dynamicznego resizingu formy i wszystkich elementów na formie. W Delphi instaluję go bez problemu, działa.
Zastanawiam się czy byłaby możliwość zainstalowania go w Lazarusie, po jakiejś ewentualnej konwersji?
Zaczynam bawić się Lazarusem i nie do końca potrafię się tam odnaleźć w kwestii instalacji komponentów. Zwłaszcza tych dla Delphi.
Być może ktoś pokierowałby mnie krok po kroku co należy zrobić jeśli jest to w ogóle możliwe?

Link do komponentu:
http://www.delphi32.com/vcl/1289/

0

Zastanawiam się czy byłaby możliwość zainstalowania go w Lazarusie, po jakiejś ewentualnej konwersji?

No to nie zastanawiaj się i spróbuj go zainstalować...

Nie wiem w jakiej postaci masz ten komponent, czy jest on gołym plikiem .pas czy może paczką .dpk - nie napisałeś. W każdym razie utwórz sobie pustą paczkę, nazwij ją sensownie i zapisz gdzieś na dysku. Dodaj do niej nowy moduł i też nazwij go sensownie i zapisz go na dysku. Otwórz moduł komponentu z Delphi i przeklej kod z sekcji interface oraz implementation do modułu dla Lazarusa.

Jeśli kod kontrolki koniecznie musi być możliwy do skompilowania w obu tych środowiskach to zamień dyrektywę {$MODE OBJFPC} na {$MODE DELPHI}, a jeśli nie musi to nie zmieniaj jej. Przekompiluj paczkę - jeśli wyskoczą błędy to znaczy, że coś trzeba będzie poprawić. Mniejsza szansa na błędy będzie wtedy, gdy użyjesz dyrektywy {$MODE DELPHI}.

W razie błędów pisz - podaj treść błędu i linijkę w której występuje, dla każdego problemu z osobna. O ile faktycznie błędy wystąpią, bo nie jest wykluczone, że portowanie pójdzie gładko.

0

Może zamieść źródła do tego komponentu w wątku, bo link jaki podałeś troche jakiś taki nie bardzo jest...

0

Faktycznie, coś z tą stroną jest nie tak.

Wrzuciłem wszystkie pliki komponentu do załącznika do tego postu (10 plików, kilkanaście KB).

Próbuję to zainstalować w Lazarusie, ale chyba do czasu aż ktoś mi nie napisze krok po kroku, gdzie kliknąć itp, to tego nie ogarnę.

Załącznik.

0

@axel234: spróbuj sam przenieść ten kod - toż to nic trudnego.

W sumie to nie musisz tworzyć modułów i kopiować kodu - wystarczy, że utworzysz pustą paczkę i dodasz do niej pliki .pas ze źródłami z Delphi oraz zamienisz w nich dyrektywy {$APPTYPE GUI} na {$MODE OBJFPC} lub {$MODE DELPHI}. Tyle wystarczy, bo Lazarus oprócz plików .pp obsługuje również pliki .pas.

0

Tworzę nową paczkę, dodaję do niej plik easysize.pas (wśród plików tylko ten ma rozszerzenie .pas), następnie otwieram go i szukam {$APPTYPE GUI}, tak? Jeśli tak, to nie ma tam czegoś takiego.
Jest tam:

{$IFDEF WIN32}
{$R Easysize.d32}
{$ELSE}
{$R Easysize.d16}
{ENDIF}

No i do tego cała lista procedur.

W złym miejscu szukam?

0

No nie ma nic takiego, bo to nie aplikacja okienkowa - źle napisałem, nie byłem w formie....

Nie szukaj żadnych dyrektyw - po prostu dodaj ten moduł do listy modułów w ustawieniach paczki i przekompiluj ją, za pomocą przycisku Compile lub opcji More >> Recompile clean. Jeśli kompilacja nie uda się to pisz w czym problem.

0

Kompilacja wywala się już na początku na USES.
Te rzeczy z gwiazdkami, to te, na których kompilacja się wywala.

uses **WinTypes**, **WinProcs**, Messages, SysUtils, Classes **Controls**,
     **Forms**, **Graphics**, **StdCtrls**;  

Przykładowy komunikat:
Easysize.pas(24,6) Fatal: Cannot find WinTypes used by Easysize of package Nowy_Pakiet.

0

http://forum.lazarus.freepascal.org/index.php?topic=14072.0

marcov:

WinProc and Wintype are units from Windows 3.1x. In Win9x and later these are replaced by unit Windows.

Delphi allows some aliases for backwards compatibility from winproc and wintypes to Windows.
FPC never supported Windows 3.1x, and for FPC the issue came up nearly a decade after this transition, so these aliases were never implemented.

So in summary, simply use unit Windows.

1

Łap gotowca na Lazarus

0

Kazek dzięki za pliki. Jest postęp, bo paczka się kompiluje, ale tak jak pisałem, że w Delphi instaluję ten komponent w 10 sekund, tak w Lazarusie mam z zainstalowaniem komponentu.
@kAzek czy instalowałeś może ten komponent u siebie? Jeśli tak, to czy masz jakąś instrukcję krok po kroku jak to zainstalować? Korzystałem z instrukcji z sieci, ale zawsze dochodziłem do któregoś momentu, z którego nie mogłem ruszyć dalej.

Krok po kroku robię tak:

  • package -> open package file (.lpk) i otwieram resizer.lpk z plików, które podesłałeś

Następnie otwiera mi się okienko nowego pakietu.

Klikam Add Files i dodaję do listy plik Easysize.pas

Następnie kompiluję. Nie pojawiają się żadne błędy - czyli jest lepiej niż poprzednio.

No dobra, ale co dalej?

Kliknąć Add -> Nowy komponent? Jeśli tak, to co wpisać w oknie nowego komponentu? Co wybrać z listy "Typ przodka"? Jak wypełnić pozostałe pola?

A może nie klikać Add -> Nowy komponent?

Czy ktoś na tym forum, ma jakąś czytelną instrukcję instalacji komponentów w Lazarusie? Taką konkretną, krok po kroku?

1

@axel234: Lazarus póki co nie wspiera dynamicznego dołączania komponentów do środowiska (nie pamiętam jak się to fachowo nazywa), więc instalacja nie wygląda tak jak w Delphi.

Aby zainstalować komponent (czyli wkompilować paczkę do środowiska), musisz otworzyć sobie paczkę w środowisku, w oknie z jej zawartością kliknąć w przycisk Use >>, z rozwiniętego menu kontekstowego wybrać opcję Install oraz w okienku dialogowym potwierdzić chęć instalacji. Tu ważna rzecz - instalacja paczki jest równoznaczna z rekompilacją całego IDE, więc może to potrwać kilkadziesiąt sekund (na moim staruszku trwa to mniej więcej 15 sekund).

Po zakończeniu kompilacji, środowisko zrestartuje się i na palecie komponentów będzie już dostępny Twój komponent (albo kilka, jeśli w instalowanej paczce masz ich więcej). Nic trudnego - nie ma się czego bać.

0

Jak klikam Use -> Install to pojawia mi się komunikat z załącznika. Tak ma być? Jeśli tak, to co dalej?

komunikat.png

EDIT
Ok Panowie. Działa. Problem z komunikatem, o którym pisałem zniknął, kiedy w okienku z zawartością paczki, zaptaszkowałem pole Register, które domyślnie nie było zaptaszkowane. Po tej czynności i kliknięciu Use -> Install, komunikat z załącznika się już nie pojawił i komponent zainstalował się poprawnie. Działa. Kuźwa, prawie dwa dni boksowania się z nim, ale fajnie, że się udało, bo jest naprawdę przydatny czasami.

Dzięki wielkie za pomoc Panowie. Jestem waszym dłużnikiem.

0

Takie okienko pojawia się, jeśli próbujesz zainstalować paczkę, która nie zawiera komponentu (brak procedury Register). Dlatego też Lazarus informuje, że jej instalacja spowoduje głównie spuchnięcie środowiska i nic więcej (treść przycisku Install it, I like the fat jest śmieszna). To nie jest błąd, a zwykłe ostrzeżenie - czytaj ze zrozumieniem. Jeżeli Twoja paczka nie zawiera żadnych komponentów i tak ma być to wszystko gra.

Moją paczkę z API dla TreeStructInfo też można doinstalować do IDE, choć nie zawiera żadnych komponentów. Można z niej korzystać na różne sposoby, ale instalacja też jest możliwa - tylko i wyłącznie po to, aby możliwe było wykorzystywanie drzew mojego formatu do budowy komponentów (z czego sam namiętnie korzystam).

0

Nie instalowałem bo nie chce mi sie przenudowywać lazarusa ale żeby korzystać wystarczy w
Project -> Project Inspector...
prawym Required Packages -> Add wybrać resizer i Crate New Requirement
i do uses Easysize i w private zadeklarować fFormResizer: TFormResizer;
i utworzyć dynamicznie

procedure TForm1.FormCreate(Sender: TObject);
begin
  //nie zwalnia sie go ma wlasciciela Form to on odpowiada za zwolnienie inaczej SIGSEGV
  fFormResizer:= TFormResizer.Create(Self);
  fFormResizer.ResizeFonts:= True;
  fFormResizer.InitializeForm;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  fFormResizer.ResizeAll;
end;  

1 użytkowników online, w tym zalogowanych: 0, gości: 1