Git Product home page Git Product logo

liblcl's Introduction


新功能请查看dev分支。

liblcl

一个通用的跨平台GUI库,核心使用Lazarus LCL。


编译指南



语言绑定工具生成器:genBind,目前已经生成了c/c++、rust、nim的,详细参考这几种语言的绑定模板文件。


其他

所有导出的函数都为标准的c方式。 在Windows上采用__stdcall约定,其它平台采用__cdecl约定。

注:liblcl导出的某些API上用了些看起来怪异的方式,原本liblcl是为govcl所写,所以因为go天生的一些的原因,造成本自己都看着有点不太爽,但又很无奈。


字符编码

在所有平台上都默认使用utf-8编码。


默认的实例类

无需手动调用创建和释放。

// 定义
TApplication Application; // 应用程序
TScreen Screen;           // 屏幕
TMouse  Mouse;            // 鼠标
TClipboard  Clipboard;    // 剪切板
TPrinter Printer;         // 打印机

// 获取实例类指针
Application = Application_Instance();
Screen = Screen_Instance();
Mouse = Mouse_Instance();              
Clipboard = Clipboard_Instance();      
Printer = Printer_Instance();          

事件回调

事件回调分为3种类型。

获取参数数组中每个成员

// x86: sizeof(uintptr_t) = 4
// x64: sizeof(uintptr_t) = 8

// 从指定索引和地址获取事件中的参数
#define getParamOf(index, ptr) \
 (*((uintptr_t*)((uintptr_t)ptr + (uintptr_t)index*sizeof(uintptr_t))))
  • 基本事件回调
 
typedef void(*ESYSCALL0)();  
typedef void(*ESYSCALL1)(intptr_t);  
typedef void(*ESYSCALL2)(intptr_t, uintptr_t);  
typedef void(*ESYSCALL3)(intptr_t, uintptr_t, uintptr_t);  
typedef void(*ESYSCALL4)(intptr_t, uintptr_t, uintptr_t, uintptr_t);  
typedef void(*ESYSCALL5)(intptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);  
typedef void(*ESYSCALL6)(intptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);  
typedef void(*ESYSCALL7)(intptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);  
typedef void(*ESYSCALL8)(intptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);  
typedef void(*ESYSCALL9)(intptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);  
typedef void(*ESYSCALL10)(intptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);  
typedef void(*ESYSCALL11)(intptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);  
typedef void(*ESYSCALL12)(intptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);  


// 回调函数原型
// f:        通过SetOnXXX传入的Id或者函数指针
// args:     参数组数指针,通过getParamOf来获取每个成员
// argcount: 参数数组长度
// 事件回调
static void* LCLAPI doEventCallbackProc(void* f, void* args, long argCount) {
 
	// 获取参数的宏  
	#define _A_(index) \
	   getParamOf(index, args)

    switch (argCount) {
    case 0:  ((ESYSCALL0) (f))(); break;
    case 1:  ((ESYSCALL1) (f))(_A_(0)); break;
    case 2:  ((ESYSCALL2) (f))(_A_(0), _A_(1)); break;
    case 3:  ((ESYSCALL3) (f))(_A_(0), _A_(1), _A_(2)); break;
    case 4:  ((ESYSCALL4) (f))(_A_(0), _A_(1), _A_(2), _A_(2)); break;
    case 5:  ((ESYSCALL5) (f))(_A_(0), _A_(1), _A_(2), _A_(3), _A_(4)); break;
    case 6:  ((ESYSCALL6) (f))(_A_(0), _A_(1), _A_(2), _A_(3), _A_(4), _A_(5)); break;
    case 7:  ((ESYSCALL7) (f))(_A_(0), _A_(1), _A_(2), _A_(3), _A_(4), _A_(5), _A_(6)); break;
    case 8:  ((ESYSCALL8) (f))(_A_(0), _A_(1), _A_(2), _A_(3), _A_(4), _A_(5), _A_(6), _A_(7)); break;
    case 9:  ((ESYSCALL9) (f))(_A_(0), _A_(1), _A_(2), _A_(3), _A_(4), _A_(5), _A_(6), _A_(7), _A_(8)); break;
    case 10: ((ESYSCALL10)(f))(_A_(0), _A_(1), _A_(2), _A_(3), _A_(4), _A_(5), _A_(6), _A_(7), _A_(8), _A_(9)); break;
    case 11: ((ESYSCALL11)(f))(_A_(0), _A_(1), _A_(2), _A_(3), _A_(4), _A_(5), _A_(6), _A_(7), _A_(8), _A_(9), _A_(10)); break;
    case 12: ((ESYSCALL12)(f))(_A_(0), _A_(1), _A_(2), _A_(3), _A_(4), _A_(5), _A_(6), _A_(7), _A_(8), _A_(9), _A_(10), _A_(11)); break;
    }
    return NULL;
}

// 设置回调
SetEventCallback(GET_CALLBACK(doEventCallbackProc));
  • TForm消息回调
// f: addr
// msg: TMessage
void* LCLAPI doMessageCallbackProc(void* f, void* msg) {
   ((void(*)(void*))f)(msg);
    return NULL;
}

// 设置回调
SetMessageCallback(GET_CALLBACK(doMessageCallbackProc));
  • 线程同步回调
static TThreadProc threadSyncProc;

void* LCLAPI doThreadSyncCallbackProc() {
    if (threadSyncProc) {
        ((TThreadProc)threadSyncProc)();
        threadSyncProc = NULL;
    }
    return NULL;
}

// 设置回调
SetThreadSyncCallback(GET_CALLBACK(doThreadSyncCallbackProc));

// 线程同步操作
void ThreadSync(TThreadProc fn) {
   
#ifdef __GNUC__
    pthread_mutex_lock(&threadSyncMutex);
#else
    EnterCriticalSection(&threadSyncMutex);
#endif
    threadSyncProc = fn;
    Synchronize(FALSE);
    threadSyncProc = NULL;
#ifdef __GNUC__
    pthread_mutex_unlock(&threadSyncMutex);
#else
    LeaveCriticalSection(&threadSyncMutex);
#endif
   
}
集合类型操作
// 集合加法,val...中存储为位的索引,下标为0
TSet Include(TSet s, uint8_t val) {
    return (TSet)(s | (1 << val));
}

// 集合减法,val...中存储为位的索引,下标为0
TSet Exclude(TSet s, uint8_t val) {
    return (TSet)(s & (~(1 << val)));
}

// 集合类型的判断,val表示位数,下标为0
BOOL InSet(uint32_t s, uint8_t val) {
    if ((s&(1 << val)) != 0) {
        return TRUE;
    }
    return FALSE;
}

初始liblcl示例
#define GET_CALLBACK(name) \
  (void*)&name
 
static void init_lib_lcl() {
#ifdef __GNUC__
    pthread_mutex_init(&threadSyncMutex, NULL);
#else
    InitializeCriticalSection(&threadSyncMutex);
#endif

    // 设置事件的回调函数
    SetEventCallback(GET_CALLBACK(doEventCallbackProc));
    // 设置消息回调
    SetMessageCallback(GET_CALLBACK(doMessageCallbackProc));
    // 设置线程同步回调
    SetThreadSyncCallback(GET_CALLBACK(doThreadSyncCallbackProc));
    // 初始实例类
    Application = Application_Instance();
    Screen = Screen_Instance();
    Mouse = Mouse_Instance();            
    Clipboard = Clipboard_Instance();    
    Printer = Printer_Instance();        
}

static void un_init_lib_lcl() {
#ifdef __GNUC__
    pthread_mutex_destroy(&threadSyncMutex);
#else
    DeleteCriticalSection(&threadSyncMutex);
#endif
}

c语言调用liblcl示例

#include "liblcl.h" 

 
#ifdef _WIN32
// UTF8解码
char *UTF8Decode(char* str) {
    int len = MultiByteToWideChar(CP_UTF8, 0, str, -1, 0, 0);
    wchar_t* wCharBuffer = (wchar_t*)malloc(len * sizeof(wchar_t) + 1);
    MultiByteToWideChar(CP_UTF8, 0, str, -1, wCharBuffer, len);

    len = WideCharToMultiByte(CP_ACP, 0, wCharBuffer, -1, 0, 0, 0, NULL);
    char* aCharBuffer = (char*)malloc(len * sizeof(char) + 1);
    WideCharToMultiByte(CP_ACP, 0, wCharBuffer, -1, aCharBuffer, len, 0, NULL);
    free((void*)wCharBuffer);

    return aCharBuffer;
}
#endif

// 按钮单击事件
void onButton1Click(TObject sender) {
    ShowMessage("Hello world!");
}

// 文件拖放事件
void onOnDropFiles(TObject sender, void* aFileNames, intptr_t len) {
    printf("aFileNames: %p, len=%d\n", aFileNames, len);
    intptr_t i;
    // GetFPStringArrayMember 为一个从Lazarus的string数组中获取成员的函数。
    for (i = 0; i < len; i++) {
        
#ifdef _WIN32
        // 由于liblcl使用的是UTF-8编码,所以获取或者传入的在Windows下都要经过UTF-8编/解码 
        char *filename = UTF8Decode(GetFPStringArrayMember(aFileNames, i));
#else
        // Linux与macOS默认都是UTF-8,则无需编/解码
        char *filename = GetFPStringArrayMember(aFileNames, i);
#endif
        printf("file[%d]=%s\n", i+1, filename);
#ifdef _WIN32
        free((void*)filename);
#endif
    }
}

// 窗口键盘按下事件
void onFormKeyDown(TObject sender, Char* key, TShiftState shift) {
    printf("key=%d, shift=%d\n", *key, shift);
    if (*key == vkReturn) {
        ShowMessage("press Enter!");
    }

    TShiftState s = Include(0, ssAlt);
    if (InSet(s, ssAlt)) {
        printf("ssAlt1\n");
    }
    s = Exclude(s, ssAlt);
    if (!InSet(s, ssAlt)) {
        printf("ssAlt2\n");
    }
}

// 编辑框内容改变事件
void onEditChange(TObject sender) {
    printf("%s\n", Edit_GetText(sender));
}

int main()
{
    // 加载库
#ifdef _WIN32
    if (load_liblcl("liblcl.dll")) {
#endif
#ifdef __linux__
    if (load_liblcl("liblcl.so")) {
#endif
#ifdef __APPLE__
    if (load_liblcl("liblcl.dylib")) {
#endif

        // 主窗口显示在任务栏,仅Windows有效
        Application_SetMainFormOnTaskBar(Application, TRUE); 
        // 应用程序标题,影响到:比如ShowMessage的标题。
        Application_SetTitle(Application, "Hello LCL"); 
        // 初始化应用程序
        Application_Initialize(Application);

        // 创建窗口
        TForm form = Application_CreateForm(Application, FALSE);
        // 设置窗口标题
        Form_SetCaption(form, "LCL Form");
        // 设置窗口位置
        Form_SetPosition(form, poScreenCenter);

        // --- 拖放文件测试 ---
        // 接受文件拖放
        Form_SetAllowDropFiles(form, TRUE); 
        // 拖放文件事件
        Form_SetOnDropFiles(form, onOnDropFiles);

        // 窗口优先接受按键,不受其它影响
        Form_SetKeyPreview(form, TRUE);

        // 窗口按键事件
        Form_SetOnKeyDown(form, onFormKeyDown);
        
        // ---------- 从内存流或者文件加载UI布局文件 ----------
        // 从文件加载窗口设置
        // 从流加载
        //TMemoryStream mem = NewMemoryStream();
        //MemoryStream_Write(mem, data, datalen);
        //MemoryStream_SetPosition(mem, 0); 
        //ResFormLoadFromStream(mem, form);
        //MemoryStream_Free(mem);
        
        // 从文件加载
        //ResFormLoadFromFile("./Form1.gfm", form);

        // ----------  动态创建控件 ---------- 
        // 创建一个按钮
        TButton btn = Button_Create(form);
        // 设置子父窗口
        Button_SetParent(btn, form);
        // 设置按钮单击事件
        Button_SetOnClick(btn, onButton1Click);
        // 设置按钮标题
        Button_SetCaption(btn, "button1");
        // 设置按钮在Parent的左边位置
        Button_SetLeft(btn, 100);
        // 设置按钮在Parent的顶边位置
        Button_SetTop(btn, 100);
        
        // 创建一个单行文件框(多行为TMemo)
        TEdit edit = Edit_Create(form);
        // 设置子父窗口
        Edit_SetParent(edit, form);
        // 设置左边
        Edit_SetLeft(edit, 10);
        // 设置顶边
        Edit_SetTop(edit, 10);
        // 设置编辑器内容改变事件
        Edit_SetOnChange(edit, onEditChange);

        // 运行app
        Application_Run(Application);

        // 释放liblcl库
        close_liblcl();
    }
    return 0;
}

授权

保持跟Lazarus LCL组件采用相同的授权协议: COPYING.modifiedLGPL

liblcl's People

Contributors

ying32 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

liblcl's Issues

安装GoVCL时报错

安装GoVCL时报错atflatcontrols_register.pas(80,12) Fatal: Can't find unit atflatcontrols_register used by atflatcontrols_package.
根据编译教程一步步来的,liblcl已编译过一次.

全部日志

信息,警告:2,提示:22
Note: Duplicate unit "wsrichmemo" in "mylazpkgs 1.0", orphaned ppu "D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\wsrichmemo.ppu"
Note: Duplicate unit "wsrichmemo" in "richmemopackage 1.0", ppu="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\wsrichmemo.ppu", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\wsrichmemo.pas"
Note: Duplicate unit "win32richmemoproc" in "mylazpkgs 1.0", orphaned ppu "D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\win32richmemoproc.ppu"
Note: Duplicate unit "win32richmemoproc" in "richmemopackage 1.0", ppu="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\win32richmemoproc.ppu", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\win32\win32richmemoproc.pas"
Note: Duplicate unit "win32richmemoole" in "mylazpkgs 1.0", orphaned ppu "D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\win32richmemoole.ppu"
Note: Duplicate unit "win32richmemoole" in "richmemopackage 1.0", ppu="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\win32richmemoole.ppu", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\win32\win32richmemoole.pas"
Note: Duplicate unit "win32richmemo" in "mylazpkgs 1.0", orphaned ppu "D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\win32richmemo.ppu"
Note: Duplicate unit "win32richmemo" in "richmemopackage 1.0", ppu="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\win32richmemo.ppu", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\win32\win32richmemo.pas"
Note: Duplicate unit "" in "richmemopackage 1.0", ppu="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\rtfeditpropdialog.ppu", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\rtfeditpropdialog.lfm"
Note: Duplicate unit "rtfeditpropdialog" in "richmemo_design 0.0", ppu="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\rtfeditpropdialog.ppu", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\ide\rtfeditpropdialog.pas"
Note: Duplicate unit "richmemoutils" in "mylazpkgs 1.0", orphaned ppu "D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\richmemoutils.ppu"
Note: Duplicate unit "richmemoutils" in "richmemopackage 1.0", ppu="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\richmemoutils.ppu", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\richmemoutils.pas"
Note: Duplicate unit "richmemohelpers" in "mylazpkgs 1.0", orphaned ppu "D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\richmemohelpers.ppu"
Note: Duplicate unit "richmemohelpers" in "richmemopackage 1.0", ppu="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\richmemohelpers.ppu", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\richmemohelpers.pas"
Note: Duplicate unit "richmemofactory" in "mylazpkgs 1.0", orphaned ppu "D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\richmemofactory.ppu"
Note: Duplicate unit "richmemofactory" in "richmemopackage 1.0", ppu="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\richmemofactory.ppu", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\richmemofactory.pas"
Note: Duplicate unit "richmemo" in "mylazpkgs 1.0", orphaned ppu "D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\richmemo.ppu"
Note: Duplicate unit "richmemo" in "richmemopackage 1.0", ppu="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\richmemo.ppu", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\richmemo.pas"
Note: Duplicate unit "atgauge" in "atflatcontrols_package 2.0", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\ATFlatControls\atflatcontrols\atgauge.pas"
Note: Duplicate unit "atgauge" in "mylazpkgs 1.0", orphaned ppu "D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\atgauge.ppu"
Note: Duplicate unit "atflatthemes" in "atflatcontrols_package 2.0", source="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\ATFlatControls\atflatcontrols\atflatthemes.pas"
Note: Duplicate unit "atflatthemes" in "mylazpkgs 1.0", orphaned ppu "D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\atflatthemes.ppu"
Warning: Duplicate file "rtfeditpropdialog.lfm" in "richmemopackage 1.0", path="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\lib\x86_64-win64\rtfeditpropdialog.lfm"
Warning: Duplicate file "rtfeditpropdialog.lfm" in "richmemo_design 0.0", path="D:\GitHub\cutmovie\liblcl-master\src\3rd-party\richmemo\ide\rtfeditpropdialog.lfm"
编译包atflatcontrols_package 2.0: 成功,警告:8,提示:138
atcanvasprimitives.pas(407,19) Hint: Local variable "Points" of a managed type does not seem to be initialized
atcanvasprimitives.pas(25,62) Hint: Parameter "Y1" not used
atcanvasprimitives.pas(480,7) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
atcanvasprimitives.pas(488,15) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
atcanvasprimitives.pas(489,53) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
atcanvasprimitives.pas(497,33) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
atcanvasprimitives.pas(498,52) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
atcanvasprimitives.pas(506,21) Warning: Implicit string type conversion from "AnsiString" to "UnicodeString"
atcanvasprimitives.pas(507,53) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
atcanvasprimitives.pas(511,12) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
atbuttons.pas(366,21) Hint: Local type "TControlCracker" is not used
attabs.pas(576,30) Hint: Parameter "ATabMouseOverX" not used
attabs.pas(1408,3) Note: Call to subroutine "procedure TATTabs.UpdateCanvasAntialiasMode(C:TCanvas);" marked as inline is not inlined
attabs.pas(1414,19) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1412,18) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1421,51) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1422,69) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1423,74) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1429,22) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1438,60) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1446,46) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1454,47) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1467,30) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1469,46) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1477,49) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1529,7) Note: Call to subroutine "procedure TATTabs.DoTextOut(C:TCanvas;AX:LongInt;AY:LongInt;const AClipRect:TRect;const AText:AnsiString);" marked as inline is not inlined
attabs.pas(1610,52) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1610,64) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1626,26) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1627,28) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1696,20) Note: Call to subroutine "function TATTabs.GetPositionInverted(APos:TATTabPosition):<enumeration type>;" marked as inline is not inlined
attabs.pas(1710,29) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1711,29) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1721,29) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1722,29) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1753,28) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1773,24) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1775,35) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1776,13) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1786,24) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1788,35) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1789,35) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1833,35) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1834,13) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1846,35) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1847,35) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1904,15) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1938,11) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1939,71) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1945,12) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1954,24) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1959,20) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1961,20) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(1962,23) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2019,64) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2019,62) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2020,78) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2020,50) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2021,16) Note: Call to subroutine "function TATTabs.GetInitialVerticalIndent:LongInt;" marked as inline is not inlined
attabs.pas(2032,49) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2040,25) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2043,23) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2058,17) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2061,28) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2063,11) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2064,20) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2076,48) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2095,33) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2106,49) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2108,20) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2109,21) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2110,20) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2111,21) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2121,26) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2122,26) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2137,23) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2153,40) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2158,24) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2159,40) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2169,40) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2170,40) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2174,95) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2174,73) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2175,89) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2175,61) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2176,24) Note: Call to subroutine "function TATTabs.GetInitialVerticalIndent:LongInt;" marked as inline is not inlined
attabs.pas(2177,40) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2187,19) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2189,7) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2204,6) Note: Call to subroutine "function TATTabs.GetTabFlatEffective(AIndex:LongInt):Boolean;" marked as inline is not inlined
attabs.pas(2290,21) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2291,22) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2327,38) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2329,31) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2329,51) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2337,58) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2345,32) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2353,52) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2527,29) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2528,30) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2533,28) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2534,30) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2560,31) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2587,50) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2587,75) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2588,30) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2593,42) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2592,21) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2595,30) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2603,19) Note: Call to subroutine "function TATTabs.GetInitialVerticalIndent:LongInt;" marked as inline is not inlined
attabs.pas(2612,42) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2611,23) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2614,30) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2619,32) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(2624,32) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(681,68) Hint: Parameter "MousePos" not used
attabs.pas(3324,44) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3342,14) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3345,40) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3347,41) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3355,41) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3357,40) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3387,18) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3391,30) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3476,23) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3482,31) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3482,56) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3485,9) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3487,12) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3488,13) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3490,12) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3491,13) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3526,22) Note: Call to subroutine "function TATTabs.DoScale(AValue:LongInt):LongInt;" marked as inline is not inlined
attabs.pas(3697,3) Note: Local variable "IsX" not used
atgroups.pas(49,7) Hint: Parameter "AType" not used
atgroups.pas(49,30) Hint: Parameter "ATabIndex" not used
atgroups.pas(50,7) Hint: Parameter "C" not used
atgroups.pas(50,25) Hint: Parameter "ARect" not used
atscrollbar.pas(367,6) Note: Call to subroutine "function TATScrollbar.IsHorz:Boolean;" marked as inline is not inlined
atscrollbar.pas(415,6) Note: Call to subroutine "function TATScrollbar.IsHorz:Boolean;" marked as inline is not inlined
atscrollbar.pas(488,6) Note: Call to subroutine "function TATScrollbar.IsHorz:Boolean;" marked as inline is not inlined
atscrollbar.pas(497,6) Note: Call to subroutine "function TATScrollbar.IsHorz:Boolean;" marked as inline is not inlined
atscrollbar.pas(525,6) Note: Call to subroutine "function TATScrollbar.IsHorz:Boolean;" marked as inline is not inlined
atscrollbar.pas(668,6) Note: Call to subroutine "function TATScrollbar.IsHorz:Boolean;" marked as inline is not inlined
atlistbox.pas(1092,3) Note: Local variable "R" not used
atlistbox.pas(131,40) Hint: Parameter "Shift" not used
构建IDE: 退出代码2,错误: 1,警告:2
Warning: svn not in path.
Warning: Recompiling atflatcontrols_register, checksum changed for D:\GitHub\cutmovie\liblcl-master\src\lib\x86_64-win64\atgauge.ppu
atflatcontrols_register.pas(80,12) Fatal: Can't find unit atflatcontrols_register used by atflatcontrols_package

q

Mac编译时出现内存不足的问题

Lazarus IDE2.2.0和IDE2.2.4 Mac版本编译liblcl时,会发生如下错误:

LazarusDef.inc (1040,1) Error: Compilation raised exception internally
Fatal: No memory left.

事实上内存还有40G+可以使用,上面是一些资源定义,怀疑与此有关:

如 (Name: 'rsSelectionFontTitle'; ValuePtr: @rsSelectionFontTitle)

大神们赶紧解决一下!谢谢!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.