gpt4 book ai didi

delphi - 如果我尝试使用 TRibbonCombobox 更改功能区样式,则访问冲突

转载 作者:行者123 更新时间:2023-12-03 18:44:06 25 4
gpt4 key购买 nike

如果我尝试使用 TRibbonCombobox 更改功能区样式,则会遇到访问冲突。

然后,我修改了 delphi 功能区演示以提供一个组合框方法来设置样式:

  • 在功能区栏上添加了一个 TRibbonCombobox
  • 添加了一个事件处理程序

  • 这是事件代码:
    procedure TfrmRibbonDemo.RibbonComboBox1Change(Sender: TObject);

    begin

    if RibbonComboBox1.Text='Luna' then

    Ribbon1.Style:=RibbonLunaStyle

    else

    Ribbon1.Style:=RibbonSilverStyle;

    end;

    当我使用 TRibbonCombobox 更改样式(尤其是不止一次)时,我得到:
    date/time         : 2009-10-02, 11:11:29, 843ms
    operating system : Windows XP Service Pack 3 build 2600
    physical memory : 583/2047 MB (free/total)
    free disk space : (C:) 71.72 GB
    display mode : 1280x1024, 32 bit
    allocated memory : 23.59 MB
    executable : RibbonDemo.exe
    exec. date/time : 2009-10-02 11:11
    compiled with : Delphi 2009
    madExcept version : 3.0k
    exception class : EAccessViolation
    exception message : Access violation at address 0054767C in module 'RibbonDemo.exe'. Read of address 0000005F.

    main thread ($ed0):
    0054767c +054 RibbonDemo.exe RibbonActnCtrls TCustomRibbonComboBox.SetBounds
    00546e52 +0a2 RibbonDemo.exe RibbonActnCtrls TRibbonComboControl.SetBounds
    00516f39 +0f1 RibbonDemo.exe ActnMan TCustomActionControl.CalcBounds
    0051853d +005 RibbonDemo.exe ActnCtrls TCustomButtonControl.CalcBounds
    00546482 +00a RibbonDemo.exe RibbonActnCtrls TRibbonComboControl.CalcBounds
    00516754 +030 RibbonDemo.exe ActnMan TCustomActionControl.SetSpacing
    0051a243 +01b RibbonDemo.exe ActnCtrls TCustomActionToolBar.CreateControl
    00557f16 +01a RibbonDemo.exe Ribbon TCustomActionControlBar.CreateControl
    0056205a +006 RibbonDemo.exe Ribbon TCustomRibbonGroup.CreateControl
    0051243f +087 RibbonDemo.exe ActnMan TCustomActionBar.CreateControls
    00519b35 +005 RibbonDemo.exe ActnCtrls TCustomActionDockBar.CreateControls
    0051a2c6 +022 RibbonDemo.exe ActnCtrls TCustomActionToolBar.CreateControls
    00557fcb +027 RibbonDemo.exe Ribbon TCustomActionControlBar.CreateControls
    00562075 +005 RibbonDemo.exe Ribbon TCustomRibbonGroup.CreateControls
    00514542 +05e RibbonDemo.exe ActnMan TCustomActionBar.RecreateControls
    0050e081 +04d RibbonDemo.exe ActnMan TCustomActionManager.SetStyle
    0055dac3 +02f RibbonDemo.exe Ribbon TCustomRibbon.SetStyle
    0056720c +04c RibbonDemo.exe RibbonDemoMainForm 387 +3 TfrmRibbonDemo.RibbonComboBox1Change

    如果我使用功能区栏上的按钮更改样式,则效果很好。

    感谢您的帮助!

    最佳答案

    您正在修改功能区的样式,这也会修改触发事件的组合框。

    为了使其工作,编程接口(interface)必须是“可重入的”,而功能区系统显然不是。

    有几种可能的解决方案:

  • 不要从功能区修改功能区,将配置 GUI 移动到其他位置。
  • 使组合框在某处存储所需的操作并触发另一个事件,该事件将在您的组合框事件终止后执行。例如,您可以设置一个非常小的间隔 (1) 的 TTimer,然后在组合框事件中启用该计时器,这样当触发 TTimer 事件时,功能区系统可以根据新的选择进行修改,而无需可重入api。
  • 关于delphi - 如果我尝试使用 TRibbonCombobox 更改功能区样式,则访问冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511092/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com