Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   quiero ordenar en varios edit lo que tengo en un listbox (https://www.clubdelphi.com/foros/showthread.php?t=78137)

vanesa007 22-03-2012 18:16:48

quiero ordenar en varios edit lo que tengo en un listbox
 
* tengo varios edit, un boton y un listbox con palabras
* hay tantos edit como palabras en el listbox
* luego de seleccionar una palabra en lisbox, presiono el boton y paso esa palabra al edit, y asi voy seleccionando palabra y pasando a los edit,a sta que no ayan mas palabras en el listbox

la pregunta es.. como puedo acer esto con un solo boton, opr que podria poner un boton para cada edit, pero quiero aorrarme esos botones y acerlo con uno solo..

desde gracias al que pueda resolverme

ecfisa 22-03-2012 18:43:11

Hola Vanesa007.

Código Delphi [-]
procedure TForm1.btnPasarClick(Sender: TObject);
var
  i,c: Integer;
begin
  c:= 0;
  for i:= 0 to ControlCount-1 do
    if Controls[i] is TEdit then
    begin
      TEdit(Controls[i]).Text:= ListBox1.Items[c];
      Inc(c);
    end;
end;

Saludos.

vanesa007 22-03-2012 21:05:39

hola amigo, muchas gracias por su pronta respuesta, peor sigo con problema, se debe a mi escaso conocimiento programacion..... me juega en contra de lo que pretendo acer... no entiendo mucho las lineas que me paso, las copie agruegue un listbox, unos edit y boton, puse ese codigo en el boton, pero no me anda, me aparece un mensage de error de ARRAY TYPE REQUERIDO...

ecfisa 22-03-2012 21:30:54

1 Archivos Adjunto(s)
Hola.

Te adjunto un ejemplo para que puedas revisar el funcionamiento con tranquilidad.

Saludos.

vanesa007 22-03-2012 22:03:20

si... bien, desde gracias.. gracias y gracias por tomarce tiempo en ayudarme, peor.. es algo asi como lo que trate de acer, por ejemplo..
en ejemplo que me amndo....


* los dias estan desordenados.. bien asi
* con BOTON elijo LUNES, presiono boton Y lo amndo al EDIT1.. que seria el edit para dia LUNES
* luego elijo el MARTES presiono BOTON y lo paso al EDIT2 que corresponderia para el dia martes
y asi sucesivamente... asta pasar el ultimo dia que esta en listbox, DOMINGO al ultimo edit que hay

Le comento para que es... mas adelante.. mientras estoy continuando con estudio de programacion, are una base datos. para almacenar datos personales de socios de un club, los datos personales de estas personas estan en archivos de texto, empesando todos ello por su nombre o en otros casos apellido, luego demas datos como ser domicilio, estado civil, que tipo de trabajo tiene, si es casado, separado soltero viudo, hijos que tiene, nombre de ellos, nombre de padres y madre, donde nacio lugar fehca hora, Tramites que realizo en club... y mas... cada uno esta separado por un punto y coma

Todo en archivo texto, y cada datoe sta desordenado respecto a otra persona, es por ello que estroy aciendo un programita, que me abre este archivo, lee la primer linea de datos, y me los coloca en un listbox, cada dato personal esta separado por coma, punto y coma, o dos puntos, pero en fin... estan separados, y luego viene la etapa de ordenar segun un orden especifico...

* nombre
*apellido
*domicilio
*fecha en que nacio
*pais
*provincia
*...
...
*...
*...
* cantidad tramites que realizo
*********** tramite 1
*********** tramite 2
*********** tramite...
*********** tramite...


y asi sucecivamente, hay aprtes que ya me imagino como acer, pero otras no... despacito despacito ire aciendo esto para usarlo en mi trabajo y alivianarme mas las tareas....

es para esta parte que quiero... asi ordeno los datos de una eprsona que estan en una linea, y colocarlos en una ficha o registro....

la amnera que le expuse es la forma que se me ocurrio, es largo el tema, para ordenar cada linea, siemdo que hay mas de 400 personas, osea 400 lineas en el archivo de texto

supongo que me pude expresar bien mi idea...

pero igual.. muchas gracias por su tiempo

Caral 22-03-2012 22:32:09

Hola
Coloca en el listbox multiselect = true.
En un boton:
Código Delphi [-]
var
  i, n:Integer;
  comp:TComponent;
begin
  for i := 1 to 9 do begin // diez edits
  comp := FindComponent('Edit' + IntToStr(i+1));

  for n:= 0 to Listbox1.Items.Count  do
  begin
  if ListBox1.Selected[i] = true then
  TEdit(comp).Text:= listbox1.Items[i];
  end;
  end;
Saludos

ecfisa 22-03-2012 23:42:09

Hola.

Ahora creo entender un poco mejor, entonces el ejemplo que te puse no se aplicaría a este caso.
Si los queres pasar a mano, la opción de Carlos es la correcta ya que se pasarán de acuerdo al órden en que los seleccionaste.

También existe la posibilidad de ahorrarte esa taréa si el formato en que están los datos en el archivo de texto mantiene una secuencia lógica.
Supongamos que los datos fueran tres: nombre, apellido y domicilio. Si los datos en el archivo mantienen ese órden y están separados por ';', como por ejemplo
Cita:

Juan;Perez;Calle1;Ana;Martinez;Calle2;Pedro;García;Calle3;María;Juarez;Calle4;Jhon;Smith;5thStreet
Podrías hacer:
Código Delphi [-]
const
  NCAMPOS = 3;  // nombre,apellido,domicilio

var
  TS: TStrings;
  NroDato: Integer = 0;  // inicializar NroDato

procedure TForm1.FormCreate(Sender: TObject);
begin
  TS:= TStringList.Create;
  TS.LoadFromFile('C:\SOCIOS.TXT');
  TS.Delimiter:= ';';
  TS.DelimitedText:= TS.Text;
end;

procedure TForm1.btnPasarAEditClick(Sender: TObject);
var
  i: Integer;
begin
  Edit1.Text:= TS[NroDato];
  Edit2.Text:= TS[NroDato+1];
  Edit3.Text:= TS[NroDato+2];
  if NroDato + NCAMPOS < TS.Count then Inc(NroDato,NCAMPOS);
end;
Pero esto sólo si los datos en el archivo cumplen las condiciones que te mencioné arriba.

Saludos.

vanesa007 28-03-2012 03:57:23

hola a todos... recien hoy me pude conectar para, es que mi trabajo me impide conectarme muy de seguido. bueno.. ya pude arreglar mi problema, leyendo y leyendo se aprende, jajajaja...

bueno mi problema era asi.. en el archivo tengo los nombres de socios del club con datos de elos, datos como donde viven, ubicacion, nuceo familiar, esposa hijos, expedientes realizado en club, expedientes recibidos y emitidos.. y mas datos, bueno... todo esto esta cargado en un archivo WORD, en tablas, pero debido a la maladesorganizacion lo erdenaron en tablas pero desordenados los datos de cada socio, aora se grabo todo en un archivo de texto, cada linea corresponde a un socio, y cada dato esta separado por un PUNTO Y COMA, por una COMA, o un SIMBOLO, lo importantee s que esta separado,

Bueno se carga esos datos en LISTBOX y luego simplemente queda ordenar dato por dato pasando al los edit manualmente, y esto lo solucione con evento ONCLICK de cada edit, asi selecciono el ITEM del LISTBOX y elijo el EDIT donde lo quero despositar, y solucione mi inconveniente

epro.. igual desde ya muchas gracias, a los que s etomaron un tiempillo en acer unas cuantas lienas de codigo para ayudarme, lineas de codigo que ya me las baje y las lleve para anlaizarlas y estudiarlas, las cuales me serivran para otras partes de mi programita..

muchas gracias a todos..

vanesa007 28-03-2012 04:19:04

1 Archivos Adjunto(s)
este es a lo que llegue, es una parte de mi programa, seria la primera parte de varias... aciendo consultas al foro, en varios libros pdf y paginas de programacion, aprendi bastante, pero me falta varios quilometros todavia..

Los errores que tengo que arreglar en esta parte es...
* cuando ago click en BLOQUE EDIT DATOS sin aber seleccionado un ITEM me salta un error
* no es error, pero me gustaria ver la manera de desacer la ultima accion, por ejemplo si me equivoco de EDIT y pongo un dato en otro EDIT, como desacer ese ultima movimiento, para correjir y colocarlo en lugar correcto o mejor seria un doble click, el cual no me anda, por que cada edit tiene evento ONLICK, con motivo de que selecciono el ITEM y elijo el edit con un CLIC para depositar el dato, entonces doble click no me anda.
* y almacenar el archivo destino..

y demas son errores que a lo voy corregir, y terminar bien esta, faltaria mejorar presentacion ordenar y cosas asi...

ecfisa 28-03-2012 12:56:03

Hola Vanesa007.

No pude probar tu adjunto por que falta Unit1.pas.

Con respecto al pasaje del ListBox a los Edits, asigna este procedimiento al evento OnClick de todos ellos:
Código Delphi [-]
procedure TForm1.EditClick(Sender: TObject);
begin
  with ListBox1 do
   if ItemIndex > -1 then  // ¿ Hay un item seleccionado ?
   begin
    (Sender as TEdit).Text := Items[ItemIndex];  // copiar el valor al Edit
    FUltimo:= (Sender as TEdit)     
   end
   else
     SetFocus;  // foco en ListBox
end;

Para cancelar la última acción:
Código Delphi [-]
procedure TForm1.btnDeshacerClick(Sender: TObject);
begin
  if Assigned(FUltimo) then
    FUltimo.Clear;   // borrar contenido ultimo Edit
  ListBox1.SetFocus;
end;
FUltimo es una variable privada de tipo TEdit (también podría ser global a la unit) que se encarga de almacenar el último Edit al que se le asigno un valor.

Saludos.

roman 28-03-2012 17:45:54

Cita:

Empezado por vanesa007 (Mensaje 428646)
* no es error, pero me gustaria ver la manera de desacer la ultima accion, por ejemplo si me equivoco de EDIT y pongo un dato en otro EDIT, como desacer ese ultima movimiento, para correjir y colocarlo en lugar correcto

¿Hay alguna necesidad especial de pasar los datos a un edit? Porque si es sólo para ordenar los datos del archivo original yo lo que haría es olvidarme de los edits y colocar dos listbox. Uno con los datos originales y otro con los datos ordenados.

Con un doble click en el primer listbox pasaría el item seleccionado al segundo y viceversa para corregir errores.

// Saludos

vanesa007 24-04-2012 03:55:30

gracias, y gracias y mas gracias por responderme mis inquietudes...

saludos a los amigos foreros delphi


La franja horaria es GMT +2. Ahora son las 09:21:06.

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