2

TRibbonCombobox を使用してリボン スタイルを変更しようとすると、アクセス違反が発生します。

次に、スタイルを設定するためのコンボボックス メソッドを提供するように Delphi リボン デモを変更しました。

  1. リボン バーに TRibbonCombobox を追加しました
  2. イベントハンドラを追加しました

イベントコードは次のとおりです。

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

リボン バーのボタンでスタイルを変更すると、問題なく動作します。

ご協力ありがとうございました!

4

1 に答える 1

1

リボンのスタイルを変更すると、イベントをトリガーするコンボボックスも変更されます。

これが機能するためには、プログラミング インターフェイスが「再入可能」である必要がありますが、リボン システムは明らかにそうではありません。

考えられる解決策はいくつかあります。

  • リボンからリボンを変更しないでください。構成 GUI を別の場所に移動してください。
  • コンボボックスに目的のアクションをどこかに保存させ、コンボボックスイベントの終了後に実行される別のイベントをトリガーします。たとえば、非常に短い間隔 (1) で TTimer を設定し、コンボボックス イベントでそのタイマーを有効にすると、TTimer イベントが発生したときに、新しい選択に従ってリボン システムを変更できます。再入可能 API。
于 2009-10-06T14:27:33.540 に答える