Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-05-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Este es mi codigo original:

Código Delphi [-]
 procedure TForm1.BitBtn1Click(Sender: TObject);
var
   i,j,indice: integer;
  Str: String;
begin
  if OpenDialog1.Execute then
    Edit1.Text:=OpenDialog1.FileName;
    Edit2.Text:=('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
    Edit2.Text:=('Load File..................OK !');
  Memo1.Clear;
  //Inicializo las columnas y filas de el stringgrid donde se inicia la escritura

  with TStringList.Create do
    try
     if FileExists(Edit1.Text) then
     begin
      LoadFromFile(Edit1.Text);
      FillChar(Buffer,Sizeof(Buffer),#255);
      for i:= 0 to Count - 1 do
        Insertar(Strings[i],Buffer);
        j:= StrToInt(Label2.caption);
        Str:= EmptyStr;
       end;
      //***************************************************************

begin
  indice := 0; //Suponiendo que buffer sea un array de 1...x
  for i := 1 to 255 do begin  //2 renglones, cambialo a los renglones que esperas
     for j := 1 to 16 do begin //15 columnas
         stringgrid1.Cells[j,i] := inttohex(Buffer[indice],2);
         inc(indice);
     end;
  end;
end;
      //***************************************************************
          Str:= Str + #32 + IntToHex(Buffer[i],2);
            if ((i+1) mod 16 = 0) then
              begin
                Memo1.Lines.Add(Str);
                Str:= EmptyStr;
              end;

      if Str <> EmptyStr then
        Memo1.Lines.Add(Str);
    finally
      Free;
    end;
end;

Si lo corro asi y al final decido no bajar el file me da el error.Entiendo lo que dice roman pero en este procedimiento hago varias cosas y no entiendo a donde mover esa parte del codigo.

Un Saludo.
Responder Con Cita
  #2  
Antiguo 02-05-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
A ver amigo [JoseFco], seguro que esto compila??????

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  i,j,indice: integer;
  Str: String;
begin
  if OpenDialog1.Execute then begin
    Edit1.Text:=OpenDialog1.FileName;
    Edit2.Text:=('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
    Edit2.Text:=('Load File..................OK !');
    Memo1.Clear;
    //Inicializo las columnas y filas de el stringgrid donde se inicia la escritura
    with TStringList.Create do
      try
         if FileExists(Edit1.Text) then begin
            LoadFromFile(Edit1.Text);
            FillChar(Buffer,Sizeof(Buffer),#255);
            for i:= 0 to Count - 1 do
                Insertar(Strings[i],Buffer);
            j:= StrToInt(Label2.caption);
            Str:= EmptyStr;
         end;
      //***************************************************************
         begin
           indice := 0; //Suponiendo que buffer sea un array de 1...x
           for i := 1 to 255 do begin  //2 renglones, cambialo a los renglones que esperas
               for j := 1 to 16 do begin //15 columnas
                   stringgrid1.Cells[j,i] := inttohex(Buffer[indice],2);
                   inc(indice);
               end;
           end;
         end; //Este bloque que onda, porque entre un begin....end;
      //***************************************************************
         Str:= Str + #32 + IntToHex(Buffer[i],2);
         if ((i+1) mod 16 = 0) then begin
             Memo1.Lines.Add(Str);
             Str:= EmptyStr;
         end;
         if Str <> EmptyStr then
            Memo1.Lines.Add(Str);
      finally
         Free;
      end;
  end;
end; //Falta un end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 02-05-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 27
Delphius Va camino a la fama
Yo también me pregunto si compila...

Lo que está marcado con rojo es el problema.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 02-05-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Asi esta y no solo copila, trabaja bien:

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
   i,j,indice: integer;
  Str: String;
begin
  if OpenDialog1.Execute then
    Edit1.Text:=OpenDialog1.FileName;
    Edit2.Text:=('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
    Edit2.Text:=('Load File..................OK !');
  Memo1.Clear;
  //Inicializo las columnas y filas de el stringgrid donde se inicia la escritura

  with TStringList.Create do
    try
     if FileExists(Edit1.Text) then
     begin
      LoadFromFile(Edit1.Text);
      FillChar(Buffer,Sizeof(Buffer),#255);
      for i:= 0 to Count - 1 do
        Insertar(Strings[i],Buffer);
        j:= StrToInt(Label2.caption);
        Str:= EmptyStr;
       end;
      //***************************************************************

begin
  indice := 0; //Suponiendo que buffer sea un array de 1...x
  for i := 1 to 255 do begin  //2 renglones, cambialo a los renglones que esperas
     for j := 1 to 16 do begin //15 columnas
         stringgrid1.Cells[j,i] := inttohex(Buffer[indice],2);
         inc(indice);
     end;
  end;
end;
      //***************************************************************
          Str:= Str + #32 + IntToHex(Buffer[i],2);
            if ((i+1) mod 16 = 0) then
              begin
                Memo1.Lines.Add(Str);
                Str:= EmptyStr;
              end;

      if Str <> EmptyStr then
        Memo1.Lines.Add(Str);
    finally
      Free;
    end;
end;

Asi esta y en mi delphis no me pide mas end alguno.

Un Saludo.
PD: existen algunas declaraciones que estan globales puede que por eso no te copile a ti.
Responder Con Cita
  #5  
Antiguo 02-05-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Aqui va el relajo completo:

Código Delphi [-]
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, CPort, StdCtrls, ComCtrls, Grids, Menus, Mask, Buttons;
//Aqui declaramos el Tipo BUFFER
type
 TBuffer = array[$0000..$FFFF] of Byte;
type
  TForm1 = class(TForm)
    ComPort: TComPort;
    OpenDialog1: TOpenDialog;
    Memo1: TMemo;
    Label2: TLabel;
    Label3: TLabel;
    StringGrid1: TStringGrid;
    Button4: TButton;
    MainMenu1: TMainMenu;
    Archivo1: TMenuItem;
    Puerto1: TMenuItem;
    StaticText1: TStaticText;
    Edit1: TEdit;
    GroupBox1: TGroupBox;
    ProgressBar1: TProgressBar;
    GroupBox2: TGroupBox;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    BitBtn4: TBitBtn;
    BitBtn5: TBitBtn;
    BitBtn6: TBitBtn;
    BitBtn7: TBitBtn;
    BitBtn8: TBitBtn;
    Edit2: TEdit;
    Edit3: TEdit;
    StaticText2: TStaticText;
    StaticText3: TStaticText;
    Edit4: TEdit;
    StaticText4: TStaticText;
    DEVICE1: TMenuItem;
    AT89S511: TMenuItem;
    AT89S521: TMenuItem;
    About1: TMenuItem;
    Edit5: TEdit;
    StaticText5: TStaticText;
    procedure FormCreate(Sender: TObject);
    procedure ComPortRxChar(Sender: TObject; Count: Integer);
    procedure Memo1Change(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Puerto1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn4Click(Sender: TObject);
    procedure AT89S511Click(Sender: TObject);
    procedure AT89S521Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
  private
    { Private declarations }
    procedure InicializaGridBuffer;
  public
    { Public declarations }
  end;
const
  BufferSize = 4096;
var
  Form1: TForm1;
  Cuantos, CuentaB : Integer;
  Contador, ByteCnt  : Integer;
  LineaMemo  :  String;
  Count :   Integer;
  //Aqui declaramos la variable BUFFER para que funcione a forma global
  Buffer: TBuffer;
  //Aqui declaramos otra variable de tipo BUFFER para recibir
  BuffReceptor: TBuffer;
implementation
 
{$R *.dfm}
function Insertar(Str: String; var Buffer: TBuffer): String;
var
  i,j,k: Integer;
begin
  Result:= EmptyStr;
  Str:= Trim(Str);
  if Copy(Str,1,1) = ':' then
    if TryStrToInt('$' + Copy(Str,2,2),i) then
      if Length(Str) = ((2*i) + 11) then
        if TryStrToInt('$' + Copy(Str,4,4),j) then
          if TryStrToInt('$' + Copy(Str,8,2),k) then
            if k = 0 then
              begin
                Str:= Copy(Str,10,2*i);
                for k:= j to (j + i - 1) do
                  begin
                    Buffer[k]:= StrToInt('$' + Copy(Str,1,2));
                    Delete(Str,1,2);
                  end;
              end;
end;
procedure TForm1.InicializaGridBuffer;
var
    i,r,j,k,l: integer;
begin
  StringGrid1.ColWidths[0] := 35;
  StringGrid1.Cells[0,0] := 'Addr';
  for i := 0 to 15 do
    StringGrid1.Cells[i+1,0] := IntTohex(i,2);
    for j := 0 to (BufferSize div 16)-1 do    // (BufferSize div 16)
    begin
      k := j;
      StringGrid1.Height := StringGrid1.Height + 1;
      StringGrid1.RowCount := StringGrid1.RowCount + 1;
      StringGrid1.Cells[0,k+1] := IntToHex(l,4);
      l := l + 16;
      for r := 1 to 16 do
      StringGrid1.Cells[r,k+1] := IntToHex(255,2);
end;
end; 
procedure TForm1.FormCreate(Sender: TObject);
begin
  if not ComPort.Connected then
    ComPort.Open;
  Comport.WriteStr(#2#0);
end;
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
  Str: String;
begin
 ComPort.ReadStr(Str, Count);
  if Str= 'Hi-LOGIC' then
    Edit2.Text:=('Programmer detected........OK !')
  else if Str = #1 then
    begin
      case Cuantos of
        1: begin     //poner el chip en prog..
            ComPort.WriteStr(#2#2);
            Cuantos := 2;
           end;
        2: begin //comando para borrar.
            ComPort.WriteStr(#2#3);
            Cuantos := 3;
           end;
        3: begin //Modo Borrar
           sleep(500);
          Edit2.Text:=('Chip Erasing....... OK!')
           end;
        4: begin //poner el chip en prog..
            ComPort.WriteStr(#2#2);
            Cuantos := 5;
           end;
        5: begin // Comando para escribir el chip(06 04 00 00 10 00)
            ComPort.WriteStr(#6#4#0#0#16#0);
             
            ComPort.Write(Buffer[0],1);
            Contador := 1;
           end;
        6: begin //poner el chip en prog..
            ComPort.WriteStr(#2#2);
            Cuantos := 7;
           end;
        7: begin // Comando para leer el chip(06 05 00 00 10 00)
            ComPort.WriteStr(#6#5#0#0#16#0);
            // ya aqui estaria recibiendo los 4096 bytes de data
           end;
      end;
    end
  else if Str = #2 then
    begin
      //
    end
  else if Str = #83 then
    begin
      if contador <= 4095 then
        begin
          ComPort.Write(Buffer[Contador],1);
          ProgressBar1.Position := Contador;
          Inc(Contador);
          Edit5.Text := IntToStr(Contador);
        end
      else if contador = 4096 then
         Edit2.Text:=('Flash Programmed........OK !')
    end
  else if (cuantos = 7) then
    begin
      BuffReceptor[CuentaB] := StrToInt(Str);
      Inc(CuentaB);
      if (CuentaB >= 4096) AND (Cuantos = 7) then
        begin
          cuantos := 0;
          ShowMessage('Lectura de Chip terminada');
        end ;
    end;
end;
 //Aqui comienza el procedimiento para borrar el chip
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 if not ComPort.Connected then
    ComPort.Open;
 Comport.WriteStr(#4#1#0#1);
   Edit2.Text:=('>>>>>>  >>>>>>  >>>>>>  >>>>>>  >>>>>');
 Cuantos := 1;
end;
 //Aqui comienza el procedimiento para escribir el chip
procedure TForm1.BitBtn4Click(Sender: TObject);
begin
  if not ComPort.Connected then
    ComPort.Open;
 Comport.WriteStr(#4#1#0#1);
 Cuantos := 4;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
var
   i,j,indice: integer;
  Str: String;
begin
  if OpenDialog1.Execute then
    Edit1.Text:=OpenDialog1.FileName;
    Edit2.Text:=('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>');
    Edit2.Text:=('Load File..................OK !');
  Memo1.Clear;
  //Inicializo las columnas y filas de el stringgrid donde se inicia la escritura

  with TStringList.Create do
    try
     if FileExists(Edit1.Text) then
     begin
      LoadFromFile(Edit1.Text);
      FillChar(Buffer,Sizeof(Buffer),#255);
      for i:= 0 to Count - 1 do
        Insertar(Strings[i],Buffer);
        j:= StrToInt(Label2.caption);
        Str:= EmptyStr;
       end;
      //***************************************************************

begin
  indice := 0; //Suponiendo que buffer sea un array de 1...x
  for i := 1 to 255 do begin  //2 renglones, cambialo a los renglones que esperas
     for j := 1 to 16 do begin //15 columnas
         stringgrid1.Cells[j,i] := inttohex(Buffer[indice],2);
         inc(indice);
     end;
  end;
end;
      //***************************************************************
          Str:= Str + #32 + IntToHex(Buffer[i],2);
            if ((i+1) mod 16 = 0) then
              begin
                Memo1.Lines.Add(Str);
                Str:= EmptyStr;
              end;

      if Str <> EmptyStr then
        Memo1.Lines.Add(Str);
    finally
      Free;
    end;
end;
//Este procedimiento limita a 26 caracteres las lineas del memo
procedure TForm1.Memo1Change(Sender: TObject);
begin
  if (Length(Memo1.Lines.Text) mod 26) = 0 then
    begin
      Memo1.Lines.Add(''); //nueva linea
      Memo1.SelStart := Length(Memo1.Lines.Text); //mover cursor
    end;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
  InicializaGridBuffer;
  CuentaB := 0;
end;
 
procedure TForm1.Puerto1Click(Sender: TObject);
begin
  ComPort.ShowSetupDialog ;
end;
procedure TForm1.AT89S511Click(Sender: TObject);
begin
  Edit3.Text:=('AT89S51');
  Edit4.Text:=('4096');
end;
procedure TForm1.AT89S521Click(Sender: TObject);
begin
 Edit3.Text:=('AT89S52');
 Edit4.Text:=('8192');
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
if not ComPort.Connected then
    ComPort.Open;
 Comport.WriteStr(#4#1#0#1);
 Cuantos := 6;
end;
end.

Lo que decia son las declaraciones globales las que no los deja copilar.

Un Saludo.
Responder Con Cita
  #6  
Antiguo 02-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Amigo José Francisco, yo te propongo, antes que nada, que revises con cuidado las indentaciones de tu código. Tal como las tienes lo hace casi ilegible. Por ejemplo, en el procedimiento que nos ocupa hay un bloque begin..end con cero indentación cuando debería estarlo. Hay ciclos for al que le siguen varias líneas indentadas pero no están encerradas en un bloque begin..end. Lo mismo con las líneas que siguen al if del OpenDialog.

Tal como está no esposible discernir si esas líneas tenías la intención de pertenecer a un mismo bloque o no y dificulta el anaálisis del código.

// Saludos
Responder Con Cita
  #7  
Antiguo 02-05-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Cita:
Empezado por roman Ver Mensaje
Amigo José Francisco, yo te propongo, antes que nada, que revises con cuidado las indentaciones de tu código. Tal como las tienes lo hace casi ilegible. Por ejemplo, en el procedimiento que nos ocupa hay un bloque begin..end con cero indentación cuando debería estarlo. Hay ciclos for al que le siguen varias líneas indentadas pero no están encerradas en un bloque begin..end. Lo mismo con las líneas que siguen al if del OpenDialog.

Tal como está no esposible discernir si esas líneas tenías la intención de pertenecer a un mismo bloque o no y dificulta el anaálisis del código.

// Saludos
Es parte de la novatada, imagino los errores que tendra el codigo, es mi primer programita en Delphi. Y comence por algo grande para uno que apenas entiende algunas cositas.
Me falta mucho que aprender de ustedes.
Un Saludo.
Responder Con Cita
  #8  
Antiguo 02-05-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues bueno, esperamos entonces la corrección de la indentación. No creo que sea necesario poner tooooodo el código, basta la del botón que abre el archivo.

Pero regresando al punto original, creo que para entenderlo conviene que te olvides por un momento del código y te centres en la lógica del asunto.

Si no mal entiendo, tienes un botón para abrir un archivo y procesar dicho archivo. La lógica lo que dice es que, si no abres el archivo, entonces no haces nada. Por eso, en pseudo código:

Código:
IF AbreArchivo THEN
BEGIN
  ProcesoArchivo
END
En ProcesoArchivo va todo lo que debes hacer cuando abres el archivo, incluída la construcción del StringList.

Lo que ahora tienes (otra vez en pseudo código) es

Código:
AbreArchivo

IF ExisteElArchivo THEN
BEGIN
  ProcesaArchivo
END
Es decir, realmente (aunque tienes un if por delante) no estás tomando o no una acción dependiendo del resultado de Execute, sino que indistintamente seguías con el proceso. Lo solventaste con el FileExists, pero no había que llegar a eso, porque la cuestión es:

Si no abres el archivo entoncs no haces nada.

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Opendialog de carpetas Iuconlas Varios 20 23-09-2014 20:06:28
problema con opendialog lina maria Varios 5 15-04-2008 01:04:48
personalizar un opendialog ebeltete OOP 15 06-07-2006 23:58:53
Problema con OpenDialog Xianto Varios 1 09-02-2005 14:56:15
OpenDialog GIVO Varios 1 29-09-2003 23:20:23


La franja horaria es GMT +2. Ahora son las 17:09:29.


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