Ajuda com TListBox
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
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
Nayane
Curtidas 0
Respostas
Marcos Iwazaki
02/02/2010
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)
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)
GOSTEI 0
Nayane
02/02/2010
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?
Cannot assign a nil to a TRichEditStrings
O que tá acontecendo?
GOSTEI 0
Marcos Iwazaki
02/02/2010
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;
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;
GOSTEI 0
Nayane
02/02/2010
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.
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.
GOSTEI 0
Marcos Iwazaki
02/02/2010
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.
(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.
GOSTEI 0
Emerson Nascimento
02/02/2010
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.
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.
GOSTEI 0
Nayane
02/02/2010
Infelizmente não funcionou, o componente não aparece na pallete, do outro jeito até mostrava, acho que foi o "Owner: TComponent"
GOSTEI 0
Nayane
02/02/2010
Já consegui, consegui através de uma lista firebird.
Fico satisfeita e agradeço a todos pela atenção.
Fico satisfeita e agradeço a todos pela atenção.
GOSTEI 0
Leonardo Gazio
02/02/2010
Já consegui, consegui através de uma lista firebird.
Fico satisfeita e agradeço a todos pela atenção.
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.
GOSTEI 0