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

 
 
Herramientas Buscar en Tema Desplegado
  #7  
Antiguo 02-07-2003
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
como yo lo hice, es así:

en mi caso era un TTreview que cada hijo tenia en su propiedad 'data' un puntero a
un registro, para tu caso es lo mismo solo que usas un boton y la propiedad 'tag'


Y adicionalmente usaba una lista de punteros (TCDenMemoria) para leer desde un archivo de configuracion el registro que tenia asociado cada nodo del TTreeview.

Siento mucho no poder ponerte todo el código para copiar y pegar en delphi, pero aqui tienes lo básico.


NOTA: Espero que no estes peleada con los punteros....


Los tipos de datos que yo definí son estos:
Código:
 type TCadena=String[255];

  type TEnCD=record // el regisro asociado a cada boton
    Titulo,
    Categoria,
    RutaEnCD,
    Comentario  :Tcadena;
  end;
  type TpEnCD=^TEnCD;
// TpEnCD es un tipo de datos que será un puntero al registro TEnCD

//TCDenMemoria es una lista de punteros 
// implementada en Delphi 3
// para leer desde un archivo todos los registros de tipo TEnCD

  type TCDenMemoria=record
    siguiente: pointer;
    datos: TenCD;
    end;

  type TpCDenMemoria=^TCDenMemoria;

para crear el registro asociado a un boton:
Código:
var pn:TpEnCD;
begin
 try
  begin
    new(pn);
    pn^.Titulo:=edit1.text;
    pn^.RutaEnCD:=edit2.text
    pn^.Comentario:=richedit1.text;
    pn^.Categoria:='CD sin categorias'

para liberar de memoria:
Código:
var    pTV:TpEncd;
begin
    repeat
      try
        ptv:=Tpencd(boton.tag);
        dispose(ptv); //posible EInvalidPointer exception.
       //buscar siguiente boton //el nodo para mi son los hijos de un TTReview, para ti es el array de botones 
      except
	// fallo al liberar el registro
      end;
    until boton=nil; // tu sabrás cuando se termina el array de botones ;-)
para ejecutar la aplicacion asociada a un boton:
Código:
var fich, ruta:string;

    p:=tpencd(BotonSeleccionado.tag);
    fich:=p^.Titulo;
    ruta:=extractfilepath(p^.RutaEnCD);
    shellexecute(handle,pchar('open'),pchar(fich),nil,pchar(ruta),SW_SHOW);

para guardar todos los registros a un solo archivo
Código:
var     f:File of TenCD;
begin
    assignfile(f,'c:\window.cfg');
    rewrite(f);

    pdatos:=TpEncd(boton.tag);
    write(f,pdatos^);
// buscar siguiente boton y hacer lo mismo


    CloseFile(f);
end
para leer del fichero la configuracion de todos los botones.


Código:
procedure Tfrmppal.CargaDatos();
{ pedir el fichero de cfg
  abrirlo y crear lista en memoria
  buscar los programas y añadirlos segun la estructura TpEnCD
}
var f:file of TenCD;
    fdato:TenCD;
    puntAct:TpCDenMemoria;
    i:integer;

begin
try
  //buscar el window.cfg

    opendlg.Title:='Abrir fichero de Configuración';
    opendlg.Filter:='Configuración|*.cfg';
    opendlg.InitialDir:='c:\al cd';
    opendlg.FileName:='window.cfg';
    opendlg.DefaultExt:='.cfg';
    if not opendlg.execute then
    begin
      exit
    end;


  assignfile(f,opendlg.FileName);
  filemode:=fmOpenRead;
  reset(f);

  new(lista);
  puntact:=tpcdenMemoria(lista);
  read(f,fdato);
  except
    frmNotificar.Error(true,clblue,'El fichero de datos: window.cfg '+#10+ 'No está presente o está vacio.' );
    dispose(lista);
    exit;
  end;

 //averiguar si tiene categorias o no el CD;

reset(f);
while not eof(f) do
begin
    read(f,fdato);
    puntact^.datos:=fdato;
    if not eof(f) then
    begin
      new(tpcdenmemoria(puntact^.siguiente)); // exception    EOutOfMemory
      puntact:=tpcdenmemoria(puntact^.siguiente);
      puntact^.siguiente:=nil;
    end;

 end;
end;
Muuuuucha suerte!!!
Responder Con Cita
 


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


La franja horaria es GMT +2. Ahora son las 09:22:13.


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