Access violation if i try to change the style of the ribbon using TRibbonCombobox
I am getting an access violation if I try to change the style of the ribbon using TRibbonCombobox.
then I modified the delphi ribbon demo to provide a combobox method to set the style:
- added TRibbonCombobox to ribbon panel
- added event handler
here is the event code:
procedure TfrmRibbonDemo.RibbonComboBox1Change(Sender: TObject);
begin
if RibbonComboBox1.Text='Luna' then
Ribbon1.Style:=RibbonLunaStyle
else
Ribbon1.Style:=RibbonSilverStyle;
end;
when i change the style (especially more than once) with TRibbonCombobox i get:
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
if i make a style change with a button on the ribbon bar it works fine.
Thank you for your help!
+2
source to share
1 answer
You are changing the styles of the ribbon, which also modifies the dropdown that fires the event.
For this to work, the programming interface must be "re-enabled" and the tape system obviously isn't.
There are several possible solutions:
- Do not modify the tape from the tape, move the configuration GUI to a different location.
- Make a combobox command somewhere, and fire another event that will be executed after your combobox event ends. For example, you can set the TTimer at a very small interval (1) and then enable that timer in the combobox event so that when the TTimer event fires, the tape system can be changed to reflect the new selection without requiring a reentrant api.
+1
source to share