Нарушение прав доступа, если я пытаюсь изменить стиль ленты, используя TRibbonCombobox - PullRequest
2 голосов
/ 02 октября 2009

Я получаю нарушение прав доступа, если я пытаюсь изменить стиль ленты с помощью 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

если я сделаю изменение стиля с помощью кнопки на панели ленты, все будет работать нормально.

спасибо за вашу помощь!

1 Ответ

1 голос
/ 06 октября 2009

Вы изменяете стили ленты, которая также изменяет комбинированный список, запускающий событие.

Чтобы это работало, интерфейс программирования должен быть «входящим», а ленточная система явно не работает.

Существует несколько возможных решений:

  • Не изменяйте ленту с ленты, переместите графический интерфейс настройки в другое место.
  • Заставьте комбо-бокс хранить где-нибудь нужное действие и вызвать другое событие, которое будет выполнено после завершения вашего комбо-бокса Например, вы можете установить TTimer с очень небольшим интервалом (1), а затем включить этот таймер в событии combobox, чтобы при возникновении события TTimer система ленточных носителей могла быть изменена в соответствии с новым выбором без необходимости Реентрант API.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...