Zugriffsverletzung, wenn ich versuche, den Band-Stil mit einem TRibbonCombobox zu ändern
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:
- ein TRibbonCombobox auf der Multifunktionsleiste hinzugefügt
- 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!
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.