Вопрос очень интересный и актуальный. Однозначно писать вот такой код нельзя - нарушается инкапсуляция.
- Код: Выделить всё
procedure Form1.GridCellClick(cell: TCell);// знаю что не так, прсто для примера :)
begin
Form2.edit.Text := Grid.Cell.Text;
end;
Способов, как минимум, есть 2.
Первый, который напрашивается, это послать контролу соответствующее сообщение. Пример можно посмотреть в папке %LAZARUS%\examples\messages\.
Наведу пример касательно вопроса.
На форму Form1кладем StringGrid1 и кнопку BitBtn1. По кнопке будем вызывать Form2, на которой расположен Edit1.
При клике по гриде в Form2.Edit1.text будем отображать количество кликов.
Собственно код
Form1
- Код: Выделить всё
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
Grids, Buttons, StdCtrls, LCLIntf;
type
{ TForm1 }
TForm1 = class(TForm)
BitBtn1: TBitBtn;
StringGrid1: TStringGrid;
procedure BitBtn1Click(Sender: TObject);
procedure StringGrid1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
uses
Unit2;
{ TForm1 }
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Form2.Show;
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
PostMessage(Form2.Handle, WM_GRIDCLICK, 1, 0);
end;
initialization
{$I unit1.lrs}
end.
Form2
unit Unit2;
- Код: Выделить всё
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
StdCtrls, windows;
const
WM_GRIDCLICK = WM_USER + 244;
type
{ TForm2 }
TForm2 = class(TForm)
Edit1: TEdit;
private
{ private declarations }
procedure WMGridClick(var Message:TMessage); message WM_GRIDCLICK;
public
{ public declarations }
end;
var
Form2: TForm2;
implementation
{ TForm2 }
procedure TForm2.WMGridClick(var Message: TMessage);
begin
Edit1.Text := inttostr(StrToIntDef(Edit1.Text, 0)+Message.WParam);
end;
initialization
{$I unit2.lrs}
end.
Эстетам объектно-ориентированного программирования этот способ кажется некрасивым. Поэтому, можно обойтись и без сообщений. Тогда нужно использовать свойство процедурного типа. Если кому интересно, могу навести пример и этого способа.