Skip to content

Commit 8efde19

Browse files
committed
ACA when launched from ide will reference the current target and not be fixed to whatever it was launched with
1 parent 85508a7 commit 8efde19

File tree

4 files changed

+54
-14
lines changed

4 files changed

+54
-14
lines changed

Source/Simba.lpr

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,17 @@
2929
SetHeapTraceOutput(Application.Location + '/' + IntToStr(GetProcessID()) + '.trc');
3030
{$ENDIF}
3131

32+
Application.CaptureExceptions := False;
33+
Application.UpdateFormatSettings := False;
34+
Application.Initialize();
35+
3236
FormatSettings.DecimalSeparator := '.';
3337
FormatSettings.ThousandSeparator := ',';
3438
FormatSettings.DateSeparator := '-';
3539
FormatSettings.TimeSeparator := ':';
3640

3741
SimbaInitialization_Call(ESimbaInit.CREATE);
3842

39-
Application.CaptureExceptions := False;
40-
Application.UpdateFormatSettings := False;
41-
Application.Initialize();
42-
4343
if Application.HasOption('help') then
4444
begin
4545
DebugLn('Usage:');

Source/ide/simba.form_main.pas

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,8 @@ TSimbaMainForm = class(TForm)
250250

251251
// Handle main menu shortcuts if editor is focused
252252
procedure DoApplicationKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
253-
254253
procedure DoTabLoaded(Sender: TObject);
254+
function DoGetWindowForACA: TWindowHandle;
255255

256256
procedure SetCustomFontSize(Value: Integer);
257257
procedure SetLayoutLocked(Value: Boolean);
@@ -291,7 +291,8 @@ implementation
291291
simba.aca, simba.dtmeditor, simba.env, simba.ide_dockinghelpers, simba.nativeinterface,
292292
simba.ide_simpleformatter, simba.component_theme,
293293
simba.threading, simba.ide_editor, simba.vartype_string, simba.misc,
294-
simba.target;
294+
simba.target,
295+
simba.vartype_windowhandle;
295296

296297
procedure TSimbaMainForm.HandleException(Sender: TObject; E: Exception);
297298

@@ -746,14 +747,8 @@ procedure TSimbaMainForm.MenuItemDocumentationClick(Sender: TObject);
746747
end;
747748

748749
procedure TSimbaMainForm.MenuItemACAClick(Sender: TObject);
749-
var
750-
Target: TSimbaTarget;
751750
begin
752-
Target := TSimbaTarget.Create();
753-
if (SimbaMainToolBar.WindowSelection <> 0) then
754-
Target.SetWindow(SimbaMainToolBar.WindowSelection);
755-
756-
ShowACA(Target, True);
751+
ShowACA(@DoGetWindowForACA);
757752
end;
758753

759754
procedure TSimbaMainForm.DoMenuItemRunClick(Sender: TObject);
@@ -1052,6 +1047,14 @@ procedure TSimbaMainForm.DoTabLoaded(Sender: TObject);
10521047
AddRecentFile(TSimbaScriptTab(Sender).ScriptFileName);
10531048
end;
10541049

1050+
function TSimbaMainForm.DoGetWindowForACA: TWindowHandle;
1051+
begin
1052+
if (SimbaMainToolBar.WindowSelection = 0) or (not SimbaMainToolBar.WindowSelection.IsValid) then
1053+
Result := GetDesktopWindow
1054+
else
1055+
Result := SimbaMainToolBar.WindowSelection;
1056+
end;
1057+
10551058
procedure TSimbaMainForm.MenuEditClick(Sender: TObject);
10561059
begin
10571060
if SimbaTabsForm.CurrentEditor <> nil then

Source/simba.aca.pas

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ interface
1313
Classes, SysUtils, Controls, ComCtrls, ExtCtrls, Forms, Graphics, Menus,
1414
simba.base, simba.colormath, simba.target;
1515

16+
type
17+
TGetWindow = function(): TWindowHandle of object;
18+
1619
// ShowOnTop
20+
procedure ShowACA(GetWindow: TGetWindow); overload;
1721
procedure ShowACA(Target: TSimbaTarget; ManageTarget: Boolean); overload;
1822
// ShowModal
1923
procedure ShowACA(Target: TSimbaTarget; ManageTarget: Boolean; out Color: TColorTolerance); overload;
@@ -51,6 +55,7 @@ TSimbaACA = class
5155
FColorListPopup: TPopupMenu;
5256
FDrawColorMenu: TMenuItem;
5357
FDrawColor: TColor;
58+
FGetWindow: TGetWindow;
5459
FTarget: TSimbaTarget;
5560
FManageTarget: Boolean;
5661

@@ -107,7 +112,8 @@ TSimbaACA = class
107112
procedure Add(Color: TColor);
108113
function GetBest: TColorTolerance;
109114
public
110-
constructor Create(Target: TSimbaTarget; ManageTarget: Boolean = True); reintroduce;
115+
constructor Create(Target: TSimbaTarget; ManageTarget: Boolean = True); reintroduce; overload;
116+
constructor Create(GetWindow: TGetWindow); reintroduce; overload;
111117
destructor Destroy; override;
112118

113119
property BestColor: TColorTolerance read GetBest;
@@ -341,6 +347,11 @@ procedure TSimbaACA.DoMatchColorClick(Sender: TObject);
341347

342348
procedure TSimbaACA.DoUpdateImgClick(Sender: TObject);
343349
begin
350+
if Assigned(@FGetWindow) then
351+
begin
352+
FTarget.SetWindow(FGetWindow());
353+
end;
354+
344355
FImageBox.SetImage(FTarget.GetImage());
345356
if (Length(FDebugTPA) > 0) then
346357
FButtonFindColor.Click()
@@ -753,6 +764,18 @@ constructor TSimbaACA.Create(Target: TSimbaTarget; ManageTarget: Boolean);
753764
end;
754765
end;
755766

767+
constructor TSimbaACA.Create(GetWindow: TGetWindow);
768+
var
769+
Target: TSimbaTarget;
770+
begin
771+
Target := TSimbaTarget.Create();
772+
Target.SetWindow(GetWindow());
773+
774+
Create(Target);
775+
776+
FGetWindow := GetWindow;
777+
end;
778+
756779
destructor TSimbaACA.Destroy;
757780
begin
758781
if (FForm <> nil) then
@@ -788,6 +811,12 @@ function TSimbaACA.GetBest: TColorTolerance;
788811
Result.Multipliers[2] := String(FEditMulti3.Edit.Text).ToFloat(0);
789812
end;
790813

814+
procedure ShowACA(GetWindow: TGetWindow);
815+
begin
816+
with TSimbaACA.Create(GetWindow) do
817+
Form.ShowOnTop();
818+
end;
819+
791820
procedure ShowACA(Target: TSimbaTarget; ManageTarget: Boolean);
792821
begin
793822
with TSimbaACA.Create(Target, ManageTarget) do

Source/simba.target.pas

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -951,6 +951,10 @@ procedure TSimbaTarget.SetDesktop;
951951

952952
procedure TSimbaTarget.SetWindow(Window: TWindowHandle);
953953
begin
954+
// unchanged
955+
if (FTargetKind = ESimbaTargetKind.WINDOW) and (FTargetWindow = Window) then
956+
Exit;
957+
954958
ChangeTarget(ESimbaTargetKind.WINDOW);
955959

956960
FTargetWindow := Window;
@@ -980,6 +984,10 @@ procedure TSimbaTarget.SetWindow(Window: TWindowHandle);
980984

981985
procedure TSimbaTarget.SetImage(Image: TSimbaImage);
982986
begin
987+
// unchanged
988+
if (FTargetKind = ESimbaTargetKind.IMAGE) and (FTargetImage = Image) then
989+
Exit;
990+
983991
ChangeTarget(ESimbaTargetKind.IMAGE);
984992

985993
FTargetImage := Image;

0 commit comments

Comments
 (0)