Forum > Beginners
Setting events stored in other unit to controls
Gald:
Hello hello!
I trying to do something like this:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---Label1.OnClick:=@LabelClick;
But the event LabelClick is on another unit.
None of this below is working.
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---Label1.OnClick:=@Unit2.LabelClick;Label1.OnClick:=Unit2.@LabelClick;Label1.OnClick:=Unit2.SomeClass.LabelClick;Label1.OnClick:=Unit2.SomeClass.@LabelClick;Label1.OnClick:=@Unit2.SomeClass.LabelClick;
Then, how can I do it?
Bart:
Define "not working".
Compilation error?
Runtime error?
Something else?
Bart
Gald:
--- Quote from: Bart on May 09, 2021, 07:25:15 pm ---Define "not working".
--- End quote ---
C:\Test\unit1.pas(37,20) Error: (4001) Incompatible types: got "<address of procedure(TObject);Register>" expected "<procedure variable type of procedure(TObject) of object;Register>"
There's also this hit info on Attachment.
Gald:
Could you please look at this sample project?
I still having problems.
Handoko:
This works:
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---unit Unit1; {$mode objfpc}{$H+} interface uses Forms, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); private procedure TheReplacement(Sender: TObject); public end; var Form1: TForm1; implementation uses Unit2; {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject);begin Label1.OnClick := @TheReplacement;end; procedure TForm1.TheReplacement(Sender: TObject);begin OnClickReplacement(Sender);end; end.
--- Code: Pascal [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---unit Unit2; {$mode objfpc}{$H+} interface uses StdCtrls, Graphics; procedure OnClickReplacement(Sender: TObject); implementation procedure OnClickReplacement(Sender: TObject);begin if not(Sender is TLabel) then Exit; (Sender as TLabel).Font.Style := [fsBold];end; end.
Just to warn you, don't use such trick too much. Or your code will be become spaghetti code:
https://en.wikipedia.org/wiki/Spaghetti_code
Navigation
[0] Message Index
[#] Next page