Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como crear un bucle con TEdit's (https://www.clubdelphi.com/foros/showthread.php?t=56104)

axlrafael 07-05-2008 18:18:55

Como crear un bucle con TEdit's
 
Hola amigos foreros, quisiera preguntarles como le puedo hacer para crear un bucle con objetos de tipo TEdit en Delphi?. Lo que intento hacer es algo asi

RangoMatriz := Excel.Range['A1', Excel.Cells.Item[CantRow,CantCol]].Value;
for i:=1 to CantRow do
begin
for j:=1 to CantCol do
begin
Showmessage(RangoMatriz[i,j]);
end;
end;

miren recibo datos desde la variable RangoMatriz, pero en este código lo que me hace es mostrarlos en forma de mensaje, pero lo que yo quiero es asignarle cada dato correspondiente a diferentes objetos tipo TEdit, es decir,

RangoMatriz TEdit
[x1,y1] Edit1.text
[x2,y2] Edit2.text
[x3,y3] Edit3.text
. .
. .
. .
[xn,yn] Editn.text

Por cierto la variable RangoMatriz me indica cada celda donde extraigo datos de una hoja de excel.

Saludos y suerte a todos :)

coso 07-05-2008 18:54:04

De la manera que esta expresado, parece que solo te interesen las celdas donde x e y son iguales. es ese el caso?

axlrafael 07-05-2008 19:02:42

mas o menos
 
:rolleyes: Si mira la Matriz me indica unicamente la posición de las celdas en la hoja de excel, es decir:

RangoMatriz
[x1,y1] ----->posición 'A1'
[x2,y1] ----->posición 'A2'

.... y asi sucesivamente, entonces lo que yo kiero es agregar otro "for" pero que me haga referencia a 10 TEdit que tengo en el form donde vayan tomando los valores de cada una de las celdas de la hoja de excel(tomada de la matriz).

Espero me hayas comprendido :D

Caro 07-05-2008 19:09:28

Hola axlrafael, no te sería mejor mostrar tus datos de tu hoja de excel en un StringGrid.

Código Delphi [-]
 RangoMatriz := Excel.Range['A1', Excel.Cells.Item[CantRow,CantCol]].Value;
 
 StringGrid1.ColCount := NumCol+1;
 StringGrid1.RowCount := NumRow+1; 

 for i:=1 to CantRow do
  begin
   for j:=1 to CantCol do
    begin
      StringGrid1.Cells[j,i] := RangoMatriz[i,j];
    end;
  end;

Saluditos

coso 07-05-2008 19:14:33

sigo sin entenderte... cojes desde una matriz los valores x,y de una celda y estos valores de celda de excel los quieres poner en 10 edits?

axlrafael 07-05-2008 19:22:45

Mira supongamos que tengo diez valores en la hoja de excel y en mi form tengo 10 TEdit's, lo que quiero es que en cada uno me muestre el valor 'A1' en el Edit1, el valor de 'A2' en el Edit2, el valor 'A3' en el Edit3, y asi sucesivamente.

Con relación a tu propuesta de hacerlo en un stringGrid te lo agradesco pero mi necesidad es hacerlo en TEdit's

;)

coso 07-05-2008 19:35:02

Si solo son 10 tedits, pues...

Edit1.Text := Excel.Cells.Item[Matriz['A','1']] etc...

si lo que quieres es encontrar un Edit por su nombre, que es lo que me parece, te dejo una funcion...

function TForm.Encontrar_EditBox(string : nombre) : TEdit;
var
I: Integer;
Temp: TComponent;
begin
for I := ComponentCount - 1 downto 0 do
begin
Temp := Components[i];
if (Temp is TEdit) then
if ((Temp as TEdit).Name = nombre)
then
Encontrar_EditBox := (Temp as TEdit);
end;
Econtrar_EditBox := nil;
end;

Esta funcion debe estar en la form donde estan los EditBoxs... asi, por ejemplo, para poner dentro del Editn el valor de la celda [n,n] seria algo como
Encontrar_EditBox('Edit' + inttostr(n)) := Excel.Cells.Item[n,n].Value

deberas tener cuidado si no existe el editbox q se busca ya q seria 'null pointer assignment'. Seguro que hay bugs en el codigo espero q pilles la idea.

axlrafael 07-05-2008 19:54:11

Hola creo que si me servira el segundo metodo coso, muchas gracias, solo una cosa mas, ya coloque tu código en el form pero me marca error, me dice que no esta declarada "Encontrar_EditBox", la verdad yo soy novato en esto del Delphi y no se donde incluir los "funtion". mira te pongo toda mi idea para que sepas bien a que voy:

tengo un form con dos botones y 11 Edit's, el primer botón es para abrir un opendialog, luego recojo la ubicación de cualquier archivo de excel(para esto ya tengo un estandar de como acomodar los datos que necesito) en un Edit que es el "Edit1", los otros 10 Edit me van a servir para recojer los datos que necesito en la hoja de excel, y por último con el segundo botón le puse este código:

Código:

procedure TForm62.Button2Click(Sender: TObject);
const
  xlCellTypeLastCell = $0000000B;
var
 Excel, Sheet, FileName, Encontrar_EditBox: OLEVariant;
 CantRow, CantCol, i, j : Integer;
 RangoMatriz: Variant;
begin
  FileName := Edit1.text;
  Excel := CreateOleObject('Excel.Application');
  Excel.Workbooks.Open(FileName);
 
  Sheet := Excel.Workbooks[ExtractFileName(FileName)].WorkSheets[1];
  Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
  CantRow := Excel.ActiveCell.Row;
  CantCol := Excel.ActiveCell.Column;
  RangoMatriz := Excel.Range['A1', Excel.Cells.Item[CantRow,CantCol]].Value;
  for i:=1 to CantRow do
  begin
    for j:=1 to CantCol do
    begin
    Encontrar_EditBox:=RangoMatriz[i,j];//aqui puse el resultante de la "funtion
      Showmessage(RangoMatriz[i,j]);
      //haces todo lo que necesites hacer
    end;
  end;
  end;

En este código lo que hace es mostrarme por medio de mensajes cada uno de los valores que tiene la hoja, por ejemplo en la hoja de 10 valores me despliega 10 mensajes con los diez datos.

Espero que me hayas comprendido :D

coso 07-05-2008 20:13:04

Lo siento, si no sabes hacer funciones es que tu nivel es demasiado bajo. Te pongo un link aqui de delphi basico (esta muy bien el tutorial) leetelo y seguro q te entran mas ideas... Suerte ;)

http://www.elguille.info/delphi/curso/delphi01.htm
http://www.elguille.info/delphi/apun...ntesDelphi.htm

axlrafael 07-05-2008 21:09:16

Ok gracias por los manuales. Saludos:)

Caro 08-05-2008 05:12:16

Hola de nuevo axlrafael, como te dice coso trata de leer algunos tutoriales, te ayudaran mucho. Ahora sobre tu pregunta si quieres hacerlo con Edit y no con un StringGrid, puedes utilizar la función FindComponent que te encuentra un componente dandole como parametro su nombre como cadena.

Código Delphi [-]
  ..........
  ..........
  RangoMatriz := Excel.Range['A1', Excel.Cells.Item[CantRow,CantCol]].Value;
  for i:=1 to CantRow do
   begin
    for j:=1 to CantCol do
     begin
      TEdit(FindComponent('Edit'+IntToStr(i))).Text := RangoMatriz[i,j];
     end;
   end;
   end;

Estoy suponiendo que tus edits tienen como nombre Edit1, Edit2, Edit3,.....

Saluditos

axlrafael 08-05-2008 18:46:55

Excelente Caro
 
Que tal Caro me da mucho gusto que de nueva cuenta me vuelvas a ayudar, la verdad me sirvio muchisimo tu código, te lo agradesco infinitamente.

Respecto a lo que le agregaste de verdad funciona, me acomoda los datos en donde deben de ir :D.

Saludos y Suerte.

P.D. Te debo otra de nueva cuenta ;)

axlrafael 08-05-2008 19:22:48

Me resulto un problema ¡¡¡
 
Hola Caro, quiero preguntarte ¿porque es que despues de utilizar el archivo de excel en mi aplicación ya no me deja abrirlo de nueva cuenta?, he notado que cuando jalo cualquier archivo Excel en la aplicación no me deja abrirlo, me lo abre de tipo solo lectura y por logica no me deja guardarlo si lo quiero modificar:confused:.

Tambien note que en el administrador de tareas me abre tantas veces intente abrir yo el mismo archivo que utilice en la aplicación un proceso que es el de Excel ("EXCEL.EXE") :confused:

Espero que me puedas ayudar de nuevacuenta.

Saludos y suerte :D


La franja horaria es GMT +2. Ahora son las 15:37:41.

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