秋·风

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  278 随笔 :: 0 文章 :: 308 评论 :: 20万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
记录一下:网友<安全生产监管>发现lazarus 编译为Linux gtk2的应用使用TDateTimePIcker日历在tkDate模式,日历下拉菜单不响应鼠标点击,这个问题在windows和linux qt下没问题。
环境:
1、Lazarus 2.2.4
2、FPC 3.2.2
3、Linux deepin 内核版本:5.15.77
如果你也遇到这个问题,可以按他给出的解决方案处理:
打开lazarus\components\datetimectrls\datetimepicker.pas,将880行注释,第881行PopupMode := pmExplicit;改为PopupMode := pmNone;
复制代码
constructor TDTCalendarForm.CreateNewDTCalendarForm(AOwner: TComponent;
  ADTPicker: TCustomDateTimePicker);
var
  P: TPoint;
  CalClass: TCalendarControlWrapperClass;
begin
  inherited CreateNew(AOwner);

  ADTPicker.FAllowDroppingCalendar := False;
  FClosing := False;

  DTPicker := ADTPicker;
  BiDiMode := DTPicker.BiDiMode;
  DTPickersParentForm := GetParentForm(DTPicker);
  if Assigned(DTPickersParentForm) then begin
    DTPickersParentForm.AddHandlerOnVisibleChanged(@VisibleOfParentChanged);
    DTPickersParentForm.FreeNotification(Self);
    PopupParent := DTPickersParentForm;
    PopupMode := pmExplicit;
  end else
    PopupMode := pmAuto;
复制代码

按以下修改就可以:

if Assigned(DTPickersParentForm) then begin
   DTPickersParentForm.AddHandlerOnVisibleChanged(@VisibleOfParentChanged);
    DTPickersParentForm.FreeNotification(Self);  
    {PopupParent := DTPickersParentForm;  //<- this one
    PopupMode := pmExplicit;}
    PopupMode := pmNone;                  //<- with this one
  end else
    PopupMode := pmAuto;   

 

posted on   秋·风  阅读(259)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示