Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Editar un buffer (https://www.clubdelphi.com/foros/showthread.php?t=55549)

JoseFco 20-04-2008 02:28:52

Editar un buffer
 
"Tolomeo se mudo al Polo Norte"

JoseFco 20-04-2008 03:52:32

"Tolomeo se mudo al Polo Norte"

eduarcol 20-04-2008 13:51:33

yo pienso que es un dbGrid conectado a una tabla, y que al hacer click sobre el registro abre una pantalla asociada a esta tabla que permite editar el registro activo, o sea, el que esta seleccionado en el grid.

Pero esto es pura suposicion ya que no se mucho de IntelHEx

JoseFco 20-04-2008 14:04:37

"Tolomeo se mudo al Polo Norte"

eduarcol 20-04-2008 14:09:29

Cita:

Empezado por JoseFco (Mensaje 281265)
Hola eduarcol.

Gracias por la respuesta.tendre que buscarme el dbGrid entonces, porque en el delphi 7 este solo tengo StringGrid y DrawGrid.
Ya tengo tarea para hoy con el DbGrid entonces. A San Google entonces.

Un Saludo.

busca una en delphi una pestaña que se llama datacontrols ;)

JoseFco 20-04-2008 15:57:42

"Tolomeo se mudo al Polo Norte"

JoseFco 20-04-2008 16:34:40

"Tolomeo se mudo al Polo Norte"

xEsk 20-04-2008 19:08:24

No sé yo si el DbGrid es realmente el que necesitas eh! Ya que el DbGrid sirve para mostrar datos de una base de datos.

Creo que con el StringGrid ibas bien.

Saludos.

JoseFco 20-04-2008 21:49:09

"Tolomeo se mudo al Polo Norte"

JoseFco 20-04-2008 22:18:08

"Tolomeo se mudo al Polo Norte"

JoseFco 21-04-2008 02:14:14

"Tolomeo se mudo al Polo Norte"

JoseFco 21-04-2008 04:41:01

"Tolomeo se mudo al Polo Norte"

Dedalo 21-04-2008 14:07:23

Yo eso lo solucioné con un StringGrid.

El fuente de la ventana que manipula los datos es el siguiente:

Cita:

unit VerDatos;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls, Buttons, ExtCtrls, Pic16f84;

type
TFverDatos = class(TForm)
Panel6: TPanel;
BBcancelar: TBitBtn;
BBaceptar: TBitBtn;
Panel3: TPanel;
Panel1: TPanel;
SGeprom: TStringGrid;
procedure FormCreate(Sender: TObject);
procedure BBaceptarClick(Sender: TObject);
procedure BBcancelarClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
Pic:^Tpic;
public
procedure Entrar(var PicRef:TPic);
end;

implementation
{$R *.DFM}

procedure TFverDatos.FormCreate(Sender: TObject);
var
i:Integer;
begin
for i:=0 to 3 do SGeprom.cells[0,i]:=IntToHex(i*16,2);
end;

procedure TFverDatos.Entrar(var PicRef:TPic);
var
i,j:Integer;
begin
Pic:=@PicRef;
for i:=0 to 3 do for j:=0 to 15 do SGeprom.cells[j+1,i]:=IntToHexPic.MemDatos[i*16+j],2);
Show;
end;

procedure TFverDatos.BBaceptarClick(Sender: TObject);
var
i,j,k:Integer;
begin
for i:=0 to 3 do for j:=0 to 15 do Val('$'+SGeprom.cells[j+1,i],Pic.MemDatos[i*16+j],k);
end;

procedure TFverDatos.BBcancelarClick(Sender: TObject);
begin
Close;
end;

procedure TFverDatos.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;

end.
Esta hecho para ver la tabla de datos de la eprom del PIC16F84, pero aumentando los numeros vale para cualquier tabla de datos en hexadecimal.

FGarcia 21-04-2008 16:43:21

Hola!
Esto me parecio interesante:

Código:

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls, Buttons, ExtCtrls, Pic16f84;

esa unidad como ¿la conseguiste o creaste para añadirla a Delphi?

Gracias.

Dedalo 21-04-2008 19:11:21

Cita:

Empezado por FGarcia (Mensaje 281442)
Hola!
Esto me parecio interesante:

Código:

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, StdCtrls, Buttons, ExtCtrls, Pic16f84;

esa unidad como ¿la conseguiste o creaste para añadirla a Delphi?

Gracias.

la hice yo. En realidad me hice todo, pondré el programa completo por trocitos para no llenar el hilo con codigo.

JoseFco 21-04-2008 23:58:35

"Tolomeo se mudo al Polo Norte"

JoseFco 22-04-2008 01:16:44

"Tolomeo se mudo al Polo Norte"

Dedalo 22-04-2008 08:37:23

Este es el fichero PIC16F84.pas. Es el que cambio en el compilador al cambiar de procesador. Tengo varios, segun el procesador para el que vaya a compilar.


Código Delphi [-]
unit Pic16F84;
interface
uses SysUtils;
type
 Tpic = Record
  MemPrograma:array[0..1023] of Word;
  MemDatos:array[0..63] of Word;
  Id:array[0..3] of Word;
  Configuracion:Word;
  MemProgramaOk:Boolean;
  MemDatosOk:Boolean;
  ConfiguracionOk:Boolean;
 end;
const
 LoadConfiguration  = 0;
 Desconocido1   = 1;
 LoadProgramMemory  = 2;
 LoadDataMemory   = 3;
 ReadProgramMemory  = 4;
 ReadDataMemory   = 5;
 IncrementAddress  = 6;
 Desconocido7   = 7;
 BeginEraseProgramming = 8;
 BeginProgrammingOnly = 24;
 BulkEraseProgram  = 9;
 BulkEraseData   = 11;
function ConvierteToken(Token:String):Integer;
function DecodificaInstruccion(Opcode:Word):String;
function ParametrosInstruccion(Instruccion:String):Integer;
implementation
function ConvierteToken(Token:String):Integer;
begin
// Tokens propios del procesador
 if UpperCase(Token)=  'CLRW'   then Result := $0100
 else if UpperCase(Token)= 'CLRWDT' then Result := $0064
 else if UpperCase(Token)= 'NOP'    then Result := $0000
 else if UpperCase(Token)= 'RETURN' then Result := $0008
 else if UpperCase(Token)= 'RETFIE' then Result := $0009
 else if UpperCase(Token)= 'SLEEP'  then Result := $0063
 else if UpperCase(Token)= 'OPTION' then Result := $0062
 else if UpperCase(Token)= 'TRIS'   then Result := $0060
 else if UpperCase(Token)= 'MOVWF'  then Result := $0080
 else if UpperCase(Token)= 'CLRF'   then Result := $0180
 else if UpperCase(Token)= 'ADDLW'  then Result := $3E00
 else if UpperCase(Token)= 'ANDLW'  then Result := $3900
 else if UpperCase(Token)= 'IORLW'  then Result := $3800
 else if UpperCase(Token)= 'MOVLW'  then Result := $3000
 else if UpperCase(Token)= 'RETLW'  then Result := $3400
 else if UpperCase(Token)= 'XORLW'  then Result := $3A00
 else if UpperCase(Token)= 'SUBLW'  then Result := $3C00
 else if UpperCase(Token)= 'CALL'   then Result := $2000
 else if UpperCase(Token)= 'GOTO'   then Result := $2800
 else if UpperCase(Token)= 'ADDWF'  then Result := $0700
 else if UpperCase(Token)= 'ANDWF'  then Result := $0500
 else if UpperCase(Token)= 'COMF'   then Result := $0900
 else if UpperCase(Token)= 'DECF'   then Result := $0300
 else if UpperCase(Token)= 'DECFSZ' then Result := $0B00
 else if UpperCase(Token)= 'INCF'   then Result := $0A00
 else if UpperCase(Token)= 'INCFSZ' then Result := $0F00
 else if UpperCase(Token)= 'IORWF'  then Result := $0400
 else if UpperCase(Token)= 'MOVF'   then Result := $0800
 else if UpperCase(Token)= 'RLF'    then Result := $0D00
 else if UpperCase(Token)= 'RRF'    then Result := $0C00
 else if UpperCase(Token)= 'SUBWF'  then Result := $0200
 else if UpperCase(Token)= 'SWAPF'  then Result := $0E00
 else if UpperCase(Token)= 'XORWF'  then Result := $0600
 else if UpperCase(Token)= 'BCF'    then Result := $1000
 else if UpperCase(Token)= 'BSF'    then Result := $1400
 else if UpperCase(Token)= 'BTFSC'  then Result := $1800
 else if UpperCase(Token)= 'BTFSS'  then Result := $1C00
// Tokens del compilador (iguales para cualquier procesador)
 else if UpperCase(Token)= 'EQU'    then Result := -2
 else if UpperCase(Token)= 'ORG'    then Result := -3
 else if UpperCase(Token)= 'DB'     then Result := -4
 else if UpperCase(Token)= 'END'    then Result := -5
 else Result:=-1;
end;
function DecodificaInstruccion(Opcode:Word):String;
var
 d,f,b,k,kl:String;
begin
 Result:='???';
 f:='$'+IntToHex(Opcode and $7F,2);
 if (Opcode and $80)=0 then d:='W' else d:='F';
 b:='$'+IntToHex((Opcode shr 7) and $7,1);
 k:='$'+IntToHex(Opcode and $ff,2);
 Kl:='$'+IntToHex(Opcode and $7ff,2);
 case Opcode shr 7 of
  $01      :Result:='MOVWF '+ f;
  $02      :Result:='CLRW';
  $03      :Result:='CLRF '+ f;
  $04,$05  :Result:='SUBWF '+ f+','+d;
  $06,$07  :Result:='DECF '+ f+','+d;
  $08,$09  :Result:='IORWF '+ f+','+d;
  $0A,$0B  :Result:='ANDWF '+ f+','+d;
  $0C,$0D  :Result:='XORWF '+ f+','+d;
  $0E,$0F  :Result:='ADDWF '+ f+','+d;
  $10,$11  :Result:='MOVF '+ f+','+d;
  $12,$13  :Result:='COMF '+ f+','+d;
  $14,$15  :Result:='INCF '+ f+','+d;
  $16,$17  :Result:='DECFSZ '+ f+','+d;
  $18,$19  :Result:='RRF '+ f+','+d;
  $1A,$1B  :Result:='RLF '+ f+','+d;
  $1C,$1D  :Result:='SWAPF '+ f+','+d;
  $1E,$1F  :Result:='INCFSZ '+ f+','+d;
  $20..$27 :Result:='BCF '+ f+','+b;
  $28..$2F :Result:='BSF '+ f+','+b;
  $30..$37 :Result:='BTFSC '+ f+','+b;
  $38..$3F :Result:='BTFSS '+ f+','+b;
  $40..$4F :Result:='CALL '+ kl;
  $50..$5F :Result:='GOTO '+ kl;
  $60..$67 :Result:='MOVLW '+ k;
  $68..$6F :Result:='RETLW '+ k;
  $70,$71  :Result:='IORLW '+ k;
  $72,$73  :Result:='ANDLW '+ k;
  $74,$75  :Result:='XORLW '+ k;
  $76,$77  :Result:='???';
  $78..$7B :Result:='SUBLW '+ k;
  $7C..$7F :Result:='ADDLW '+ k;
  $00:
  begin
   if (Opcode and $3FF8)=$060 then
          begin
    Result:='TRIS '+IntToHex(Opcode and 7,2);
    Exit;
   end;
       case Opcode of
    $000,$020,$040,$060:Result:='NOP';
    $064:Result:='CLRWDT';
    $009:Result:='RETFIE';
    $008:Result:='RETURN';
    $063:Result:='SLEEP';
    $062:Result:='OPTION';
   end;
  end;
 end;
end;
function ParametrosInstruccion(Instruccion:String):Integer;
begin
 case ConvierteToken(Instruccion) of
  $0100,$0064,$0000,$0008,$0009,$0063,$0062: Result:=0; // Sin Operandos
  $0060: Result:=1;     // 0 <= f <= 7
  $0080,$0180: Result:=2;     // 0 <= f <= 127
  $3E00,$3900,$3800,$3000,$3400,$3A00,$3C00: Result:=3; // 0 <= k <= 255
  $2000,$2800: Result:=4;     // 0 <= k <= 2047
  $0700,$0500,$0900,$0300,$0B00,$0A00,$0F00,$0400,$0800,
  $0D00,$0C00,$0200,$0E00,$0600: Result:=5;  // 0 <= f <= 127 y W ó F
  $1000,$1400,$1800,$1C00: Result:=6;   // 0<= f <= 128 / 0 <= b <= 7
  else Result:=-1;
 end;
end;
end.

FGarcia 23-04-2008 17:08:39

Gracias por la informacion Dedalo. Lo voy a estudiar para continuar aprendiendo.

JoseFco 23-04-2008 22:37:05

"Tolomeo se mudo al Polo Norte"


La franja horaria es GMT +2. Ahora son las 18:32:15.

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