Zauważyłem że jak jeżeli kontrolka edycyjna znajduje się na 2 oknie to mój poprzedni kod zachowuje się dość spontanicznie, działa jak mu się chce. Tak działa znacznie lepiej:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ToolWin, Vcl.ActnMan, Vcl.ActnCtrls,
Vcl.StdActns, System.Actions, Vcl.ActnList, System.ImageList, Vcl.ImgList,
Vcl.PlatformDefaultStyleActnCtrls, Vcl.StdCtrls, Vcl.ComCtrls;
type
TForm1 = class(TForm)
ActionToolBar1: TActionToolBar;
ActionManager1: TActionManager;
ImageList1: TImageList;
EditPaste1: TEditPaste;
EditCopy1: TEditCopy;
EditSelectAll1: TEditSelectAll;
Button1: TButton;
EditCut1: TEditCut;
RichEdit1: TRichEdit;
procedure Button1Click(Sender: TObject);
procedure ActionManager1Execute(Action: TBasicAction; var Handled: Boolean);
procedure RichEdit1ActionExecute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.ActionManager1Execute(Action: TBasicAction;
var Handled: Boolean);
begin
if (Form2.Visible) then //dla bezpieczeństwa
begin
Form2.SetFocus;
Form2.RichEdit1.SetFocus;
Action.ExecuteTarget(Form2.RichEdit1);
end;
end;
//ta procedura zdarzenia MUSI BYĆ przypisana do OnExecute każdej z tych akcji
procedure TForm1.RichEdit1ActionExecute(Sender: TObject);
begin
//empty procedure
end;
end.
Nie wiem dlaczego (i nie chce mi się wnikać) ta pusta procedura tak jak napisałem w komentarzu musi być przypisana do każdej akcji bez tego czasem zadziała a czasem nie.Przynajmniej u mnie tak jest.