Fórum Dúvida com função!!! #300033
19/10/2005
0
estou tentando desenvolver uma Unit, onde possa colocar funções q vou usar em todo projeto. Uma das funções é para desabilitar a propriedade somente leitura dos objetos do form, mas não estou conseguindo.
Vejam como estou tentando.
Primeiro criei essa classe:
unit UnitFuncoes; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DBCtrls, StdCtrls, Buttons, jpeg, ExtCtrls, Mask; Type Funcoes = class(TForm) Procedure Ativa (Form : TForm); Public end; implementation uses CadastroTios; //Ativa a propriedade ReadOnly Procedure Funcoes.Ativa (Form: TForm); var i : Integer; begin for i := 0 to Form.ComponentCount -1 do if Form.Components[i] is TDBEdit then begin TDBEdit(Form.Components[i]).ReadOnly:=True; end; for i := 0 to Form.ComponentCount -1 do if Form.Components[i] is TDBComboBox then begin TDBComboBox(Form.Components[i]).ReadOnly:=True; end; end; end.
Depois tentei chamar assim nos outros forms:
UnitFuncoes.Funcoes.Ativa(NomeDoForm);
Mas está dando esse erro: ´This form of method call only allowed for class methods´
Não estou conseguindo resolver.
Se alguém conseguir descobrir o q estou errando, por favor me ajude.
Grato
Humberto Duarte
Hcaixeta
Curtir tópico
+ 0Posts
19/10/2005
Massuda
Para fazer no estilo que você pretende (estilo .NET?) faça assim...
Type Funcoes = class(TForm) Class Procedure Ativa (Form : TForm); .... Class Procedure Funcoes.Ativa (Form: TForm); ...
Gostei + 0
20/10/2005
Michael
Vc pode usar namespaces para organizar melhor suas funções. Veja um exemplo:
- Unit Funcoes.Matematicas.pas - Apenas funções numéricas;
- Unit Funcoes.Logicas.pas - Funções de processamento;
- Unit Funcoes.Desenho - Rotinas de desenhos.
Então, quando for usar, vc declara apenas as que são necessárias.
O legal de usar namespaces é o fato de o CodeInsight do Code Editor entendê-los. Continuando com o exemplo acima, imagine que vc declarou as três units. Durante a programação, digite Funcoes. e Ctrl + espaço. Serão exibidas Matematicas, Logicas e Desenho. Escolha Desenho e digite . de novo mais Ctrl + espaço. Serão mostradas todas as rotinas de desenho. Fica bem organizado.
Vale lembrar que esse recurso é uma simulação dos namespaces do .NET. Ou seja, é apenas um truque para termos o efeito de orientação a objetos extendida a arquivos do framework da Microsoft.
[]´s
Gostei + 0
20/10/2005
Hcaixeta
Deu certinho... MUITO OBRIGADO!!!
Se alguém precisar dessa função ela ficou assim:
unit UnitFuncoes; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DBCtrls, StdCtrls, Buttons, jpeg, ExtCtrls, Mask; Type Funcoes = class(TForm) Class Procedure Ativa (Form : TForm); Class Procedure Desativa (Form : TForm); Private Public end; implementation //Ativa a propriedade ReadOnly class Procedure Funcoes.Ativa (Form: TForm); var i : Integer; begin for i := 0 to Form.ComponentCount -1 do if Form.Components[i] is TDBEdit then begin TDBEdit(Form.Components[i]).ReadOnly:=True; end; for i := 0 to Form.ComponentCount -1 do if Form.Components[i] is TDBComboBox then begin TDBComboBox(Form.Components[i]).ReadOnly:=True; end; end; //Desativa a propriedade ReadOnly class Procedure Funcoes.Desativa (Form: TForm); var i : Integer; begin for i := 0 to Form.ComponentCount -1 do if Form.Components[i] is TDBEdit then begin TDBEdit(Form.Components[i]).ReadOnly:=False; end; for i := 0 to Form.ComponentCount -1 do if Form.Components[i] is TDBComboBox then begin TDBComboBox(Form.Components[i]).ReadOnly:=False; end; end; end.
Para chamar:
Uses UnitFuncoes Funcoes.Ativa(NomeDoForm); Funcoes.Desativa(NomeDoForm);
Nessa funções ainda podem ser adicionados mais componenetes além dos [color=red:24f212c92e]TDBComboBox[/color:24f212c92e] e dos [color=red:24f212c92e]TDBEdit[/color:24f212c92e]. Se alguém precisar posso fazer as implementações;
Grato
Humberto Duarte
humduca@gamil.com
Gostei + 0
21/10/2005
Fabio Nascimento
Olá amigo, apenas para um melhor aproveitamento do seu código, a sua função poderia ser simplificada desta maneira:
class Procedure Funcoes.Ativa (Form: TForm, Estado: Boolean);
var i : Integer;
begin
for i := 0 to Form.ComponentCount -1 do
if Form.Components[i] is TDBEdit then
TDBEdit(Form.Components[i]).ReadOnly:=Estado
else
if Form.Components[i] is TDBComboBox then
TDBComboBox(Form.Components[i]).ReadOnly:=Estado;
end;
E você chamaria a função:
Ativa(Form1,True) -> para habilitar, ou
Ativa(Form1,False) -> para desahabilitar
Isso deixa o seu código mais legível e fácil de usar.
Espero ter ajudaro []´s
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)