Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2008
camino camino is offline
Miembro
 
Registrado: feb 2007
Posts: 48
Poder: 0
camino Va por buen camino
Nombre componente en variable mas problemas

Hola amigos
Felizmente he podido guardar en tablas las caracteristicas de los RichEdit utilizado "FindControl" y "FindComponent".

En la tabla guarde el nombre de los TRichEdit que los renombre como "Tecla1", "Tecla2" y asi sucesivamente.


Pero cuando quiero cargar los RichEdit con los datos guardados en tabla me da mensaje de error.

Código Delphi [-]procedure TPuntodeVentaForm.Button1Click(Sender: TObject);
var ComponentT : TComponent; VarEdit : string;
begin 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; while not IbQuery3.EOF do begin VarEdit := IbQuery3.FieldByName('Id_Tecla').AsString;
componentT := FindComponent(VarEdit) as TRichEdit;
if Assigned( componentT ) then begin with componentT as TRichEdit do begin TRichEdit(componentT).Clear; TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea1').asString);
TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea2').asString);
TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea3').asString);
TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea4').asString);
end;
end else MessageDlg(VarEdit + ' No Asignado', mtwarning,[mbOk],0);
IbQuery3.Next;
end;
IbQuery3.Close;
end;
end;

En un principio tenia la rutina en el Evento OnShow de la Form, pero para experimentar ejecuto la rutina con un Boton colocandole ademas la prueba si esta asignado.

Fracaso.
Si pueden ayudarme por favor haganlo.
Gracias.
Responder Con Cita
  #2  
Antiguo 08-04-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
para comenzar, porq no colocas el mensaje de error, estas seguro que en el campo esta guardado correctamente el nombre?, verifica si en verdad encuentra algo
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 08-04-2008
camino camino is offline
Miembro
 
Registrado: feb 2007
Posts: 48
Poder: 0
camino Va por buen camino
comprobe con un label

Gracias eduarcol, coloque un label que me da exactamente lo que quiero. Comprobe que la variable VarEdit silleva el nombre del componente.


Código Delphi [-]


procedure TPuntodeVentaForm.Button1Click(Sender: TObject);
var
ComponentT : TComponent;
VarEdit : string;
begin
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;
 while not IbQuery3.EOF do
 begin
  VarEdit := IbQuery3.FieldByName('Id_Tecla').AsString;
  Label1.Caption := VarEdit; //AQUI EL NOMBRE DEL COMPONENTE
  componentT := FindComponent(VarEdit) as TRichEdit;
  if Assigned( componentT ) then
  begin
   with componentT as TRichEdit do
   begin
  TRichEdit(componentT).Clear;
  TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea1').asString);
  TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea2').asString);
  TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea3').asString);
  TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea4').asString);
   end;
  end
  else
  MessageDlg(VarEdit + ' No Asignado', mtwarning,[mbOk],0);
  IbQuery3.Next;
 end;
 IbQuery3.Close;
end;
end;


Me pregunto, no habra que usar FindControl ademas?
sigo pidiendo ayuda.
Responder Con Cita
  #4  
Antiguo 08-04-2008
santus santus is offline
Miembro
 
Registrado: ene 2006
Posts: 130
Poder: 19
santus Va por buen camino
Cita:
Empezado por camino Ver Mensaje
Gracias eduarcol, coloque un label que me da exactamente lo que quiero. Comprobe que la variable VarEdit silleva el nombre del componente.



Código Delphi [-]


procedure TPuntodeVentaForm.Button1Click(Sender: TObject);
var
ComponentT : TComponent;
VarEdit : string;
begin
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;
while not IbQuery3.EOF do
begin
VarEdit := IbQuery3.FieldByName('Id_Tecla').AsString;
Label1.Caption := VarEdit; //AQUI EL NOMBRE DEL COMPONENTE
componentT := FindComponent(VarEdit) as TRichEdit;
if Assigned( componentT ) then
begin
with componentT as TRichEdit do
begin
TRichEdit(componentT).Clear;
TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea1').asString);
TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea2').asString);
TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea3').asString);
TRichEdit(componentT).Lines.Add(IbQuery3.FieldByName('Linea4').asString);
end;
end
else
MessageDlg(VarEdit + ' No Asignado', mtwarning,[mbOk],0);
IbQuery3.Next;
end;
IbQuery3.Close;
end;
end;







Me pregunto, no habra que usar FindControl ademas?
sigo pidiendo ayuda.
Debes decirnos que error te tira porque la verdad que no veo que cosa puede estar mal.
Lo unico mejorable que veo en tu codigo puede ser :

Código:
componentT := FindComponent(VarEdit) as TRichEdit;
antes de asignarlo podrias preguntar algo como si realmente es un trichedit: algo como esto.

Código:
if (findComponet(VarEdit) is TrichEdit )  then Showmessage('Es un trichedit')
else Showmessage('Esto no parece ser un trichedit...');
fijate si esto te sirve.
Saludos.
__________________
"El ordenador nació para resolver problemas que antes no existían." Bill Gates.
Responder Con Cita
  #5  
Antiguo 09-04-2008
camino camino is offline
Miembro
 
Registrado: feb 2007
Posts: 48
Poder: 0
camino Va por buen camino
Al fin la SOLUCION

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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Usar Nombre Componente en variable camino OOP 3 07-04-2008 17:18:58
Variable en el nombre de la Tabla carlosegs11 SQL 1 16-06-2006 23:32:47
Select con nombre de tabla Variable mayte mtz SQL 4 25-04-2006 16:13:35
¿Como saber el nombre de la variable de un form? fjavier64 OOP 1 04-03-2005 17:29:35


La franja horaria es GMT +2. Ahora son las 01:31:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi