Sergey,
I am replacing the standard toolbars in the RichView Actions demo with ExpressBars from DevExpress.
I assigned actions to all of the toolbar buttons and they are working. However, the buttons do not reflect the editor state. For example, when the Bold button is clicked, it does not stay depressed, and I cannot remove bold. All controls are enabled, even when some do not apply.
Also, I have this compiled as an ActiveX "application" and I used the code from a 2004 posting about DLL's to make sure my actions execute correctly. To make things more complex, my "editor" (toolbars and TRichViewEdit) is in a frame so I can place it in multiple forms.
Actions are still a mystery to me and I do not understand how they allow interaction between the controls and the editor so that the current state is reflected.
What am I missing?
TRichViewEdit, Actions and ExpressBars
-
- Site Admin
- Posts: 17559
- Joined: Sat Aug 27, 2005 10:28 am
- Contact:
-
- Posts: 27
- Joined: Mon Aug 29, 2005 7:08 pm
Sergey,
Thanks. I figured it out. I did not understand how actions were able to update the connected controls. The issue was the same as a 2004 post about no automatic updates in DLL's.
The code you posted did not work:
Re: TDBRichViewEdit in the DLL
Date: Sat, 4 Sep 2004 19:05:44 +0400
procedure TMyForm.Timer1Timer(Sender: TObject);
var i: Integer;
begin
for i := 0 to ComponentCount-1 do
if Components is TrvAction then
TrvAction(Components).UpdateTarget(RichViewEdit1);
end;
The problem is that no component is evaluated as a TrvAction. I modified the code as follows and it did work:
procedure TfrMacroEditor.tmActionUpdateTimer(Sender: TObject);
var
x : integer;
begin
with dmRichViewMod.alEditor do
for x := 0 to ActionCount - 1 do
if Actions[x] is TrvAction then
Actions[x].UpdateTarget(rvMacro);
end;
Thanks. I figured it out. I did not understand how actions were able to update the connected controls. The issue was the same as a 2004 post about no automatic updates in DLL's.
The code you posted did not work:
Re: TDBRichViewEdit in the DLL
Date: Sat, 4 Sep 2004 19:05:44 +0400
procedure TMyForm.Timer1Timer(Sender: TObject);
var i: Integer;
begin
for i := 0 to ComponentCount-1 do
if Components is TrvAction then
TrvAction(Components).UpdateTarget(RichViewEdit1);
end;
The problem is that no component is evaluated as a TrvAction. I modified the code as follows and it did work:
procedure TfrMacroEditor.tmActionUpdateTimer(Sender: TObject);
var
x : integer;
begin
with dmRichViewMod.alEditor do
for x := 0 to ActionCount - 1 do
if Actions[x] is TrvAction then
Actions[x].UpdateTarget(rvMacro);
end;