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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-10-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Direccionar un StringGrid.

Hola amigos, tengo una idea y me gustaria ver si esto puede ser posible.

Tengo este StringGrid y me gustaria poder asociarle un addr a sus casillas.




La idea es poder acceder a las casillas mediante una direcion.

Ejemplo 0001 Col 1 Row 0 , que esta data la tome de un label.

¿No se si me explico bien?

Un Saludo.
Responder Con Cita
  #2  
Antiguo 14-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 23
Caro Va por buen camino
Hola Jose, se me ocurre que lo hagas de esta forma, por lo que he entendido la penultima posicion te dara la fila y la ultima la columna, como A, B, C... son hexadecimales que corresponden a 10,11, 12..., utilices eso, lo conviertas a decimal y accedas a esa fila y columna que corresponde.

Código Delphi [-]
var
 aCol, aRow : Integer;
 Cad : String;
begin
 Cad := Label1.Caption;
 
 aRow := StrToInt('$'+Cad[3])+1;
 aCol := StrToInt('$'+Cad[4])+1;
 
 StringGrid1.Col := aCol;
 StringGrid1.Row := aRow;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 14-10-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Cita:
Empezado por Caro Ver Mensaje
Hola Jose, se me ocurre que lo hagas de esta forma, por lo que he entendido la penultima posicion te dara la fila y la ultima la columna, como A, B, C... son hexadecimales que corresponden a 10,11, 12..., utilices eso, lo conviertas a decimal y accedas a esa fila y columna que corresponde.


Código Delphi [-]
var
 aCol, aRow : Integer;
 Cad : String;
begin
 Cad := Label1.Caption;
 
 aRow := StrToInt('$'+Cad[3])+1;
 aCol := StrToInt('$'+Cad[4])+1;
 
 StringGrid1.Col := aCol;
 StringGrid1.Row := aRow;



Saluditos
Gracias Caro, veo que captastes la idea bien.

Llegando a la casa lo pruebo.


Un Saludo.
Responder Con Cita
  #4  
Antiguo 14-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 23
Caro Va por buen camino
Cita:
Empezado por JoseFco Ver Mensaje
Llegando a la casa lo pruebo.
Ok

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 14-10-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Bueno asi esta la cosa:





Código Delphi [-]
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Button1: TButton;
    UpAddr: TButton;
    DownAddr: TButton;
    procedure InicializaGridBuffer;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure UpAddrClick(Sender: TObject);
    procedure DownAddrClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.InicializaGridBuffer;
var
  i,j: integer;
begin
  StringGrid1.ColWidths[0] := 35;
  StringGrid1.Cells[0,0] := 'Addr';
  j := $0000;
  for i := 0 to 15 do
    if i = 0 then
      begin
        StringGrid1.Cells[i+1,0] := IntTohex(i,2);
        StringGrid1.Cells[0,i+1] := IntToHex(i,4);
      end
    else
      begin
        j := j + 16;
        StringGrid1.Cells[i+1,0] := IntTohex(i,2);
        StringGrid1.Cells[0,i+1] := IntToHex(j,4);
      end;
      end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InicializaGridBuffer;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
 aCol, aRow : Integer;
 Cad : String;
begin
Cad := Label1.Caption;
 aRow := StrToInt('$'+Cad[3])+1;
 aCol := StrToInt('$'+Cad[4])+1;
 StringGrid1.Col := aCol;
 StringGrid1.Row := aRow;
end;
procedure TForm1.UpAddrClick(Sender: TObject);
begin
 Label1.Caption := inttohex(strtoint('$'+Label1.Caption)+1,4);
end;
procedure TForm1.DownAddrClick(Sender: TObject);
begin
  Label1.Caption := inttohex(strtoint('$'+Label1.Caption)-1,4);
end;
end.


Eso quedo como queria.

Los botones Up and Down son solo para que el programita ruede y poder probarlo.(la idea futura es que el solo camine)

Tengo un problemita y creo que es del codigo al crear el grid.Cuando el addr llega a la FF se retorna al 00 si es que pongo 01FF en el Label.Cuando creo el grid solo llego a la "FF".

Gracias Caro, muy buena tu ayuda.

Un Saludo.

PD:¿Que estoy tratando de hacer? No tengo idea pero algo saldra de todo esto.
Responder Con Cita
  #6  
Antiguo 15-10-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Bueno asi esta el relajo... Digo el codigo para direccionar el StringGrid:




El codigo:

Código Delphi [-]
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, ExtCtrls;
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Run: TButton;
    UpAddr: TButton;
    DownAddr: TButton;
    Timer1: TTimer;
    Button2: TButton;
    Button3: TButton;
    Memo1: TMemo;
    Edit1: TEdit;
    ValorCasilla: TLabel;
    Label2: TLabel;
    procedure InicializaGridBuffer;
    procedure FormCreate(Sender: TObject);
    procedure RunClick(Sender: TObject);
    procedure UpAddrClick(Sender: TObject);
    procedure DownAddrClick(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.InicializaGridBuffer;
var
  i,j: integer;
begin
  StringGrid1.ColWidths[0] := 35;
  StringGrid1.Cells[0,0] := 'Addr';
  j := $0000;
  for i := 0 to 15 do
    if i = 0 then
      begin
        StringGrid1.Cells[i+1,0] := IntTohex(i,2);
        StringGrid1.Cells[0,i+1] := IntToHex(i,4);
      end
    else
      begin
        j := j + 16;
        StringGrid1.Cells[i+1,0] := IntTohex(i,2);
        StringGrid1.Cells[0,i+1] := IntToHex(j,4);
      end;
      end;
procedure TForm1.FormCreate(Sender: TObject);
begin
InicializaGridBuffer;
end;
procedure TForm1.RunClick(Sender: TObject);
var
 aCol, aRow : Integer;
 x,y : Integer;
 Cad : String;
 begin
 Cad := Label1.Caption;
 aRow := StrToInt('$'+Cad[3])+1;
 aCol := StrToInt('$'+Cad[4])+1;
 StringGrid1.Col := aCol;
 StringGrid1.Row := aRow;
 x := aRow;
 y := aCol;
  ValorCasilla.Caption:= StringGrid1.Cells[y,x];
end;
procedure TForm1.UpAddrClick(Sender: TObject);
begin
 Label1.Caption := inttohex(strtoint('$'+Label1.Caption)+1,4);
end;
procedure TForm1.DownAddrClick(Sender: TObject);
begin
  Label1.Caption := inttohex(strtoint('$'+Label1.Caption)-1,4);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage(StringGrid1.Cells[6, 6]);
end;
procedure TForm1.Button3Click(Sender: TObject);
var
  i,j: integer;
  hexa: string;
begin
 hexa := Edit1.text;
 for i := 1 to 15 do begin
      for j := 1 to 15 do begin
          if Pos(' ',hexa) = 0 then
           begin
           StringGrid1.Cells[j,i] := hexa;
             Exit;
             end
          else begin
                 StringGrid1.Cells[j,i] := Copy(hexa,1,2);
                 Delete(hexa,1,Pos(' ',hexa));
          end;
      end;
  end;
end;
end.

Algunas cositas agregadas para ademas de mover el cursor dentro del grid que me retorne el valor en esa casilla en particular.Ademas de un Timer, para poder jugar con el tiempo.(en esta etapa no es tan importante, pero cuando esto tome forma y autonomia.Sera de mucho valor.)

Un Saludo.

PD:Se aceptan criticas y sugerencias.La otra parte del proyecto la continuare en otro hilo.Para no salirme del tema de este.(no desvirtual)

Gracias Caro.

Última edición por JoseFco fecha: 16-10-2008 a las 00:37:36.
Responder Con Cita
  #7  
Antiguo 15-10-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 23
Caro Va por buen camino
Me alegra que te haya servido amiguito .

Solo una cosita en vez de asiganar a tus variables x y y, puedes utilizar directamente aRow y aCol.

Código Delphi [-]
............
 StringGrid1.Col := aCol;
 StringGrid1.Row := aRow;
 ValorCasilla.Caption:= StringGrid1.Cells[aCol, aRow];
end;
..........

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #8  
Antiguo 15-10-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Cita:
Empezado por Caro Ver Mensaje
Me alegra que te haya servido amiguito .

Solo una cosita en vez de asiganar a tus variables x y y, puedes utilizar directamente aRow y aCol.


Código Delphi [-]
............
StringGrid1.Col := aCol;
StringGrid1.Row := aRow;
ValorCasilla.Caption:= StringGrid1.Cells[aCol, aRow];
end;
..........





Saluditos
Gracias Caro, no recuerdo si anoche intente de esa forma o no.Pero llegando a la casa le hago el cambio.


Un Saludo.
Responder Con Cita
  #9  
Antiguo 16-10-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola Caro.

Eso quedo perfecto y a las mil marabillas.Gracias.


Un Saludo.


PD:Pence que el asunto con las direciones en un StringGrid ya estaba resuelto del todo y pues se me ocurre que puedo crear un componente usando una. Un LCD de 16 caracteres y dos lineas.(aprovechando que puedo asignarle el address real que un LCD trae.En unos dias posteo la idea completa, en este mismo hilo para darle continuidad a la idea de asignar address a los StringGrid.
Responder Con Cita
  #10  
Antiguo 18-10-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola amigos.

Tengo un problemita con este codigo:


Código Delphi [-]
procedure TForm1.RunClick(Sender: TObject);
var
 aCol, aRow : Integer;
 Cad : String;
 begin
 Cad := Label1.Caption;
 aRow := StrToInt('$'+Cad[3])+1;
 aCol := StrToInt('$'+Cad[4])+1;
 StringGrid1.Col := aCol;
 StringGrid1.Row := aRow;
  ValorCasilla.Caption:= StringGrid1.Cells[aCol, aRow];
end;

Esto esta trabajando sin problemas desde la address 00 a la FF.Toma el valor de Label1.Caption (Cad)
Código Delphi [-]
aCol := StrToInt('$'+Cad[4])+1;

Esto esta bien porque esta tomando el valor del digito 4 del Label1(hex es lo que tiene el label)Por eso el StrToInt.
Esta linea de codigo es para recorrer los Col del grid (una linea) 0 a la F tengo mis 16 valores. esto esta perfecto aqui no hay problema.

El Problema:
Código Delphi [-]
aRow := StrToInt('$'+Cad[3])+1;

Esta en esta linea. Toma el valor del digito 3 del Label1 y pues solo llegara a la F. La cosa es cuando llega a la FF deberia seguir al address 100h.Pero con este codigo tomando solo el digito 3 ni mandraca el mago lo lograria.
tengo que tener un For i: 1 to 256 y poder lograr que al llegar a la F el maximo valor del digito 3 ya que es Hex entonces que comience a contar con el digito 2 tambien.

¿No se si me explique bien.?

Alguna idea de como lograr esto?

Un Saludo.
Responder Con Cita
  #11  
Antiguo 19-10-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Bueno Amigos.

Resuelto el problema.

Código Delphi [-]
procedure TForm1.RunClick(Sender: TObject);
var
 aCol, aRow : Integer;
 Cad : String;
 begin
 Cad := Label1.Caption;
 aRow := StrToInt('$'+Cad[2]+Cad[3])+1;
 aCol := StrToInt('$'+Cad[4])+1;
 StringGrid1.Col := aCol;
 StringGrid1.Row := aRow;
  ValorCasilla.Caption:= StringGrid1.Cells[aCol, aRow];
end;

Un dolorcito de cabeza, pero al final las ideas se aclararon.

Un Saludo.
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
2 conecciones a internet, como direccionar ? martita Redes 3 24-04-2008 23:02:36
Direccionar datos con Crystal Report Jose_Pérez Impresión 6 29-02-2008 14:17:08
Direccionar de página web a mi servidor con IP fija Héctor Randolph Internet 9 07-09-2006 06:13:18
direccionar una base de datos Elybb C++ Builder 7 10-08-2006 20:24:58
Direccionar a otra página lucasarts_18 PHP 5 26-08-2005 19:56:16


La franja horaria es GMT +2. Ahora son las 06:43:30.


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