| 
			
				|  | Cheat Engine The Official Site of Cheat Engine
 
 
 |  
 
	
		| View previous topic :: View next topic |  
		| Author | Message |  
		| GH*master Expert Cheater
 
  Reputation: 8 
 Joined: 10 Jan 2008
 Posts: 159
 
 
 | 
			
				|  Posted: Thu Apr 26, 2012 1:10 am    Post subject: Call original function "OnResize" |   |  
				| 
 |  
				| I have problem with call original function "OnResize"  I do not know how to call it   
 CE 6.2 Beta 6
 
 
  	  | Code: |  	  | function OnBtnMoveAllAddressesClick() memscan = getCurrentMemscan()
 foundlist = memscan_getAttachedFoundlist(memscan)
 addresslist = getAddressList()
 max = foundlist_getCount(foundlist) - 1
 for index=0, max do
 addr = foundlist_getAddress(foundlist, index)
 createTableEntry = addresslist_createMemoryRecord(addresslist)
 memoryrecord_setDescription(createTableEntry, "Some Address")
 memoryrecord_setAddress(createTableEntry,addr)
 end
 end
 
 
 function OnResizePanel5(sender)
 widthPanel5, heightPanel5 = control_getSize(Panel5)
 control_setPosition(btnMoveAllAddresses, widthPanel5 - 345,heightPanel5 - 75)
 control_setSize(btnMoveAllAddresses, 22,22)
 
 -- call original function
 -- ????
 end
 
 controlMainForm = getMainForm()
 Panel5 = wincontrol_getControl(controlMainForm,3)
 
 btnMoveAllAddresses = createButton(Panel5)
 control_setCaption(btnMoveAllAddresses, '>>')
 control_onClick(btnMoveAllAddresses, OnBtnMoveAllAddressesClick)
 
 --luaFun, code, data = getMethodProperty(Panel5, 'OnResize')
 setMethodProperty(Panel5, 'OnResize', OnResizePanel5)
 | 
 |  |  
		| Back to top |  |  
		|  |  
		| atom0s Moderator
 
  Reputation: 205 
 Joined: 25 Jan 2006
 Posts: 8587
 Location: 127.0.0.1
 
 | 
			
				|  Posted: Thu Apr 26, 2012 1:28 am    Post subject: |   |  
				| 
 |  
				| You can store the original before you override it and then call it. Like this: 
 
  	  | Code: |  	  | MoveAllExtension =
 {
 HasExecuted     = false,    -- Ensure we only run this once..
 OrigOnResize    = nil,      -- Original OnResize function..
 btnMoveAll      = nil,      -- Our new button..
 };
 
 function MoveAllExtension.OnMoveAllClicked( sender )
 print( 'hello' );
 end
 
 function MoveAllExtension.OnResizeOverride( sender )
 local mainForm = getMainForm();
 local mainPanel = wincontrol_getControl( mainForm, 3 );
 local mainPanelWidth, mainPanelHeight = control_getSize( mainPanel );
 
 control_setPosition( MoveAllExtension.btnMoveAll, mainPanelWidth - 345, mainPanelHeight - 75 );
 control_setSize( MoveAllExtension.btnMoveAll, 22, 22 );
 
 -- Call original..
 MoveAllExtension.OrigOnResize( sender );
 end
 
 if (MoveAllExtension.HasExecuted == false) then
 local mainForm = getMainForm();
 local mainPanel = wincontrol_getControl( mainForm, 3 );
 
 MoveAllExtension.btnMoveAll = createButton( mainPanel );
 control_setCaption( MoveAllExtension.btnMoveAll, '>>' );
 control_onClick( MoveAllExtension.btnMoveAll, MoveAllExtension.OnMoveAllClicked );
 
 MoveAllExtension.OrigOnResize, _, _ = getMethodProperty( mainPanel, 'OnResize' );
 setMethodProperty( mainPanel, 'OnResize', MoveAllExtension.OnResizeOverride );
 end
 
 
 | 
 _________________
 
 - Retired. |  |  
		| Back to top |  |  
		|  |  
		| GH*master Expert Cheater
 
  Reputation: 8 
 Joined: 10 Jan 2008
 Posts: 159
 
 
 |  |  
		| Back to top |  |  
		|  |  
		| atom0s Moderator
 
  Reputation: 205 
 Joined: 25 Jan 2006
 Posts: 8587
 Location: 127.0.0.1
 
 | 
			
				|  Posted: Thu Apr 26, 2012 2:25 am    Post subject: |   |  
				| 
 |  
				| In that case, you need to handle the OnResize of the main form and not the panel: 
 
  	  | Code: |  	  | MoveAllExtension =
 {
 HasExecuted     = false,    -- Ensure we only run this once..
 OrigOnResize    = nil,      -- Original OnResize function..
 btnMoveAll      = nil,      -- Our new button..
 };
 
 function MoveAllExtension.OnMoveAllClicked( sender )
 print( 'hello' );
 end
 
 function MoveAllExtension.OnResizeOverride( sender )
 local mainForm = getMainForm();
 local mainPanel = wincontrol_getControl( mainForm, 3 );
 local mainPanelWidth, mainPanelHeight = control_getSize( mainPanel );
 
 control_setPosition( MoveAllExtension.btnMoveAll, mainPanelWidth - 345, mainPanelHeight - 75 );
 control_setSize( MoveAllExtension.btnMoveAll, 22, 22 );
 
 -- Call original..
 MoveAllExtension.OrigOnResize( sender );
 end
 
 if (MoveAllExtension.HasExecuted == false) then
 local mainForm = getMainForm();
 local mainPanel = wincontrol_getControl( mainForm, 3 );
 
 MoveAllExtension.btnMoveAll = createButton( mainPanel );
 control_setCaption( MoveAllExtension.btnMoveAll, '>>' );
 control_onClick( MoveAllExtension.btnMoveAll, MoveAllExtension.OnMoveAllClicked );
 
 MoveAllExtension.OrigOnResize, _, _ = getMethodProperty( mainForm, 'OnResize' );
 setMethodProperty( mainForm, 'OnResize', MoveAllExtension.OnResizeOverride );
 end
 
 | 
 _________________
 
 - Retired. |  |  
		| Back to top |  |  
		|  |  
		| Dark Byte Site Admin
 
  Reputation: 470 
 Joined: 09 May 2003
 Posts: 25807
 Location: The netherlands
 
 | 
			
				|  Posted: Thu Apr 26, 2012 4:10 am    Post subject: |   |  
				| 
 |  
				| Please note that the code and data parameters are important here This code for example:
 
  	  | Code: |  	  | speedbutton3.top := foundlist3.top + foundlist3.Height - speedbutton3.Height;
 speedbutton3.left := foundlist3.left + foundlist3.Width + 2;
 
 | 
 would not know which speedbutton3 to affect (there could be more mainforms)
 and without the code parameter it wouldn't know where Panel5Resize is (The function that is returned is just a NotifyEvent function)
 
 try something like this:
 
  	  | Code: |  	  | MoveAllExtension =
 {
 HasExecuted     = false,    -- Ensure we only run this once..
 OrigOnResize    = nil,      -- Original OnResize function..
 OrigOnResizeCode = nil,     -- If orig was native this will hold the Code field, if lua, nil
 OrigOnResizeData = nil,     -- "  "  "
 btnMoveAll      = nil,      -- Our new button..
 };
 
 function MoveAllExtension.OnMoveAllClicked( sender )
 print( 'hello' );
 end
 
 function MoveAllExtension.OnResizeOverride( sender )
 local mainForm = getMainForm();
 local mainPanel = wincontrol_getControl( mainForm, 3 );
 local mainPanelWidth, mainPanelHeight = control_getSize( mainPanel );
 
 control_setPosition( MoveAllExtension.btnMoveAll, mainPanelWidth - 345, mainPanelHeight - 75 );
 control_setSize( MoveAllExtension.btnMoveAll, 22, 22 );
 
 -- Call original..
 if (MoveAllExtension.OrigOnResizeCode==nil) then
 --lua call
 MoveAllExtension.OrigOnResize( sender );
 else
 --native call
 MoveAllExtension.OrigOnResize(MoveAllExtension.OrigOnResizeCode, MoveAllExtension.OrigOnResizeData, sender );
 end
 end
 
 if (MoveAllExtension.HasExecuted == false) then
 local mainForm = getMainForm();
 local mainPanel = wincontrol_getControl( mainForm, 3 );
 
 MoveAllExtension.btnMoveAll = createButton( mainPanel );
 control_setCaption( MoveAllExtension.btnMoveAll, '>>' );
 control_onClick( MoveAllExtension.btnMoveAll, MoveAllExtension.OnMoveAllClicked );
 
 MoveAllExtension.OrigOnResize, MoveAllExtension.OrigOnResizeCode, MoveAllExtension.OrigOnResizeData = getMethodProperty( mainPanel, 'OnResize' );
 setMethodProperty( mainPanel, 'OnResize', MoveAllExtension.OnResizeOverride );
 end
 
 | 
 (Adjust the object names accordingly)
 
 Just wondering, is it possible to make lua return a 'function'-type object with the code and data attached to it ? (So calling returnedfunction(sender) actually calls returnedfunction(storedcode,storeddata,sender)
 _________________
 
 Do not ask me about online cheats. I don't know any and wont help finding them.
 Like my help? Join me on Patreon so i can keep helping
 |  |  
		| Back to top |  |  
		|  |  
		| GH*master Expert Cheater
 
  Reputation: 8 
 Joined: 10 Jan 2008
 Posts: 159
 
 
 | 
			
				|  Posted: Thu Apr 26, 2012 5:01 am    Post subject: |   |  
				| 
 |  
				| I copy & pastel code in lua console and try run it. Unfortunately, yours code does not work. 
 
 Last Wiccaan lua code exception:
 
 Error:[string "MoveAllExtension =..."]:21: attempt to call field 'OrigOnResize' (a nil value)
 
 
 Last Dark Byte lua code exception:
 Error:Access violation
 
 
 -------------
 This code in source CE (rev 1368) does not execut
 
 
  	  | Code: |  	  | procedure TMainForm.Panel5Resize(Sender: TObject);
 begin
 cbSpeedhack.left := panel5.clientwidth - cbspeedhack.Width;
 cbUnrandomizer.left := cbspeedhack.left;
 gbScanOptions.Left := cbUnrandomizer.left - gbScanOptions.Width - 3;
 
 speedbutton3.top := foundlist3.top + foundlist3.Height - speedbutton3.Height;
 speedbutton3.left := foundlist3.left + foundlist3.Width + 2;
 foundlist3.Columns[1].Width := foundlist3.ClientWidth - foundlist3.Columns[0].Width;
 
 ScanText.left := scanvalue.left; //lazarus rev  25348 32-bit fix
 if ScanText2 <> nil then
 scantext2.left := scanvalue2.Left;
 
 if andlabel <> nil then
 andlabel.Left := scanvalue2.Left - 20;
 
 
 lblcompareToSavedScan.left :=
 newscan.left + ((((nextscanbutton.left + nextscanbutton.Width) - newscan.left) div 2) -
 (lblcompareToSavedScan.Width div 2));
 
 if cbpercentage <> nil then
 cbpercentage.left := scantype.left + scantype.Width + 5;
 
 end;
 | 
 |  |  
		| Back to top |  |  
		|  |  
		| Dark Byte Site Admin
 
  Reputation: 470 
 Joined: 09 May 2003
 Posts: 25807
 Location: The netherlands
 
 | 
			
				|  Posted: Thu Apr 26, 2012 5:05 am    Post subject: |   |  
				| 
 |  
				| did you adjust the objectnames as I said ? (e.g instead of mainpanel that panel you want, and of course, don't forget to actually find the panel object first) That script I posted will never work just like that, it's just to show how to store and call the native function
 
 Anyhow, main thing you need to know is:
 
 OriginalOnResize(OriginalCode, OriginalData, sender)
 _________________
 
 Do not ask me about online cheats. I don't know any and wont help finding them.
 Like my help? Join me on Patreon so i can keep helping
 |  |  
		| Back to top |  |  
		|  |  
		| GH*master Expert Cheater
 
  Reputation: 8 
 Joined: 10 Jan 2008
 Posts: 159
 
 
 | 
			
				|  Posted: Thu Apr 26, 2012 9:02 am    Post subject: |   |  
				| 
 |  
				| Thank you, Dark Byte. I do not know how, but the code now does work 
 
  	  | Code: |  	  | MoveAllExtension = {
 HasExecuted     = false,    -- Ensure we only run this once..
 OrigOnResize    = nil,      -- Original OnResize function..
 OrigOnResizeCode = nil,     -- If orig was native this will hold the Code field, if lua, nil
 OrigOnResizeData = nil,     -- "  "  "
 btnMoveAll      = nil,      -- Our new button..
 };
 
 function MoveAllExtension.OnMoveAllClicked( sender )
 print( 'hello' );
 end
 
 function MoveAllExtension.OnResizeOverride( sender )
 local mainForm = getMainForm();
 local mainPanel = wincontrol_getControl( mainForm, 3 );
 local mainPanelWidth, mainPanelHeight = control_getSize( mainPanel );
 
 control_setPosition( MoveAllExtension.btnMoveAll, mainPanelWidth - 345, mainPanelHeight - 75 );
 control_setSize( MoveAllExtension.btnMoveAll, 22, 22 );
 
 -- Call original..
 if (MoveAllExtension.OrigOnResizeCode==nil) then
 --lua call
 print("1")
 MoveAllExtension.OrigOnResize( sender );
 else
 --native call
 print("native call") -- every call... yes, yes, yes.. it is work!
 MoveAllExtension.OrigOnResize(MoveAllExtension.OrigOnResizeCode, MoveAllExtension.OrigOnResizeData, sender );
 end
 end
 
 if (MoveAllExtension.HasExecuted == false) then
 local mainForm = getMainForm();
 local mainPanel = wincontrol_getControl( mainForm, 3 );
 
 MoveAllExtension.btnMoveAll = createButton( mainPanel );
 control_setCaption( MoveAllExtension.btnMoveAll, '>>' );
 control_onClick( MoveAllExtension.btnMoveAll, MoveAllExtension.OnMoveAllClicked );
 
 MoveAllExtension.OrigOnResize, MoveAllExtension.OrigOnResizeCode, MoveAllExtension.OrigOnResizeData = getMethodProperty( mainPanel, 'OnResize' );
 setMethodProperty( mainPanel, 'OnResize', MoveAllExtension.OnResizeOverride );
 end
 | 
 
 But line "print("1")" is never used. Hmm.. why?
 |  |  
		| Back to top |  |  
		|  |  
		| mgr.inz.Player I post too much
 
  Reputation: 222 
 Joined: 07 Nov 2008
 Posts: 4438
 Location: W kraju nad Wisla. UTC+01:00
 
 |  |  
		| Back to top |  |  
		|  |  
		| GH*master Expert Cheater
 
  Reputation: 8 
 Joined: 10 Jan 2008
 Posts: 159
 
 
 | 
			
				|  Posted: Thu Apr 26, 2012 9:30 am    Post subject: |   |  
				| 
 |  
				| Ok. I understand. |  |  
		| Back to top |  |  
		|  |  
		| mgr.inz.Player I post too much
 
  Reputation: 222 
 Joined: 07 Nov 2008
 Posts: 4438
 Location: W kraju nad Wisla. UTC+01:00
 
 | 
			
				|  Posted: Thu Apr 26, 2012 11:23 am    Post subject: |   |  
				| 
 |  
				|  	  | Quote: |  	  | This code in source CE (rev 1368) does not execut | 
 so, call original OnResize first.
 
 
  	  | Quote: |  	  | Because some visual control component not change position in original OnResize | 
 
 
 
 Full, working script (based on Wiccaan's and Dark Byte's script):
 
  	  | Code: |  	  | MoveAllExtension = {
 HasExecuted     = false,
 OrigOnResize    = nil,
 OrigOnResizeCode = nil,
 OrigOnResizeData = nil,
 btnMoveAll      = nil,
 SpeedButton3    = nil
 }
 
 function MoveAllExtension.OnMoveAllClicked( sender )
 local memscan = getCurrentMemscan()
 local foundlist = memscan_getAttachedFoundlist(memscan)
 local addresslist = getAddressList()
 
 for index=0, foundlist_getCount(foundlist) - 1 do
 local addr = foundlist_getAddress(foundlist, index)
 local createTableEntry = addresslist_createMemoryRecord(addresslist)
 memoryrecord_setDescription(createTableEntry, "Some Address")
 memoryrecord_setAddress(createTableEntry,addr)
 end
 
 end
 
 function MoveAllExtension.OnResizeOverride( sender )
 if (MoveAllExtension.OrigOnResizeCode==nil) then
 MoveAllExtension.OrigOnResize( sender ) -- lua call
 else
 MoveAllExtension.OrigOnResize(MoveAllExtension.OrigOnResizeCode, MoveAllExtension.OrigOnResizeData, sender )--native call
 end
 
 local x,y = control_getPosition( MoveAllExtension.SpeedButton3 )
 control_setPosition( MoveAllExtension.btnMoveAll, x, y - 25)
 end
 
 if (MoveAllExtension.HasExecuted == false) then
 
 MoveAllExtension.HasExecuted = true
 local mainForm = getMainForm()
 local Panel5 = component_findComponentByName(mainForm,'Panel5')
 MoveAllExtension.SpeedButton3 = component_findComponentByName(mainForm,'SpeedButton3')
 
 MoveAllExtension.btnMoveAll = createButton( Panel5 )
 control_setCaption( MoveAllExtension.btnMoveAll, '>>' )
 setProperty(MoveAllExtension.btnMoveAll, 'Hint', 'Copy ALL items to the address list')
 setProperty(MoveAllExtension.btnMoveAll, 'ShowHint', 'True')
 
 local w,h = control_getSize( MoveAllExtension.SpeedButton3 )
 local x,y = control_getPosition( MoveAllExtension.SpeedButton3 )
 
 control_setSize( MoveAllExtension.btnMoveAll, w, h )
 control_setPosition( MoveAllExtension.btnMoveAll, x, y - 25)
 
 control_onClick( MoveAllExtension.btnMoveAll, MoveAllExtension.OnMoveAllClicked )
 
 MoveAllExtension.OrigOnResize,
 MoveAllExtension.OrigOnResizeCode,
 MoveAllExtension.OrigOnResizeData = getMethodProperty( Panel5, 'OnResize' )
 
 setMethodProperty( Panel5, 'OnResize', MoveAllExtension.OnResizeOverride )
 end
 | 
 _________________
 
 |  |  
		| Back to top |  |  
		|  |  
		| GH*master Expert Cheater
 
  Reputation: 8 
 Joined: 10 Jan 2008
 Posts: 159
 
 
 | 
			
				|  Posted: Thu Apr 26, 2012 8:05 pm    Post subject: |   |  
				| 
 |  
				| Nice work )) |  |  
		| Back to top |  |  
		|  |  
		| Dark Byte Site Admin
 
  Reputation: 470 
 Joined: 09 May 2003
 Posts: 25807
 Location: The netherlands
 
 | 
			
				|  Posted: Fri Apr 27, 2012 11:28 am    Post subject: |   |  
				| 
 |  
				| Just so you know this method may get changed before ce is fully released. (Reading up about upvalues) 
 Edit: Yup, this won't work anymore in next version (remove the code and data part)
 This I why I don't recommend writing tutorials for beta stuff, I tend to completly overhaul stuff till the release
 _________________
 
 Do not ask me about online cheats. I don't know any and wont help finding them.
 Like my help? Join me on Patreon so i can keep helping
 |  |  
		| Back to top |  |  
		|  |  
		|  |  
  
	| 
 
 | You cannot post new topics in this forum You cannot reply to topics in this forum
 You cannot edit your posts in this forum
 You cannot delete your posts in this forum
 You cannot vote in polls in this forum
 You cannot attach files in this forum
 You can download files in this forum
 
 |  |