-
Знаю, подобное уже обсуждалось. Попробовал скомпилировать KOL под FreePascal, введя дополнительное условие:
и для реализации так же. Потом следующие 4-5 замен:
Result := CompareFileTime( @ft1, @ft2 );
Result := CompareFileTime( ft1, ft2 );
Всё скомпилировалось, но надо сделать порядка 120 замен кода, где предупреждения типа: Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.или Warning: Converting pointers to signed integers may result in wrong comparison results and range errors, use an unsigned type instead.Может, автор сам сделает необходимые правки? А то будет обидно, если я сделаю у себя исправления, а потом будет другой вариант... PS. Компиляция FPC в 64 бит выдала пару ошибок, связанных с размерами операндов: в TStream.DoAsyncRead и TStream.DoAsyncWrite
-
It really depends on the source material. For example in FPC 2.7.1 you can have D2010 + compatability with some new compiler switches like
Which version of FPC are you using? Do you use ppdelphi pack or the rtl sources from Delphi? In that case, which Delphi version are the sources written for? I recommend to NOT use ppdelphi pack, but the rtl/win sources from either Delphi 5 or 7. For FPC version 2.6.0 or higher I recommend to add:
Btw: if some changes the assembler OFFSET pseudo instructions with LEA based code then even all assembler will work from FPC 2.6.0.
-
Oh sorry, not complete: First the last: You can not use KOL in 64 bit FPC yet. There is a lot of hardcoded pointer sizes ( * 4 instead if * SizeOf(Pointer) ) and other issues, like integer sizes: Pointersize maps to NativeInt, not to integer which always maps to 32bit The warnings can be turned off by their warning number in FPC. FPC is a lot more verbose than Delphi. In principle these can be switched off by compiler option: fpc <more options> -vm4056,4086 <your program> Or put that in fpc.cfg This turns the two "warnings" that you mention off. TIP: You can find the warning numbers by compiling with fpc -vq
-
i don't remember all settings but i prefer to use native FPC (2.6) units/sources, no any "compatibility" packs. By working with not my project, keep "string" types as AnsiString and WideString atm, maybe will remove these types in future (prefer to use WinAPI level things). Uses Delphi mode by default, btw, added next lines to KOLDEF.inc
... and i still need both, 32 and 64 bit... ... and hope what KOL will be changed for FPC compiler work...
-
If you can send me the sources, I know I can compile them in Delphi and FPC 32 bit.
I also know that at the moment it is not possible to have KOL related sources in XE2 and the other way around.....
But I hope the advice worked: these messages are for Xplatform. As long as you compile for windows 32, you can swtich them off
-
i don't uses KOL+FPC compilation atm. and fight with XE2 bugs and KOL misunderstanding in other project. but these sources will not help in anything. but all "working" plugins sources are at https://code.google.com/p/delphi-miranda-plugins/ (i trying to avoid KOL where it is not necessary, kept in mRadio and Watrack plugins only)
-
Hi, I make test project for FPC 2.6.0 + KOL 3.18. Anyone can get it here: http://rghost.ru/40733629There is instructions in this archive. But, what my question: as you can see, there is a bug with transparence of Label (in Delphi 7 also) and wrong display of TabControl (only FPC). Can anyone help with this? ===== Здравствуйте! Удалось подключить KOL 3.18 к FPC 2.6.0. Здесь тестовый проект и все необходимое для компиляции под FPC: http://rghost.ru/40733629Собственно, вопрос: в тестовом проекте видно ошибку в отрисовке Label со включенной прозрачностью (на Делфи 7 то же самое), а также неверно отрисовывается первая вкладка TabControl (только в FPC). Можно как-то это исправить?
-
По поводу TabControl. Не поможет ли -dUSE_OLD_FLAGS?
-
Спасибо, помогло. А не знаете, что с прозрачностью Label?
-
Не знаю. Есть подозрение, что работает только поверх родителя.
-
Объясните мне, необразованному, в чем прикол использовать (юзать) KOL?
-
-
> в чем прикол использовать (юзать) KOL?
Так сразу и не скажешь... Читайте книги и "образуетесь".
-
Насчет TabControl - проблема в процедуре WndProcTabControl, в той части, что работает при включенном дефайне NEW_ALIGN. То-есть, избежать этой ошибки помогает кроме дефайна USE_OLD_FLAGS ещё и дефайн OLD_ALIGN. Пытаюсь выяснить, почему в Delphi работает правильно, а в FPC - нет.
-
> пробуйте с директивой OLD_TRANSPARENT Попробовал, появляются синтаксические ошибки, видно давно на этот дефайн не обращали внимания. Пока не разбирался.
-
Исправленная функция: где строка --//--, далее по тексту нет изменений
function WndProcTransparent( Sender: PControl; var Msg: TMsg;
var Rslt: Integer ): Boolean;
var DC, PDC, BLTDC: HDC;
Save: integer;
OLDp: THANDLE;
L, T: SmallInt;
TP, ParentClient: TPoint;
TR, Margins: TRect;
Wnd: HWND;
tRgn: HRgn;
C: PControl;
begin
Result := FALSE;
if AppletTerminated or not Sender.ToBeVisible then
begin
Exit;
end;
case Msg.message of
WM_HSCROLL, WM_VSCROLL:
begin
Sender.Invalidate;
exit;
end;
WM_SETTEXT:
begin
if not(G1_IsStaticControl in Sender.fFlagsG1)
Sender.fIsStaticControl = 0 then exit;
Sender.Invalidate;
Rslt := DefWindowProc
( Sender.fHandle, WM_SETTEXT, Msg.wParam, Msg.lParam );
Result := TRUE;
exit;
end;
WM_NCPAINT:
begin
if G2_Transparent in Sender.fFlagsG2
Sender.fTransparent then
Result := TRUE;
exit;
end;
end;
if (G2_Transparent in Sender.fFlagsG2)
Sender.fTransparent and (
not(G2_DoubleBuffered in Sender.FParent.fFlagsG2)
not Sender.fParent.fDoubleBuffered ) then
exclude( Sender.fFlagsG2, G2_Transparent );
Sender.fTransparent := FALSE;
if [G2_DoubleBuffered, G2_Transparent] * Sender.fFlagsG2 = []
not (Sender.fTransparent or Sender.fDoubleBuffered) then exit;
if Sender.fAnchors and SELF_REQ_PAINT <> 0 then exit;
case Msg.message of
WM_ERASEBKGND:
begin
Result := TRUE;
end;
WM_PAINT:
begin
ValidateRect(Sender.fHandle, nil); if (G2_Transparent in Sender.fFlagsG2)
Sender.fTransparent
and (Sender.fAnchors and PARENT_REQ_PAINT = 0) then
begin
InvalidateRect(Sender.fParent.Handle, nil, FALSE);
Result := TRUE;
exit;
end;
GetClientRect(Msg.hwnd, Margins);
OLDp := 0;
if Sender.fAnchors and PARENT_REQ_PAINT = 0 then
begin
Sender.fDblExcludeRgn := CreateRectRgn(0, 0, Margins.Right, Margins.Bottom);
DC := GetDC(0);
PDC := CreateCompatibleDC( DC );
OLDp := SelectObject(PDC,
CreateCompatibleBitmap(DC, Margins.Right, Margins.Bottom) );
ReleaseDC(0, DC);
Sender.fParentCoordX := 0;
Sender.fParentCoordy := 0;
end else begin
PDC := Msg.wParam;
Sender.fDblExcludeRgn := Sender.fParent.fDblExcludeRgn;
end;
Sender.fAnchors := Sender.fAnchors or SELF_REQ_PAINT;
Sender.fPaintDC := PDC;
if (Sender.fAnchors and PARENT_REQ_PAINT = 0) or
(G2_DoubleBuffered in Sender.fFlagsG2)
Sender.fDoubleBuffered then
Sender.Perform(WM_ERASEBKGND, PDC, 0);
Sender.Perform(WM_PAINT, PDC, 0);
Wnd := GetWindow( Sender.fHandle, GW_CHILD );
Wnd := GetWindow( Wnd, GW_HWNDLAST);
while Wnd <> 0 do begin
if IsWindowVisible(Wnd) then begin
C := Pointer( GetProp( Wnd, ID_SELF ) );
C := Pointer( GetWindowLong( Wnd, GWL_USERDATA ) );
with C^ do begin
if (C <> nil) and
( [G2_DoubleBuffered, G2_Transparent]
* fFlagsG2 <> [] )
(fTransparent or fDoubleBuffered) then
begin
-- end;
-
FPC ругнулся на конструкции Include(...), Exclude (...) - поправил, скомпилировало. Но внешний облик Label с прозрачностью не изменился - перекрывающиеся области двух Label не перерисовываются.
-
доброго времени суток
не пойму - как можно в лазарус установить kol_mck?????
подскажите добрые люди
и вообще можно-ли в него чтото установить, а то я в нём начинаю потихоньку разочаровываться
-
gur KOL-CE
-
Есть подробные инструкции?
|