Jerfs 1 Denunciar post Postado Julho 21, 2008 Galera, o problema agora é complicado, não vejo saída, vou tentar explicar mas é difícil até de explicar... rs Tenho um componente PageControl, nele estou criando dinamicamente um CheckListBox e atribuindo as propriedades normalmente. Bom até aí tudo bem, meu problema é: O usuário checa vários items desse checkListBox. Como eu consigo me referir ao ChecklistBox (que foi criado dinamicamente) para gravar os items checados!? Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Julho 21, 2008 ten faze o seguinte, declara um contador 'i', o ck é cheklistbox rsrs eita nome longo.... for i:=0 to ck.Items.Count-1 do begin if(ck.Checked) then showmessage('checado Item'+inttostr(i)); end; pra grava.... ae os campo q você tem no bd tem q faze uma conversão, lol é pouco bds tem o tipo boolean; if(ck.item.checked=true)then campo:='verdadeiro' else campo:='falso'; espero tenha ajudado :) Compartilhar este post Link para o post Compartilhar em outros sites
Jerfs 1 Denunciar post Postado Julho 21, 2008 Ae shini, seguinte, isso ae até é de boa... o meu problema é, quando o usuário seleciona um assunto, abre-se um ck (como você definiu) que é criado dinamicamente dentro de uma página no pagecontrol, isso que dizer que, se o usuário selecionar 10 assuntos, vão ser criados 10 páginas dentro do pagecontrol e em cada página terei um ck. eu nomeei cada ck (criado dinamicamente) com o nome do assunto que foi clicado previamente, por exemplo, quando o usuário clica no assunto "portas", abrirá uma página dentro do pagecontrol com o nome "portas" na aba, e dinamicamente será criado um CK com o nome de "portas_sub". e assim sucessivamente (falei que era complicado rs)... Quando o usuário clicar no botão SALVAR, será "varrido" desde a primeira página do pageControl até a última, para cada página criarei uma string quer terá o nome da página concatenado com cada item separado por ';'. Bom acho que consegui explicar mais a fundo não é!? será!? rsrs tenta me ajudar pode favor! Obrigado Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Julho 21, 2008 teu problema seria, saber qtas paginas estão aberta, e quais items estão selecionados? rsrs to meio perdido Compartilhar este post Link para o post Compartilhar em outros sites
FÁBIO ANALISTA 0 Denunciar post Postado Julho 21, 2008 Galera, o problema agora é complicado, não vejo saída, vou tentar explicar mas é difícil até de explicar... rs Tenho um componente PageControl, nele estou criando dinamicamente um CheckListBox e atribuindo as propriedades normalmente. Bom até aí tudo bem, meu problema é: O usuário checa vários items desse checkListBox. Como eu consigo me referir ao ChecklistBox (que foi criado dinamicamente) para gravar os items checados!? Compartilhar este post Link para o post Compartilhar em outros sites
Jerfs 1 Denunciar post Postado Julho 22, 2008 Vou tentar ser mais direto: eu quero uma forma de converter uma string para um componente, por exemplo, eu tenho uma string que é exatamente o nome do componente e quero usar essa string para poder fazer o seguinte: <valor da string>.items.string[<valor da string>.itemIndex]; quero que essa string se comporte como um componente! agora acho que vai! rs Compartilhar este post Link para o post Compartilhar em outros sites
Discorpio 1 Denunciar post Postado Julho 23, 2008 Boa noite a todos. Vamos lá Jerfs, mais uma vez tentar te ajudar. Para voce fazer com que uma string se comporte como um componente, obviamente que voce quer trabalhar com o nome do componente, assim sendo voce pode utilizar o método FindComponent('Nomedocomponente'), implementado na classe TComponent. Dependendo de onde voce vai utilizar esse método por exemplo, se for dentro de um Form onde a classe TForm herda indiretamente de TComponent, então TForm também herda esse método, só que ele vai localizar os componentes contidos no Form, se voce utilizar assim: Application.FindComponent('NomedoForm'), esse método só localizará os objetos contidos no objeto Application que são os Forms. Vamos ao que interessa, ou seja, o código: Vamos implementar o que voce deseja, por exemplo, em um método qualquer: procedure TForm1.AchaCheckList(NomeChkLst: String); var Comp: TComponent; Indice: Integer; begin Comp := FindComponent(NomeChkLst); if Comp is TCheckListBox then begin for Indice := 0 to Pred(TCheckListBox(Comp).Count) do if TCheckListBox(Comp).Checked[Indice] then ShowMessage(TCheckListBox(Comp).String[Indice]); end; end; Espero que isso resolva. Um abraço Compartilhar este post Link para o post Compartilhar em outros sites
Jerfs 1 Denunciar post Postado Julho 25, 2008 Deu certo! Valeu!!! Compartilhar este post Link para o post Compartilhar em outros sites
Discorpio 1 Denunciar post Postado Julho 25, 2008 Bom dia Jerfs. Existe sim, uma restrição que é na hora de voce fazer o Casting. Mas o que é o Casting (TypeCast). É exatamente a converção de um tipo de objeto para outro tipo de objeto que herda do primeiro. Como assim ? Quando declaramos a variável assim: var Comp: TComponent;, como TComponent é digamos assim o pai da maioria dos componentes do Delphi, ou seja, a maioria dos componentes do Delphi herdam de TComponent, então voce pode fazer referência de qualquer classe TLabel, TListBox, TEdit e etc a essa variável que é do tipo TComponent. Exemplo: var Comp: TComponent; Lbl: TLabel; Edt: TEdit; begin Lbl := TLabel.Create(Self); Edt := TEdit.Create(Self); .... Comp := Lbl; .... Comp := Edt; end; Bom, eu disse que voce pode fazer referência conforme o mostrado acima, entretanto esse código não converte a variável Comp para o tipo de objeto referênciado que são ora o TLabel (Lbl), ora TEdit (Edt), assim sendo, somente com a variável (Instancia) Comp, nós não conseguimos acessar todos os métodos do objeto referência. Exemplo: Suponhamos que queremos ter acesso ao método Caption do TLabel Lbl com a variável Comp: var Comp: TComponent; Lbl: TLabel; Edt: TEdit; begin Lbl := TLabel.Create(Self); Edt := TEdit.Create(Self); Comp := Lbl; Comp.Caption := 'Meu Label'; // Não compila TLabel(Comp).Caption := 'Meu Label'; // Assim compila end; Repare que eu fiz um Casting (Conversão) na última linha de instrução, e este Casting também pode ser feito desta maneira: (Comp as TLabel).Caption := 'Meu Label'; // Assim também compila Entretanto, devo te orientar que se voce fizer referencia a variável (Instância) Comp a um objeto TEdit e tentar fazer o Casting (Conversão) a um objeto TLabel, o seu programa gerará uma exceção (Erro), assim: var Comp: TComponent; Lbl: TLabel; Edt: TEdit; begin Lbl := TLabel.Create(Self); Edt := TEdit.Create(Self); Comp := Edt; TLabel(Comp).Caption := 'Meu Label'; // Gera Erro pois Comp faz referência a Edt que é TEdit end; Para evitar isso existe os operadores da RTTI (Run Time Type Information - Informação do Tipo em Tempo de Execução), esses operadores são dois, que são eles: 1º) AS: O as já foi informado acima: (Comp as TLabel).Caption, e este operado faz o Casting (Conversão), tal qual o procedimento TLabel(Comp). 2º) IS: Este operador verifica qual o objeto filho, a variável (Instância pai) está se referindo), o exemplo deste eu dei na primeira dica, assim: var Comp: TComponent; Lbl: TLabel; Edt: TEdit; begin Lbl := TLabel.Create(Self); Edt := TEdit.Create(Self); Comp := Edt; if Comp is TLabel then TLabel(Comp).Caption := 'Meu Label'; { Aqui ele faz a verficação se Comp é TLabel, como não é, Comp é Edt (TEdit), ele ignora a linha e não gera a execeção (Erro) } end; Um abraço Compartilhar este post Link para o post Compartilhar em outros sites
Jerfs 1 Denunciar post Postado Julho 25, 2008 Pô... muito obrigado pela atenção... muito boa ajuda, parabéns! Compartilhar este post Link para o post Compartilhar em outros sites