Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   recorrer listbox (https://www.clubdelphi.com/foros/showthread.php?t=35089)

DM2005 31-08-2006 05:02:41

recorrer listbox
 
Hola a todos, estoy trabajando en un proyecto, el cual carga en un listbox un archivo txt, y hasta ahora no eh conseguido, que, por medio de un speedbutton, recorra el .txt y cuando encontrar un dato mi form por ejemplo cambie el tamaño.

Código Delphi [-]
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
       ListBox2.Items.LoadFromFile('C:\IPMaximizada.txt');
end;

Código Delphi [-]
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
      
recorrer y al encontrar 'N', el form cambie el tamaño, ej. height:=200; widht:=300;
 
end;

agradeceria muchisimo por la ayuda...
saludos

roman 31-08-2006 05:57:46

Código Delphi [-]
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  I := Integer;

begin
  for I := 0 to ListBox2.Items.Count - 1 do
    if ListBox2.Items[i] = 'N' then
    begin
      Height := 200;
      Width := 300;

      break;
    end;      
end;

// Saludos

DM2005 31-08-2006 07:13:44

Hola Roman, sabes que coloque el codigo, y el carga el txt, y cuando hago el primer clique para que el recorra, el ya modifica el tamaño del form, mi txt, esta compuesto de la siguiente informacion:

S
S
S
N
N
S

por logica, deberia recorrer 3 cliques antes de cambiar el tamaño de mi form, eh intentado otras formas, y me acontence lo mismo.
Agradeceria si pudieras ayudarme con este pequeño problema.
Gracias.
//Saludos

dec 31-08-2006 07:23:58

Hola,

No entiendo muy bien qué es lo que quieres conseguir, puesto que el código de Román debería irte bien, ¿no? Yo voy a comentarlo a modo de "ruta" de lo que vamos a hacer. Si quieres tú puedes hacer lo propio, de manera que ayude a comprender qué es lo que necesitas.

Código Delphi [-]
procedure TForm1.SpeedButton1Click(Sender: TObject);
var
  I := Integer;
begin
  // Recorremos los elementos de la lista
  for I := 0 to ListBox2.Items.Count - 1 do
    // Y si nos topamos con uno que contenga "N"
    if ListBox2.Items[i] = 'N' then
    begin
      // Redimensionamos el formulario
      Height := 200;
      Width := 300;

      // Y puesto que ya lo hicimos, dejamos de buscar
      break;
    end;
end;

Lo único que se me ocurre al ver el "break" del código de Román es que tú no quieras salir del "bucle" en cuanto encuentres una "N" (en el ejemplo) sino que quieras seguir procesando el resto de elementos... si fuera esto, obviamente, es cuestión de que quites el "break" del "bucle". Ya dirás algo a ver qué tal. ;)

seoane 31-08-2006 13:16:30

Si entendí bien, no quieres recorrer todo el listbox con una sola pulsación, lo que quieres es saltar al siguiente item cada vez que pulses el botón. Es decir si la 'N' es el 3 elemento, tendrás que pulsar 3 veces para llegar a ella. El siguiente código recorre el listbox con cada pulsación, al llegar al final vuelve al primer elemento.

Código Delphi [-]
{$WRITEABLECONST ON}
procedure TForm1.SpeedButton1Click(Sender: TObject);
const
  i: integer = 0;
begin
  with Listbox2 do
  begin
    if i < Count then
      if Items[i] = 'N' then
      begin
        Self.Height := 200;
        Self.Width := 300;
      end;
    if i < Count-1 then
      inc(i)
    else
      i:= 0;
  end;
end;
{$WRITEABLECONST OFF}

DM2005 01-09-2006 16:19:20

Hola, a procedure que Seoane paso para mi funciona correcta, pero me gustaria que al recorrer el listbox, el no comienze desde el primer item, y si que recorra el listbox junto a otro listbox, es decir...que el listbox2 y listbox 4, recorran juntos con cada clique, y de alguna forma que el item del listbox2 sea igual al item del listbox4.
espero haber explicado bien..

Código Delphi [-]
{$WRITEABLECONST ON}
procedure TForm1.SpeedButton2Click(Sender: TObject);
const
  i: integer = 0;
begin
   with ListBox3.Items do
    begin
      if ListBox3.ItemIndex < Count-1
         then ListBox2.ItemIndex := ListBox2.ItemIndex + 1
         else MessageDlg('Final del curso !',mtInformation,[mbOk],0);
         Panel2.Caption := ListBox2.Items.Strings[ListBox2.ItemIndex];
         WebBrowser1.Navigate(strings[ListBox2.ItemIndex]);
    end;
  begin
  with ListBox4 do
   begin
    if i < Count then
      if Items[i] = 'N' then
      begin
        Self.Height := 300;
        Self.Width := 500;
        Self.Left := 400;
        Self.Top := 400;
      end;
    if i < Count-1 then
      inc(i)
    else
      i:= ListBox2.ItemIndex;
   end;
  end;}
end;
{$WRITEABLECONST OFF}
agradezco por la ayuda..
//saludos


La franja horaria es GMT +2. Ahora son las 17:33:12.

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