Cuando capturaba el componente a traves del boton derecho del mouse, era la instruccion FindControl que me colocaba el nombre en una variable.
Pero como bien saben Uds no podia hacer lo contrario.
Pues bien nunca colocar las rutinas en un Form.Activate o en un Form.Show.
Aqui van las rutinas:
Código Delphi
[-]
procedure TPuntodeVentaForm.FormActivate(Sender: TObject);
var
LastRow : Integer;
begin
LimpiaGrilla;
with datamodule2 do
begin
IbQuery3.Close;
IbQuery3.SQL.Clear;
IbQuery3.SQL.Add('Select * from MenuTeclas where Id_Producto <> 0');
IbQuery3.Prepare;
IbQuery3.Open;
if IbQuery3.EOF then
Exit;
IbQuery3.First;
LastRow := 0;
while not IbQuery3.EOF do
begin
Inc(LastRow);
if LastRow > 1 then
StringGrid2.RowCount := StringGrid2.RowCount + 1;
StringGrid2.Cells[0,LastRow] := IbQuery3.FieldByName('Id_Tecla').asString;
StringGrid2.Cells[1,LastRow] := IbQuery3.FieldByName('Linea1').asString;
StringGrid2.Cells[2,LastRow] := IbQuery3.FieldByName('Linea2').asString;
StringGrid2.Cells[3,LastRow] := IbQuery3.FieldByName('Linea3').asString;
StringGrid2.Cells[4,LastRow] := IbQuery3.FieldByName('Linea4').asString;
IbQuery3.Next;
end;
IbQuery3.Close;
end;
end;
procedure TPuntodeVentaForm.FormShow(Sender: TObject);
var
a : Integer;
RichMemo :TComponent;
Nombre : string;
begin
MessageDlg('Click para cargar variables',mtInformation, [mbOk],0);
Button2.Perform(WM_LButtonDown,0,0);
Sleep(250);
Button2.Perform(WM_LButtonUp,0,0);
end;
end;
procedure TPuntodeVentaForm.Button2Click(Sender: TObject);
var
RichMemo :TComponent;
Nombre : string;
a : Integer;
begin
For a := 1 to StringGrid2.RowCount -1 do
begin
Nombre := StringGrid2.Cells[0,a];
RichMemo := FindComponent(Nombre) as TRichEdit;
TRichEdit(RichMemo).Clear;
TRichEdit(RichMemo).Paragraph.Alignment:=TaCenter;
TRichEdit(RichMemo).Lines.Add(StringGrid2.Cells[1,a]);
TRichEdit(RichMemo).Lines.Add(StringGrid2.Cells[2,a]);
TRichEdit(RichMemo).Lines.Add(StringGrid2.Cells[3,a]);
TRichEdit(RichMemo).Lines.Add(StringGrid2.Cells[4,a]);
end;
end;
Por favor analizar y corregir si es posible