Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Llenar ListBox con fuentes del sistema (https://www.clubdelphi.com/foros/showthread.php?t=53056)

totote 08-02-2008 21:06:23

Llenar ListBox con fuentes del sistema
 
Hola a todos.

Queria saber si se puede llenar un ListBox con las fuentes que estan instaladas en la pc.

Saludos.

dec 08-02-2008 22:05:15

Hola,

Fíjate en este hilo, tienes varias formas de conseguir lo que quieres. ;)

totote 08-02-2008 22:46:16

Muchas gracias dec :D

Khronos 09-02-2008 00:50:33

Código Delphi [-]
Listbox1.items:=screen.fonts;


Salu2

egostar 09-02-2008 01:02:52

Cita:

Empezado por Khronos (Mensaje 264506)
Código Delphi [-]
Listbox1.items:=screen.fonts;


Salu2

Vaya, que simple lo hiciste......

Salud OS

ixMike 09-02-2008 01:30:52

Cita:

Empezado por Khronos (Mensaje 264506)
Código Delphi [-]
Listbox1.items:=screen.fonts;

Salu2

¿eso no explota? :D

Por si las moscas:
Código Delphi [-]
ListBox1.Items.AddStrings(Screen.Fonts);



Salu2 ;)

egostar 09-02-2008 01:37:18

Cita:

Empezado por ixMike (Mensaje 264516)
¿eso no explota? :D

Explotar ????, pues he ejecutado la instrucción y pues no, funcionó bien.

Salud OS

totote 09-02-2008 02:17:06

la verdad es que está resuelto muy facil XD jajaja

jachguate 09-02-2008 02:23:04

Cita:

Empezado por ixMike (Mensaje 264516)
¿eso no explota?

¡Claro que no!

Gracias al estupendo trabajo del equipo de desarrollo de la VCL!

Código Delphi [-]
procedure TCustomListBox.SetItems(Value: TStrings);
begin
  if Style in [lbVirtual, lbVirtualOwnerDraw] then
    case Style of
      lbVirtual: Style := lbStandard;
      lbVirtualOwnerDraw: Style := lbOwnerDrawFixed;
    end;
  Items.Assign(Value);
end;

¡gracias, chavales! Por eso es un placer programar en Delphi!
:p:p

ixMike 09-02-2008 02:35:37

La última vez que asigné TStrings como si fuera un valor me explotó el petardo en la mano:

Código Delphi [-]
var
  Lista: TStrings;
begin
...
Listbox1.Items:=Lista;
...
Lista.Free;


:D:D

keyboy 09-02-2008 02:39:14

Eso explota pero por usar un TStrings en lugar de un TStringList.

Bye

jachguate 09-02-2008 03:14:01

Bueno, eso depende....

Código Delphi [-]
var
  Lista: TStrings;
begin
  Lista := TStringList.Create();
  try
    ...
    Listbox1.Items:=Lista;
    ...
  finally
    Lista.Free;
  end;

Esto debiera ir perfecto!

ixMike 09-02-2008 03:14:53

Cita:

Empezado por keyboy (Mensaje 264537)
Eso explota pero por usar un TStrings en lugar de un TStringList.

Bye

Eso explota porque al hacer ListBox1.Items:=Lista y después liberar Lista, al intentar al acceder a ListBox1.Items... Error Acces violation bla bla bla porque ya no existe, ¡lo he liberado! :D


Salu2.

jachguate 09-02-2008 03:24:11

Parece que no leíste el código que puse en el post #9 de este hilo. Ahora veo que solo seguís suponiendo que explotaría... pero en realidad no pasa. Te invito a comprobarlo.

Código Delphi [-]
var
  Lista: TStrings;
begin
  Lista := TStringList.Create();
  try
    Lista.Add('A que no exploto!!!');
    Listbox1.Items:=Lista;
  finally
    Lista.Free;
  end;
  try
    ShowMessage(ListBox1.Items[0]);
  except
    ShowMessage('Explotó!');
  end;
end;

;)

ixMike 09-02-2008 03:34:57

Cita:

Empezado por jachguate (Mensaje 264552)
Parece que no leíste el código que puse en el post #9 de este hilo. Ahora veo que solo seguís suponiendo que explotaría... pero en realidad no pasa. Te invito a comprobarlo.
;)

:eek:Es cierto, pero, ¡si a mí me pasaba!:confused:

Mí no entender.


Edito: creo recordar que me pasaba entre objetos TStrings, no con la propiedad Items.

egostar 09-02-2008 03:35:45

Cita:

Empezado por ixMike (Mensaje 264550)
Eso explota porque al hacer ListBox1.Items:=Lista y después liberar Lista, al intentar al acceder a ListBox1.Items... Error Acces violation bla bla bla porque ya no existe, ¡lo he liberado! :D


Salu2.

Amigo ixMike, que quieres decir con intentar acceder a ListBox1.Items, si liberas Lista el ListBox1.Items ya cargo lo que tuviese Lista, asi que no veo donde este el error de acceso.

Prueba este código, funciona sin problemas y accedes al ListBox tantas veces quieras y Lista ya está "liberada".......

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
    procedure ListBox1DblClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Lista: TStrings;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Lista := TStringList.Create;
  with Lista do begin
    Add('This example uses A string List.');
    Add('It is the easiest way to add strings');
    Add('to a combobox''s list of strings.');
    Add('Always remember TStrings.Create method');
    Add('is abstract; So use TStringList.Create');
    Add('method instead.');
  end;
  Listbox1.Items := Lista;
  Lista.Free;
end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
  ShowMessage(ListBox1.Items.Strings[ListBox1.ItemIndex]);
end;

end.

Salud OS

jachguate 09-02-2008 03:36:26

No lo tengo a mano ahora para confirmarlo... pero estoy seguro que esto es así desde Delphi 1.

Quizás te pasaba con Turbo Pascal.. :D :D :D

Un saludo.

;)

ixMike 09-02-2008 03:39:10

Cita:

Empezado por egostar (Mensaje 264556)
Amigo ixMike, que quieres decir con intentar acceder a ListBox1.Items, si liberas Lista el ListBox1.Items ya cargo lo que tuviese Lista, asi que no veo donde este el error de acceso.

Prueba este código, funciona sin problemas y accedes al ListBox tantas veces quieras y Lista ya está "liberada".......

Salud OS

:D se te adelantó jachguate :D

De todas formas, Items no es una variable tipo dato a la que se le asignes un número, un carácter... sino que es un objeto... creo que ahí estaba mi jaleo mental :rolleyes:

Gracias a los dos.


Añado: me pasaba con Delphi 3, pero ya digo, puede que fuera entre objetos TStrings, o algo así...

egostar 09-02-2008 03:39:47

Cita:

Empezado por jachguate (Mensaje 264557)
No lo tengo a mano ahora para confirmarlo... pero estoy seguro que esto es así desde Delphi 1.

Quizás te pasaba con Turbo Pascal.. :D :D :D

Un saludo.

;)

Casi estoy seguro que el problema era que usabas esto

Código Delphi [-]
var
  Lista: TStrings;

begin
  Lista := TStrings.Create;
end;

en lugar de esto

Código Delphi [-]
var
  Lista: TStrings;

begin
  Lista := TStringList.Create;
end;

Salud OS

jachguate 09-02-2008 03:40:50

Fantástico, ¿no?
¿Por qué crees que he dicho esto antes?

Cita:

Empezado por yo mero
Gracias al estupendo trabajo del equipo de desarrollo de la VCL!
...
¡gracias, chavales! Por eso es un placer programar en Delphi!



La franja horaria es GMT +2. Ahora son las 23:11:31.

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