Criação de Componentes

Delphi

28/07/2009

Olá colegas,

Estou iniciando em criação de componente no Delphi 2009, e gostaria de saber como é que faço para minha property aparecer como um combobox com valores já preenchidos no object inspector, e se possível que ele seja como um Enum, por exemplo: o cara escolhe a opção banana e pra retorne um número 1.

Obrigado.

Abraços.


Tappedroso

Tappedroso

Curtidas 0

Respostas

Tappedroso

Tappedroso

28/07/2009

Fiz da seguinte forma e parece estar certo:

type
TFabricanteType = (Bematech, Daruma, Elgin);

atribui este parametro a minha property e apareceu normal no object inspector.


GOSTEI 0
Danielrsanches

Danielrsanches

28/07/2009

Fiz da seguinte forma e parece estar certo:


é isso aí ... tá correto !!!


GOSTEI 0
Jcleytonb

Jcleytonb

28/07/2009

Olá amigos ...

Vou utilizar este topico, pq é parecido com o que preciso e para não abrir outro, deixa tudo em um só lugar.


Sim, estou querendo tb mostrar dados em um componente, só que como amigo ai em cima fez, não serviria pra mim, pois os meus dados não são pré-definidos, eu não sei ao certo o que vai aparecer nesta propriedade.

Pra dar um exemplo mais claro, é como se fosse um componente ligado a banco, por exemplo TSQLTable, que só vai aparecer todas as tabelas que estão disponiveis, apos a escolha de um TSQLConnection, na propriedade SQLConnection, desde já agradeço a todos um abraço.


GOSTEI 0
Elip2008

Elip2008

28/07/2009

Amigo c eu entendi bem vc gostaria de pegar os tables em sua conexao. Se sim? o meu codigo fik assim (minha conexao eh cnn, listbox q eh lbTable):

cnn.GetTableNames(lbTable.Items);

Abs.


GOSTEI 0
Jcleytonb

Jcleytonb

28/07/2009

Olá amigo, obrigado pela ajuda ...


mais eu relendo o que eu escrevi, eu me expressei mal, e não passei realmente o que queria ...

Vou explicar novamente ...


Estou criando um componente ... que alguma de suas propriedades ( que vão aparecer no Object Inspector do Delphi ), depende de outra propriedade ( que tb esta no Object Inspector ), para poder ser selecionada ...


ai dei o exemplo do TSQLTable ... que para aparecer a lista das tabelas é preciso escolher um TSQLConnection ...

Seria mais ou menos isto que eu quero, como lá em cima o amigo fez ... eu ja tinha feito ... criando um Type, mas em outra propriedade que eu já sei quais os valores que apareceram na combo, neste caso os valores são dinâmicos ...


O meu problema é conseguir deixar este valores aparecendo na minha propriedade no Object Inspector ... dinâmicamente ....


novamente obrigado pela força ...


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/07/2009

Olá amigos ... Vou utilizar este topico, pq é parecido com o que preciso e para não abrir outro, deixa tudo em um só lugar. Sim, estou querendo tb mostrar dados em um componente, só que como amigo ai em cima fez, não serviria pra mim, pois os meus dados não são pré-definidos, eu não sei ao certo o que vai aparecer nesta propriedade. Pra dar um exemplo mais claro, é como se fosse um componente ligado a banco, por exemplo TSQLTable, que só vai aparecer todas as tabelas que estão disponiveis, apos a escolha de um TSQLConnection, na propriedade SQLConnection, desde já agradeço a todos um abraço.


creio que para isso seja necessário criar um editor de propriedades. procure por [i:48ec8b9896]property editor[/i:48ec8b9896].


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

28/07/2009

um outro caminho seria estudar o componente citado (SQLConnection) para saber como ele faz a manipulação daquela propriedade.


GOSTEI 0
Jcleytonb

Jcleytonb

28/07/2009

Olá amigo emerson.en ...


vou estudar sobre property editor ...

e sobre estudar o componente SQLConnection ...
eu não estou conseguindo, acessar os codigos fontes dos componentes nativos do Delphi, não sei o que aconteceu, eu estou usando Delphi 2009 original é registrado, e estou com este problema, sempre que tento debugar alguma classe de um componente nativo dis que o .pas, não foi encontrado ... não sei se instalei errado o Delphi ... mais estou com este problema ...


Mas estou olhando pelo codigo fonte do Zeos, vejo se encontrou algo ...


obrigado pela força.


GOSTEI 0
Osocram

Osocram

28/07/2009

Se eu entendi direito...

Cria um property MeuSqlConn:TSqlconnection
Cria uma property MinhasTabelas:TStrings;
Dae no create vc inicia ele....
dae no SET desta property vc faz. MeuSqlConn.GetTableNames(MinhasTabelas) ;


GOSTEI 0
Jcleytonb

Jcleytonb

28/07/2009

Obrigado pela atençção osocram ...


Vou testar desta forma que vc esta dizendo ...


Eu pesquisei sobre property editor ... como nosso amigo tinha sugerido e comprei um artigo aqui na DevMedia do Guinther

https://www.devmedia.com.br/articles/viewcomp.asp?comp=13327

só que eu estou utilizando o Delphi 2009 e não consegui declarar DesignEditor na minha uses, procurei no FindClass do Delphi 2009 e não achei TComponentEditor, acho que a solução deste artigo não vai servir pra mim ....


novamente obrigado.


GOSTEI 0
Osocram

Osocram

28/07/2009

Sobre o editor...

tenta usar [b:953f00c80d]DesignEditors, DesignIntf[/b:953f00c80d]
no lugar do [b:953f00c80d]DesignEditor[/b:953f00c80d]

E lembre-se que o editor é melhor vc deixar em uma package separado apenas para design... Senão vai ficar dando erro de alguma coisa Proxy.

Flw.

Obrigado pela atençção osocram ... Vou testar desta forma que vc esta dizendo ... Eu pesquisei sobre property editor ... como nosso amigo tinha sugerido e comprei um artigo aqui na DevMedia do Guinther https://www.devmedia.com.br/articles/viewcomp.asp?comp=13327 só que eu estou utilizando o Delphi 2009 e não consegui declarar DesignEditor na minha uses, procurei no FindClass do Delphi 2009 e não achei TComponentEditor, acho que a solução deste artigo não vai servir pra mim .... novamente obrigado.



GOSTEI 0
Jcleytonb

Jcleytonb

28/07/2009

Eu escrevi errado ... eu estava usando DesignEditors ... fui colocar DesignIntf e tb me deu erro ... dizendo que não encontrou

e obrigado pela dica de separar ... :lol:

tem outro Artigo do Guinther na edição 49 só que eu não sei se vai ser a mesma coisa, pq não tem nenhuma descrição ...

Conseguindo criar este editor, como eu faria para inserir componentes em tempo de projeto ... alguem saberia me informar como faria isto ou indicar algum artigo ? falo TEdit, TComboBox, TLabel esses tipos de componentes ...


Vlw amigo ...


GOSTEI 0
Osocram

Osocram

28/07/2009

É um pouco complexo essa parte... mas pelo jeito vc ja tem alguma experiencia em mexer com componentes.

Vou explicar na teoria como ele funcionaria.
Vc cria o MeuComponente,
Dae vc cria o MeuEditor
Precisa Registrar o MeuEditor como editor do MeuComponente.

O meu componente vai ser um Formulario normal que vai ser chamado apartir do MeuComponente. Então para facilitar e fazer certo... tudo de informações que vc precisa vc cria como propriedade no MeuComponente.

Exemplificando a sua pergunta o que precisamos para criar um componente em um form?
Precisamos basicamente o componente, owner e parent.
então vc pode criar a propriedade Plataforma:TWinControl (esse vai ser o parent). Note que não importa qual seja o parent. se vc pegar o owner desse parent vai ser o mesmo owner que v precisa p o seu componente.
var
vo_Edit :TDBComboEdit;
begin
vo_Edit := TDBComboEdit.Create(Plataforma.Owner);
vo_Edit.Parent := Plataforma;
end;
pronto...

Eu escrevi errado ... eu estava usando DesignEditors ... fui colocar DesignIntf e tb me deu erro ... dizendo que não encontrou e obrigado pela dica de separar ... :lol: tem outro Artigo do Guinther na edição 49 só que eu não sei se vai ser a mesma coisa, pq não tem nenhuma descrição ... Conseguindo criar este editor, como eu faria para inserir componentes em tempo de projeto ... alguem saberia me informar como faria isto ou indicar algum artigo ? falo TEdit, TComboBox, TLabel esses tipos de componentes ... Vlw amigo ...



GOSTEI 0
Jcleytonb

Jcleytonb

28/07/2009

Olá amigo ...


entendi o que vc me passou ...

eu tinha tentando algo parecido ... so que eu fiquei justamente na parte do parent como passa-lo por parametro, pq estes componentes eu vou criar em alguns cadastros, e nos meus cadastros eu tenho sempre como padrão um TPanel para colocar os componentes visuais, eu tentei fazer isto por conta propria mais cedo, mais não consegui, achar tipo o formulário que o meu componente não visual esta, foi este o meu problema, se eu der um Self, eu estou setando para o meu componente e não para o local onde ele esta ... Se o meu componente fosse visual, e um repositorio por exemplo TPanel, não teria problema, pois o Self eu estaria criando nele ele poderia ser o meu panel principal, mais não é bem isto que eu estou procurando, estou tentando criar de um componente não visual ... ou por um TComponentEditor, ou pelo TComponent ...


e realmente achei que seria uma resposta um pouco complexa ... por isso perguntei se alguem saberia um link ...


mais com esta sua dica vou tentar resolver ....



mais uma vez obrigado pela força.


GOSTEI 0
Jcleytonb

Jcleytonb

28/07/2009

é realmente relendo seu comentario ... deu pra clarear um pouco mais ...

eu estava pensando em criar uma propriedade String e da um Type Cast com o texto da propriedade ... só que não fiz isto, pq se eu der um Type Cast e desse um FindComponent ... como eu disse anteriormente eu não soube pegar o local que o meu component não visual esta localizado ... vou ver se passando o TWinControl ele consegue isto sem problema ....



vlw amigo .


GOSTEI 0
POSTAR