Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
Borrar un dato determinado de un Array.

Hola a todos, el problema es el siguiente: tengo un Array tipo record, el cual tiene diferentes valores entre ellos tiene uno que se llama Array[x].Activa (esta de tipo Boolean), y quiero que cuando el resultado sea false se borre el Array. Gracias por vuestra ayuda.
__________________
"La perseverancia es el camino del éxito"
Responder Con Cita
  #2  
Antiguo 23-03-2005
Avatar de marto
marto marto is offline
Miembro
 
Registrado: may 2003
Ubicación: Barcelona, Catalunya
Posts: 882
Poder: 22
marto Va por buen camino
Wop!

No entiendo tu pregunta... ¿te refieres a como detectar los valores que valen true? ¿A que cuando se ponga a true se borre? ¿Puedes explicarte un poco mejor?
__________________
E pur si muove
Responder Con Cita
  #3  
Antiguo 23-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
Borrar valor Array.

Hola, seré un poco más conciso. El hecho es que quiero borrar el Valor de una array TRecord sabiendo un valor del TRecor ( como lo explico??). Un poco de código me ayudará a explicarlo. El Array Trecord.

Cita:
type
TDades = Record
Dia: String[10];
Horari: String[10];
Hora: String[10];
Activa: Boolean;
Numero: integer;
end;
Los datos se graban en el array mediante un checbox, por medio de la función omple.
Cita:
if cb8a9.Checked=True then
Begin
botopremut[filas]:=cb8a9.Caption;
omple;
dibuixa;
end
else
Begin
filas:=filas-1;
dibuixa;
end;
end;
Y el procedimiento omple:
Cita:
begin
setlength(Dades,Length(Dades)+1);
Dades[High(Dades)].Dia:=rgDies.Items[rgDies.ItemIndex];
Dades[High(Dades)].Horari:=rgThorari.Items[rgThorari.ItemIndex];
Dades[High(Dades)].Hora:=botopremut[high(Dades)];
Dades[High(Dades)].Activa:=True;
Dades[High(Dades)].Numero:=filas;
filas:=filas+1;
end;
Se trata de borrar el valor del array si coincide con el valor del Checkbox (si está False) y añadirlo si está True (eso ya lo hace).

Muchas gracias por vuestro ayuda. Gracias.
__________________
"La perseverancia es el camino del éxito"
Responder Con Cita
  #4  
Antiguo 23-03-2005
erick78 erick78 is offline
Miembro
 
Registrado: ene 2005
Posts: 10
Poder: 0
erick78 Va por buen camino
Yo creo que deberias usar un Tlist en el cual almacenes, modifiques, elimines los registros
Responder Con Cita
  #5  
Antiguo 24-03-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
Hola alfredo!

Es verdad que si utilzas TList te ahorras mucho trabajo, tal vez te convenga más esa opción. Por otra parte cuando he trabajado con arreglos de tipo record y es necesario borrar algún elemento intermedio, lo que se me ha ocurrido es lo siguiente:

Se crea una versión temporal en memoria del arreglo y en el se van insertando sólo los elementos que contengan el valor 'Active=True'. Al final reemplazas el arreglo original por el que se ha creado temporalmente y en esta nueva versión los registros con 'Active=False' han sido omitidos o eliminados.

Bueno, espero que sea útil y seguimos en contacto
Responder Con Cita
  #6  
Antiguo 24-03-2005
alfredosg19 alfredosg19 is offline
Miembro
 
Registrado: ene 2005
Ubicación: Barcelona
Posts: 91
Poder: 20
alfredosg19 Va por buen camino
Ufff, solución: borrar dato array.

Hola y gracias por vuestras aportaciones, la solución final a todo este problema es este:

1. Primero hago un procedimiento que me compara el botón (que ya le introduciré posteriormente) por lo que me escribe en el Array con los datos del Array. Primero recorro el Array en busca del texto, cuando lo encuentro
lo que quiero es que me sobreescriba los valores para hacer desaparecer el valor que ya no quiero, y finalmente le borro un registro al Array.

Código:
Procedure TPagesDlg.busca(Boto: String);
 var a,i:integer;
 begin
 For i:=low(Dades) to high(dades) do
   if Dades[i].Hora=Boto then
 	Begin
 	  For a:=i to High(Dades) do
 		Begin
 		  Dades[a].Hora:=Dades[a+1].Hora;
 		  Dades[a].Dia:=Dades[a+1].Dia;
 		  Dades[a].Horari:=Dades[a+1].Hora;
 		  Dades[a].Activa:=Dades[a+1].Activa;
 		  Dades[a].Numero:=Dades[a+1].Numero;
 		end;
 	end;
   SetLength(Dades,Length(Dades)-1);
 end;
2. Después sólo me queda redibujar el StringGrid y ordenarlo con otra rutina. Bueno no sé si lo he explicado bien, pero si alguien encuentra este hilo y tiene alguna duda o necesita ayuda que se ponga en contacto conmigo.
__________________
"La perseverancia es el camino del éxito"
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


La franja horaria es GMT +2. Ahora son las 04:37:54.


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
Copyright 1996-2007 Club Delphi