Zugriffsverletzung, wenn ich versuche, den Band-Stil mit einem TRibbonCombobox zu ändern

StackOverflow https://stackoverflow.com/questions/1511092

  •  19-09-2019
  •  | 
  •  

Frage

Ich erhalte eine Zugriffsverletzung, wenn ich versuche, den Band-Stil zu ändern, um eine TRibbonCombobox verwendet wird.

Dann habe ich geändert, um die delphi Band Demo eine Combobox Methode, um die Art zu setzen:

  1. ein TRibbonCombobox auf der Multifunktionsleiste hinzugefügt
  2. hinzugefügt einen Event-Handler

Hier ist der Ereigniscode:

procedure TfrmRibbonDemo.RibbonComboBox1Change(Sender: TObject);

begin

  if RibbonComboBox1.Text='Luna' then

    Ribbon1.Style:=RibbonLunaStyle

    else

    Ribbon1.Style:=RibbonSilverStyle;

end;

, wenn ich den Stil zu ändern (vor allem mehr als einmal) mit dem TRibbonCombobox, erhalte ich:

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

wenn ich einen Stilwechsel mit einer Taste auf der Optionsleiste machen, es funktioniert gut.

Danke für Ihre Hilfe!

War es hilfreich?

Lösung

Sie ändern die Stile des Bandes, die auch die Combobox modifiziert, die das Ereignis ausgelöst wird.

Damit dies funktioniert, eine Programmierschnittstelle sein „einspringenden“ muss, und das Bändchen-System offensichtlich nicht.

Es gibt mehrere mögliche Lösungen:

  • Sie das Band von einem Band nicht ändern, bewegen Sie den Konfigurations-GUI irgendwo anders.
  • Stellen Sie die Combobox speichern Sie die gewünschte Aktion irgendwo und ein anderes Ereignis auslösen, die nach der Beendigung Ihres Combobox Ereignis ausgeführt wird. Zum Beispiel können Sie eine TTimer mit einem sehr kleinen Intervall (1) gesetzt ist, und dann diese Zeitgeber in dem Combobox Ereignisse aktivieren, so dass, wenn das TTimer Ereignis ausgelöst wird, kann das Farbbandsystem nach der neuen Wahl geändert werden, ohne eine erfordern Reentry api.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top