cheat-engine/Cheat Engine/frameHotkeyConfigUnit.pas
2023-08-25 08:48:13 +02:00

360 lines
9.3 KiB
ObjectPascal
Executable File

unit frameHotkeyConfigUnit;
{$MODE Delphi}
interface
uses
{$ifdef darwin}
macport,
{$endif}
{$ifdef windows}
windows,
{$endif}LCLIntf, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, LResources, Menus, Buttons, CEFuncProc,
commonTypeDefs, LCLType, betterControls;
const cehotkeycount=32;
type
{ TframeHotkeyConfig }
TframeHotkeyConfig = class(TFrame)
btnExcludeProcesses: TButton;
cbCenterOnPopup: TCheckBox;
cbHideAllWindows: TCheckBox;
cbStopOnRelease: TCheckBox;
fhcImageList: TImageList;
MenuItem1: TMenuItem;
Panel1: TPanel;
Label1: TLabel;
ListBox1: TListBox;
Panel2: TPanel;
Label2: TLabel;
Edit1: TEdit;
Button3: TButton;
Panel3: TPanel;
Label52: TLabel;
edtSHSpeed: TEdit;
Panel4: TPanel;
Label3: TLabel;
Edit4: TEdit;
Panel5: TPanel;
edtKeypollInterval: TEdit;
edtHotkeyDelay: TEdit;
Label4: TLabel;
Label5: TLabel;
PopupMenu1: TPopupMenu;
procedure btnExcludeProcessesClick(Sender: TObject);
procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure edtSHSpeedChange(Sender: TObject);
procedure edtSHSpeedExit(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Button3Click(Sender: TObject);
procedure ListBox1DrawItem(Control: TWinControl; Index: Integer;
ARect: TRect; State: TOwnerDrawState);
procedure ListBox1SelectionChange(Sender: TObject; User: boolean);
procedure MenuItem1Click(Sender: TObject);
private
{ Private declarations }
currentspeed: integer;
increasespeed: boolean;
procedure updatehotkey;
procedure updatespeed;
public
{ Public declarations }
newhotkeys: array [0..cehotkeycount-1] of tkeycombo;
newspeedhackspeed1: tspeedhackspeed;
newspeedhackspeed2: tspeedhackspeed;
newspeedhackspeed3: tspeedhackspeed;
newspeedhackspeed4: tspeedhackspeed;
newspeedhackspeed5: tspeedhackspeed;
speedupdelta: single;
slowdowndelta: single;
end;
implementation
uses frmExcludeHideUnit;
procedure TFrameHotkeyConfig.UpdateSpeed;
begin
if panel4.Visible then
begin
if increasespeed then
begin
speedupdelta:=strtofloat(edit4.Text);
end
else
begin
slowdowndelta:=strtofloat(edit4.Text);
end
end;
if panel3.Visible then
begin
if currentspeed=1 then
begin
newspeedhackspeed1.speed:=StrToFloat(edtSHspeed.Text);
newspeedhackspeed1.disablewhenreleased:=cbStopOnRelease.checked;
newspeedhackspeed1.keycombo:=newhotkeys[currentspeed+3];
end else
if currentspeed=2 then
begin
newspeedhackspeed2.speed:=StrToFloat(edtSHspeed.Text);
newspeedhackspeed2.disablewhenreleased:=cbStopOnRelease.checked;
newspeedhackspeed2.keycombo:=newhotkeys[currentspeed+3];
end else
if currentspeed=3 then
begin
newspeedhackspeed3.speed:=StrToFloat(edtSHspeed.Text);
newspeedhackspeed3.disablewhenreleased:=cbStopOnRelease.checked;
newspeedhackspeed3.keycombo:=newhotkeys[currentspeed+3];
end else
if currentspeed=4 then
begin
newspeedhackspeed4.speed:=StrToFloat(edtSHspeed.Text);
newspeedhackspeed4.disablewhenreleased:=cbStopOnRelease.checked;
newspeedhackspeed4.keycombo:=newhotkeys[currentspeed+3];
end else
if currentspeed=5 then
begin
newspeedhackspeed5.speed:=StrToFloat(edtSHspeed.Text);
newspeedhackspeed5.disablewhenreleased:=cbStopOnRelease.checked;
newspeedhackspeed5.keycombo:=newhotkeys[currentspeed+3];
end;
end;
if (listbox1.ItemIndex>=4) and (listbox1.itemindex<=8) then
begin
currentspeed:=listbox1.ItemIndex-3;
case currentspeed of
1:
begin
edtSHSpeed.text:=format('%.3f',[newspeedhackspeed1.speed]);
cbStopOnRelease.checked:=newspeedhackspeed1.disablewhenreleased;
end;
2:
begin
edtSHSpeed.text:=format('%.3f',[newspeedhackspeed2.speed]);
cbStopOnRelease.checked:=newspeedhackspeed2.disablewhenreleased;
end;
3:
begin
edtSHSpeed.text:=format('%.3f',[newspeedhackspeed3.speed]);
cbStopOnRelease.checked:=newspeedhackspeed3.disablewhenreleased;
end;
4:
begin
edtSHSpeed.text:=format('%.3f',[newspeedhackspeed4.speed]);
cbStopOnRelease.checked:=newspeedhackspeed4.disablewhenreleased;
end;
5:
begin
edtSHSpeed.text:=format('%.3f',[newspeedhackspeed5.speed]);
cbStopOnRelease.checked:=newspeedhackspeed5.disablewhenreleased;
end;
end;
panel3.Visible:=true;
panel4.Visible:=false;
end else panel3.Visible:=false;
if (listbox1.ItemIndex=9) or (listbox1.ItemIndex=10) then
begin
increasespeed:=listbox1.itemindex=9;
if increasespeed then
edit4.Text:=format('%.3f',[speedupdelta])
else
edit4.Text:=format('%.3f',[slowdowndelta]);
panel4.visible:=true;
panel3.Visible:=false;
end else panel4.Visible:=false;
end;
procedure TFrameHotkeyConfig.updatehotkey;
begin
if (listbox1.ItemIndex>=0) and (listbox1.ItemIndex<listbox1.Items.Count) then
edit1.Text:=ConvertKeyComboToString(newhotkeys[listbox1.ItemIndex]);
updatespeed;
end;
procedure TframeHotkeyConfig.ListBox1Click(Sender: TObject);
begin
updatehotkey;
end;
procedure TframeHotkeyConfig.edtSHSpeedChange(Sender: TObject);
begin
end;
procedure TframeHotkeyConfig.edtSHSpeedExit(Sender: TObject);
begin
try
updatespeed;
except
end;
end;
procedure TframeHotkeyConfig.Edit1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var key: word;
begin
key:=0;
{$ifdef windows}
case button of
mbMiddle: key:=VK_MBUTTON;
mbExtra1: key:=VK_XBUTTON1;
mbExtra2: key:=VK_XBUTTON2;
end;
if key<>0 then
Edit1KeyDown(edit1, key, shift);
{$endif}
end;
procedure TframeHotkeyConfig.btnExcludeProcessesClick(Sender: TObject);
begin
{$ifndef net}
with tfrmExcludeHide.create(self) do
begin
showmodal;
free;
end;
{$endif}
end;
{$ifdef darwin}
function isModifier(k: word): boolean;
begin
result:=false;
case k of
vk_lwin, vk_rwin, vk_shift,vk_lshift,
vk_rshift, VK_CAPITAL, VK_MENU, vk_LMENU,
vk_RMENU, VK_CONTROL, VK_LCONTROL, VK_RCONTROL:
result:=true;
end;
end;
{$endif}
procedure TframeHotkeyConfig.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var i: integer;
begin
if listbox1.ItemIndex<>-1 then
begin
if newhotkeys[listbox1.ItemIndex][4]=0 then
begin
for i:=0 to 4 do
begin
{$ifdef darwin}
if (newhotkeys[listbox1.ItemIndex][i]<>0) and (not ismodifier(key)) and (not ismodifier(newhotkeys[listbox1.ItemIndex][i])) then break; //only one
{$endif}
if newhotkeys[listbox1.ItemIndex][i]=0 then
begin
newhotkeys[listbox1.ItemIndex][i]:=key;
break;
end
else
if newhotkeys[listbox1.ItemIndex][i]=key then
break;
end;
end;
edit1.Text:=ConvertKeyComboToString(newhotkeys[listbox1.ItemIndex]);
end;
end;
procedure TframeHotkeyConfig.Button3Click(Sender: TObject);
begin
if listbox1.ItemIndex<>-1 then
begin
zeromemory(@newhotkeys[listbox1.ItemIndex][0],10);
edit1.Text:=ConvertKeyComboToString(newhotkeys[listbox1.ItemIndex]);
edit1.SetFocus;
end;
end;
procedure TframeHotkeyConfig.ListBox1DrawItem(Control: TWinControl;
Index: Integer; ARect: TRect; State: TOwnerDrawState);
const
TO_START_ALIGNMENT: array[Boolean] of TAlignment = (taLeftJustify, taRightJustify);
var
OldTextStyle, NewTextStyle: TTextStyle;
Canvas: TCanvas;
Hotkey: string;
begin
Canvas := TListBox(Control).Canvas;
if not(odBackgroundPainted in State) then
Canvas.FillRect(ARect);
ARect.Left += 2;
ARect.Right -= 2;
Canvas.font.color:=clWindowtext;
OldTextStyle := Canvas.TextStyle;
NewTextStyle.Layout:= tlCenter;
Hotkey := ConvertKeyComboToString(newhotkeys[Index]);
if(Hotkey <> '') then
begin
Hotkey := '(' + Hotkey + ')';
NewTextStyle.Alignment := TO_START_ALIGNMENT[not Control.UseRightToLeftAlignment];
Canvas.TextStyle := NewTextStyle;
Canvas.TextRect(ARect, ARect.Left, ARect.Top, Hotkey);
if Control.UseRightToLeftAlignment then
ARect.Left += Canvas.TextWidth(Hotkey) + 2
else
ARect.Right -= Canvas.TextWidth(Hotkey) + 2;
end;
NewTextStyle.Alignment:= TO_START_ALIGNMENT[Control.UseRightToLeftAlignment];
Canvas.TextStyle := NewTextStyle;
Canvas.TextRect(ARect, ARect.Left, ARect.Top, TListBox(Control).Items[Index]);
Canvas.TextStyle := OldTextStyle;
end;
procedure TframeHotkeyConfig.ListBox1SelectionChange(Sender: TObject;
User: boolean);
begin
if user then
updatehotkey;
end;
procedure TframeHotkeyConfig.MenuItem1Click(Sender: TObject);
var i: integer;
begin
for i:=0 to cehotkeycount-1 do
newhotkeys[i][0]:=0;
updatehotkey;
end;
initialization
{$i frameHotkeyConfigUnit.lrs}
end.