Ajuda com TListBox

02/02/2010

1

Oi gente, tudo bom?

Sou uma programadora iniciante em Delphi 7.
Estou precisando de uma ajudinha para criar um componente descendente de TListBox e queria contar com a ajuda de vocês. Já pesquisei no Google (notei que tem gente que estava precisando disso também, se você conseguiu, peço encarecidamente que me ajude colocando a resposta aqui neste tópico), já postei em fóruns e já não sei o que fazer. Se alguém souber como faço o que direi abaixo eu ficarei muito grata por essa ajuda.

Seguinte, eu preciso colocar na propriedade Items da ListBox nomes de arquivos sem a extensão, até aí tudo bem. Mas preciso armazenar o path em algum lugar pois vou precisar deles, portanto, pensei em criar uma nova propriedade Items2 do tipo TStrings também. Para cada nome de arquivo armazenado em Items do ListBox eu aloco o caminho relacionado nesta nova propriedade.

São duas propriedades TStrings, uma já existe.

Alguém sabe como criar essa propriedade?

Fico no aguardo, ficarei grata pela ajuda.

Nayane
nayaneline@yahoo.com.br
Responder

Posts

02/02/2010

Marcos Iwazaki

Vc teria que criar uma propriedade

property Caminho :Tstrings 

dae no OnCreate do componente fazer um override e fazer um create da sua nova variavel(propriedade)
ex:
  caminho := TStringList.Create;
E no evento onDestroy fazer um override e fazer a liberação do mesmo
  FreeAndNil(caminho)

Responder

02/02/2010

Nayane

Não funcionou, até compila, até cria o componente, mas quando clico naqueles três pontinhos (...) no ObjectInspector, dá a seguinte mensagem de erro:


Cannot assign a nil to a TRichEditStrings


O que tá acontecendo?

Responder

02/02/2010

Marcos Iwazaki

Vou dar um exemplo
FListaCampos: TStrings;

property ListaCampos:TStrings read FListaCampos write SetListaCampos; 

//Provavelmente o problema esta aqui. Deve estar errado o seu "Seter"
procedure TS100PesquisaRapida.SetListaCampos(const Value: TStrings);
begin
  FListaCampos.Assign(Value);
end;
Responder

02/02/2010

Nayane

A mensagem de erro continua, estou fazendo assim:


unit ItemsListBox;

interface

uses
  SysUtils, Classes, Controls, StdCtrls;

type
  TItemsListBox = class(TListBox)
  private
    { Private declarations }
    fItemPath: TStrings;
  protected
    procedure SetItemsPath(const Value: TStrings);
//    procedure SetItemsPath(const Value: TStrings);  virtual; // Tanto faz
    { Protected declarations }
  public
    { Public declarations }
  published
  property Path: TStrings read fItemPath write SetItemsPath;
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TItemsListBox]);
end;

{ TItemsListBox }

procedure TItemsListBox.SetItemsPath(const Value: TStrings);
begin
  fItemPath.Assign(Value);
end;

end.
Responder

02/02/2010

Marcos Iwazaki

aparentemente esta certo.

(Uma dica não use virtual neste caso).

mandei um email p vc.
Se quiser me mande o fontes disso que vc fez que eu posso testar aqui.
Responder
falta o construtor da classe, que deverá instanciar fItemPath.

unit ItemsListBox;

interface

uses
  SysUtils, Classes, Controls, StdCtrls;

type
  TItemsListBox = class(TListBox)
  private
    { Private declarations }
    fItemPath: TStrings;
  protected
    procedure SetItemsPath(const Value: TStrings);
    { Protected declarations }
  public
    { Public declarations }
    constructor Create(Owner: TComponent); override; // override, para podermos sobrescrever o método
  published
    { Published declarations }
    property Path: TStrings read fItemPath write SetItemsPath;
  end;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TItemsListBox]);
end;

{ TItemsListBox }

constructor TItemsListBox.Create(Owner: Tcomponent);
begin
  inherited; // irá executar o código de criação padrão do TListBox (herança)

  fItemPath := TStrings.Create;
end;

procedure TItemsListBox.SetItemsPath(const Value: TStrings);
begin
  fItemPath.Assign(Value);
end;

end.
Responder

02/02/2010

Nayane

Infelizmente não funcionou, o componente não aparece na pallete, do outro jeito até mostrava, acho que foi o "Owner: TComponent"
Responder

02/02/2010

Nayane

Já consegui, consegui através de uma lista firebird.

Fico satisfeita e agradeço a todos pela atenção.
Responder

18/10/2011

Leonardo Gazio

Já consegui, consegui através de uma lista firebird.

Fico satisfeita e agradeço a todos pela atenção.



Olá colega, você poderia me mostrar como você fez? Eu estou agarrado nesse problema e não tô achando solução em lugar nenhum, segue o meu email; leogazio@gmail.com

Grato,
Leonardo Gazio.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira