UNIT Unit9; INTERFACE USES Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, Math, StrUtils; TYPE TForm9 = Class(TForm) HotKeysTable: TStringGrid; PROCEDURE FormCreate(Sender: TObject); PROCEDURE HotKeysTableKeyPress(Sender: TObject; var Key: Char); PROCEDURE FormCloseQuery(Sender: TObject; var CanClose: Boolean); PROCEDURE HotKeysTableSelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); PROCEDURE HotKeysTableDblClick(Sender: TObject); PROCEDURE DrawTable; PROCEDURE UnregisterHotkeys; PRIVATE PROCEDURE WMHotKey(VAR Msg : TWMHotKey); MESSAGE WM_HOTKEY; PUBLIC END; VAR Form9: TForm9; IMPLEMENTATION USES Unit1, Unit2, Unit3, Unit8, Unit10; VAR _sel_col:Byte; _sel_row:Byte; {$R *.dfm} PROCEDURE TForm9.HotKeysTableDblClick(Sender: TObject); BEGIN Form10.Visible:=True; Form9.Enabled:=False; IF HotKeysTable.Cells[_sel_col,_sel_row]='' THEN Form10.InitStuff(0) ELSE Form10.InitStuff(_sel_row); END; PROCEDURE TForm9.HotKeysTableSelectCell(Sender: TObject; ACol, ARow: Integer; VAR CanSelect: Boolean); BEGIN _sel_col:=ACol; _sel_row:=ARow; CanSelect:=True; END; PROCEDURE TForm9.FormCloseQuery(Sender: TObject; var CanClose: Boolean); BEGIN Form9.Visible:=False; CanClose:=False; END; PROCEDURE TForm9.HotKeysTableKeyPress(Sender: TObject; var Key: Char); VAR i:Byte; _temp:String; BEGIN IF key=#13 THEN BEGIN Form10.Visible:=True; Form9.Enabled:=False; IF HotKeysTable.Cells[_sel_col,_sel_row]='' THEN Form10.InitStuff(0) ELSE Form10.InitStuff(_sel_row); END; IF key=#8 THEN BEGIN IF NOT (Form9.HotKeysTable.Cells[0,_sel_row]='') THEN BEGIN _temp:='Do you really want to remove the hotkey "'; IF Hotkeys.Items[_sel_row-1].MOD_Alt THEN _temp:=_temp+'ALT+'; IF Hotkeys.Items[_sel_row-1].MOD_Ctrl THEN _temp:=_temp+'CTRL+'; _temp:=_temp+VKKeys[Hotkeys.Items[_sel_row-1].Key].Name+'"?'; IF MessageBox(Form9.Handle,PChar(_temp),PChar('Really???'),MB_OKCANCEL)=IDOK THEN BEGIN UnregisterHotkeys; IF Hotkeys.Size>1 THEN BEGIN FOR i:=_sel_row-1 TO Hotkeys.Size-2 DO BEGIN Hotkeys.Items[i]:=Hotkeys.Items[i+1]; END; Hotkeys.Size:=Hotkeys.Size-1; END ELSE BEGIN IF Hotkeys.Size=1 THEN BEGIN Hotkeys.Size:=0; END; END; Form9.DrawTable; END; END; END; END; PROCEDURE TForm9.DrawTable; VAR i:Byte; _temp:String; modifiers:Integer; BEGIN Form9.HotKeysTable.Cells[0,0]:='Hotkey'; Form9.HotKeysTable.Cells[1,0]:='Target'; Form9.HotKeysTable.Cells[2,0]:='ActionType'; Form9.HotKeysTable.Cells[3,0]:='Value'; Form9.HotKeysTable.Cells[4,0]:='Value2'; Form9.HotKeysTable.RowCount:=Hotkeys.Size+2; IF Hotkeys.Size>0 THEN BEGIN FOR i:=0 TO Hotkeys.Size-1 DO BEGIN WITH Hotkeys.Items[i] DO BEGIN modifiers:=0; IF MOD_Ctrl THEN modifiers:=modifiers+MOD_Ctrl_Key; IF MOD_Alt THEN modifiers:=modifiers+MOD_Alt_Key; RegisterHotkey(Form9.Handle,i,modifiers,VKKeys[key].Value); _temp:=''; IF MOD_Ctrl THEN _temp:=_temp+'CTRL+'; IF MOD_Alt THEN _temp:=_temp+'ALT+'; Form9.HotKeysTable.Cells[0,i+1]:=_temp+VKKeys[Key].Name; IF Pos('Char',HK_Target_Types[Target_Type])>0 THEN BEGIN _temp:=HK_Target_Types[Target_Type]; IF NOT (Target_Charname='') THEN BEGIN _temp:=_temp+' (Char "'+Target_Charname+'"): '; END ELSE BEGIN _temp:=_temp+' (Char'+IntToStr(Target_CharID)+'): '; END; _temp:=_temp+CharDataStuff[Target_Item].Name; END; IF Pos('Global',HK_Target_Types[Target_Type])>0 THEN BEGIN _temp:=HK_Target_Types[Target_Type]+': '; IF Settings[Target_Item].has_box THEN _temp:=_temp+Settings[Target_Item].Item_Checkbox.Caption ELSE _temp:=_temp+Settings[Target_Item].Item_Label.Caption; END; Form9.HotKeysTable.Cells[1,i+1]:=_temp; Form9.HotKeysTable.Cells[2,i+1]:=HK_Actions[Action]; IF ('Toggle'=HK_Actions[Action]) OR ('Freeze'=HK_Actions[Action]) THEN BEGIN Form9.HotKeysTable.Cells[3,i+1]:=''; END ELSE BEGIN Form9.HotKeysTable.Cells[3,i+1]:=FloatToStr(Value); IF 'Switch value'=HK_Actions[Action] THEN BEGIN Form9.HotKeysTable.Cells[4,i+1]:=FloatToStr(Value2); END ELSE BEGIN Form9.HotKeysTable.Cells[4,i+1]:=''; END; END; END; END; END; FOR i:=0 TO 3 DO Form9.HotKeysTable.Cells[i,Form9.HotKeysTable.RowCount-1]:=''; END; PROCEDURE TForm9.FormCreate(Sender: TObject); BEGIN Sleep(50); AssignFile(HotKeysFile,_path+'\hotkeys.cfg'); Reset(HotKeysFile); Read(HotKeysFile,HotKeys); CloseFile(HotKeysFile); _sel_row:=1; _sel_col:=0; Form9.DrawTable; Form9.UnregisterHotkeys; END; PROCEDURE TForm9.WMHotkey(var Msg : TWMHotKey); VAR hk_id:Byte; i,chid:Byte; BEGIN IF _connected THEN BEGIN hk_id:=Msg.HotKey; WITH Hotkeys.Items[hk_id] DO BEGIN IF Pos('Global',HK_Target_Types[Target_Type])>0 THEN BEGIN IF 'Toggle'=HK_Actions[Action] THEN BEGIN Settings[Target_Item].Item_Checkbox.Checked:=NOT Settings[Target_Item].Item_Checkbox.Checked; Form1.Debug_Click(Settings[Target_Item].Item_Checkbox); IF Settings[Target_Item].Item_Checkbox.Checked THEN SendMessageToOni('[b. "'+Settings[Target_Item].Item_Checkbox.Caption+'" activated.]') ELSE SendMessageToOni('[b. "'+Settings[Target_Item].Item_Checkbox.Caption+'" deactivated.]'); END; IF 'Set'=HK_Actions[Action] THEN BEGIN IF Settings[Target_Item].edit_type=5 THEN BEGIN SendMessageToOni('[b. Set "'+Settings[Target_Item].Item_Checkbox.Caption+'" to '+FloatToStr(Value)+'.]'); Settings[Target_Item].Item_Edit.Text:=FloatToStr( Value ); END ELSE BEGIN SendMessageToOni('[b. Set "'+Settings[Target_Item].Item_Checkbox.Caption+'" to '+IntToStr(Floor(Value))+'.]'); Settings[Target_Item].Item_Edit.Text:=IntToStr( Floor(Value) ); END; END; IF 'Add'=HK_Actions[Action] THEN BEGIN IF Settings[Target_Item].edit_type=5 THEN BEGIN SendMessageToOni('[b. Added '+FloatToStr(Value)+' to "'+Settings[Target_Item].Item_Checkbox.Caption+'" (now='+FloatToStr( StrToFloat(Settings[Target_Item].Item_Edit.Text) + Value )+').]'); Settings[Target_Item].Item_Edit.Text:=FloatToStr( StrToFloat(Settings[Target_Item].Item_Edit.Text) + Value ); END ELSE BEGIN SendMessageToOni('[b. Added '+IntToStr(Floor(Value))+' to "'+Settings[Target_Item].Item_Checkbox.Caption+'" (now='+IntToStr( StrToInt(Settings[Target_Item].Item_Edit.Text) + Floor(Value) )+').]'); Settings[Target_Item].Item_Edit.Text:=IntToStr( StrToInt(Settings[Target_Item].Item_Edit.Text) + Floor(Value) ); END; END; IF 'Multiply'=HK_Actions[Action] THEN BEGIN IF Settings[Target_Item].edit_type=5 THEN BEGIN SendMessageToOni('[b. Multiplied "'+Settings[Target_Item].Item_Checkbox.Caption+'" with '+FloatToStr(Value)+' (now='+FloatToStr( StrToFloat(Settings[Target_Item].Item_Edit.Text) * Value )+').]'); Settings[Target_Item].Item_Edit.Text:=FloatToStr( StrToFloat(Settings[Target_Item].Item_Edit.Text) * Value ); END ELSE BEGIN SendMessageToOni('[b. Multiplied "'+Settings[Target_Item].Item_Checkbox.Caption+'" with '+IntToStr(Floor(Value))+' (now='+IntToStr( StrToInt(Settings[Target_Item].Item_Edit.Text) * Floor(Value) )+').]'); Settings[Target_Item].Item_Edit.Text:=IntToStr( StrToInt(Settings[Target_Item].Item_Edit.Text) * Floor(Value) ); END; END; IF 'Switch value'=HK_Actions[Action] THEN BEGIN IF Settings[Target_Item].edit_type=5 THEN BEGIN IF StrToFloat(Settings[Target_Item].Item_Edit.Text)=Value THEN BEGIN SendMessageToOni('[b. Switched "'+Settings[Target_Item].Item_Checkbox.Caption+'" to '+FloatToStr(Value2)+'.]'); Settings[Target_Item].Item_Edit.Text:=FloatToStr( Value2 ); END ELSE BEGIN SendMessageToOni('[b. Switched "'+Settings[Target_Item].Item_Checkbox.Caption+'" to '+FloatToStr(Value)+'.]'); Settings[Target_Item].Item_Edit.Text:=FloatToStr( Value ); END; END ELSE BEGIN IF StrToInt(Settings[Target_Item].Item_Edit.Text)=Floor(Value) THEN BEGIN SendMessageToOni('[b. Switched "'+Settings[Target_Item].Item_Checkbox.Caption+'" to '+IntToStr(Floor(Value2))+'.]'); Settings[Target_Item].Item_Edit.Text:=IntToStr( Floor(Value2) ); END ELSE BEGIN SendMessageToOni('[b. Switched "'+Settings[Target_Item].Item_Checkbox.Caption+'" to '+IntToStr(Floor(Value))+'.]'); Settings[Target_Item].Item_Edit.Text:=IntToStr( Floor(Value) ); END; END; END; END; IF Pos('Char',HK_Target_Types[Target_Type])>0 THEN BEGIN IF NOT (Target_Charname='') THEN BEGIN chid:=255; FOR i:=0 TO ais_controlled DO BEGIN IF CharData[i].Items[1].Item_Edit.Text=Target_Charname THEN BEGIN chid:=i; break; END; END; IF chid=255 THEN exit; END ELSE BEGIN chid:=Target_CharID; END; { IF Pos('Toggle',HK_Actions[Action])>0 THEN BEGIN Settings[Target_Item].Item_Checkbox.Checked:=NOT Settings[Target_Item].Item_Checkbox.Checked; Form1.Debug_Click(Settings[Target_Item].Item_Checkbox); END;} IF 'Set'=HK_Actions[Action] THEN BEGIN IF CharData[chid].Items[Target_Item].data_type=5 THEN BEGIN SendMessageToOni('[b. Set "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' to '+FloatToStr(Value)+'.]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=FloatToStr( Value ); END ELSE BEGIN SendMessageToOni('[b. Set "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' to '+IntToStr(Floor(Value))+'.]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=IntToStr( Floor(Value) ); END; END; IF 'Add'=HK_Actions[Action] THEN BEGIN IF CharData[chid].Items[Target_Item].data_type=5 THEN BEGIN SendMessageToOni('[b. Added '+FloatToStr(Value)+' to "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' (now='+FloatToStr( StrToFloat(CharData[chid].Items[Target_Item].Item_Edit.Text) + Value )+').]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=FloatToStr( StrToFloat(CharData[chid].Items[Target_Item].Item_Edit.Text) + Value ) END ELSE BEGIN SendMessageToOni('[b. Added '+IntToStr(Floor(Value))+' to "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' (now='+FloatToStr( StrToFloat(CharData[chid].Items[Target_Item].Item_Edit.Text) + Value )+').]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=IntToStr( StrToInt(CharData[chid].Items[Target_Item].Item_Edit.Text) + Floor(Value) ); END; END; IF 'Multiply'=HK_Actions[Action] THEN BEGIN IF CharData[chid].Items[Target_Item].data_type=5 THEN BEGIN SendMessageToOni('[b. Multiplied "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' with '+FloatToStr(Value)+' (now='+FloatToStr( StrToFloat(CharData[chid].Items[Target_Item].Item_Edit.Text) * Value )+').]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=FloatToStr( StrToFloat(CharData[chid].Items[Target_Item].Item_Edit.Text) * Value ) END ELSE BEGIN SendMessageToOni('[b. Multiplied "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' with '+IntToStr(Floor(Value))+' (now='+FloatToStr( StrToFloat(CharData[chid].Items[Target_Item].Item_Edit.Text) * Value )+').]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=IntToStr( StrToInt(CharData[chid].Items[Target_Item].Item_Edit.Text) * Floor(Value) ); END; END; IF 'Freeze'=HK_Actions[Action] THEN BEGIN CharData[chid].Items[Target_Item].Item_Freeze.Checked:=NOT CharData[chid].Items[Target_Item].Item_Freeze.Checked; IF CharData[chid].Items[Target_Item].Item_Freeze.Checked THEN SendMessageToOni('[b. Freeze "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' activated.]') ELSE SendMessageToOni('[b. Freeze "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' deactivated.]'); END; IF 'Set & Freeze'=HK_Actions[Action] THEN BEGIN IF CharData[chid].Items[Target_Item].Item_Freeze.Checked=False THEN BEGIN IF CharData[chid].Items[Target_Item].data_type=5 THEN BEGIN SendMessageToOni('[b. Set "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' to '+FloatToStr(Value)+' and activated freeze.]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=FloatToStr( Value ) END ELSE BEGIN SendMessageToOni('[b. Set "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' to '+IntToStr(Floor(Value))+' and activated freeze.]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=IntToStr( Floor(Value) ); END; CharData[chid].Items[Target_Item].Item_Freeze.Checked:=True; END ELSE BEGIN SendMessageToOni('[b. Freeze "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' deactivated.]'); CharData[chid].Items[Target_Item].Item_Freeze.Checked:=False; END; END; IF 'Switch value'=HK_Actions[Action] THEN BEGIN IF CharData[chid].Items[Target_Item].data_type=5 THEN BEGIN IF StrToFloat(CharData[chid].Items[Target_Item].Item_Edit.Text)=Value THEN BEGIN SendMessageToOni('[b. Switched "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' to '+FloatToStr(Value2)+'.]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=FloatToStr( Value2 ) END ELSE BEGIN SendMessageToOni('[b. Switched "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' to '+FloatToStr(Value)+'.]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=FloatToStr( Value ); END; END ELSE BEGIN IF StrToInt(CharData[chid].Items[Target_Item].Item_Edit.Text)=Floor(Value) THEN BEGIN SendMessageToOni('[b. Switched "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' to '+IntToStr(Floor(Value2))+'.]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=IntToStr( Floor(Value2) ) END ELSE BEGIN SendMessageToOni('[b. Switched "'+CharData[chid].Items[Target_Item].Item_Freeze.Caption+'" for char'+IntToStr(chid)+' to '+IntToStr(Floor(Value))+'.]'); CharData[chid].Items[Target_Item].Item_Edit.Text:=IntToStr( Floor(Value) ); END; END; END; END; END; END; END; PROCEDURE TForm9.UnregisterHotkeys; VAR i:Byte; BEGIN FOR i:=0 TO Hotkeys.Size-1 DO BEGIN UnregisterHotkey(Form9.Handle,i); END; END; END.