Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

icefusion

Diferenças em Locais de Declaração de variáveis!

Recommended Posts

olá...eu tenho uma dúvida sobre quando usar e o que ocorre qdo declaramos uma variável em determinados lugares...Temos as Delcarações no Var global da Unit, no Var local da procedure ou function....e além desses temos as declarações nos flags private, protect, public, published..não sei se tem mais tipos...entaum gostaria de saber quando usar, e qual o comportamento e como posso usar!!por exemplo...numa variavél Local (procedure, Function) ela é restrita aquela função...numa global ela pode ser utilizada na unit toda, e ainda em qualquer outra unit q tenha a unit q ela foi criada adicionada no uses...e as outras...caso se alguma coisa q escrevi, estiver errada, por favor me corrijam!!valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É por ai mesmo, no caso se declarar dentro de uma procedure ou function, a variável vai ser de acesso somente dentro desta, declarando no private, vai ser possível o acesso em toda a unit em questão, no public vai estar acessível em todo as outras units que a chamarem...

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaum em public...ou naquele var global naum tem diferença?!?!e como faço a chamada dessa variavel em outra unit...eu declarei naquele var global ( var antes do implemetation) e simplismente coloquei o nome da variável e ele puxou!!no caso se eu tivesse declarado no public como poderia obter o valor dessa variável?!

Compartilhar este post


Link para o post
Compartilhar em outros sites

possa passar variáveis tb naum posso?!?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você sabe o que significa essa instrução aqui?!

 

private	  { Private declarations }	   _itemJanelas	 : Integer;  public	 { Public declarations }  published	 property itemJanelas  : Integer read _itemJanelas write _itemJanelas;  end;

naum fui eu quem fiz...estou aproveitando do outro programador q trabalhava em meu lugar e estou tentando entender!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo visto seria de um componente, ou algo do tipo, onde que tem uma variável privado do tipo integer, e adição de propriedade itemJanelas, onde que lê e escreve sobre a variável _itemJanelas, provavelmente deve de ter procedures e functions que alteram o valor desta variável...

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaum o resultado das funções ou procedimentos desse componente entram na variavél _itemJanelas e naum o valor da variável q passa para essas funções!!!?

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaum o resultado das funções ou procedimentos desse componente entram na variavél _itemJanelas e naum o valor da variável q passa para essas funções!!!?

amigo, para facilitar ponha o codigo mais completo. ou pelo menos uma descrição do que você tem em maos. Facilita a sua resposta.Abraços. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

entaum o resultado das funções ou procedimentos desse componente entram na variavél _itemJanelas e naum o valor da variável q passa para essas funções!!!?

property itemJanelas : Integer read _itemJanelas write _itemJanelas;

 

Como o Marcio já disse, o código acima, é comumente usado na criação componentes, mais pode ser utilizado tbm para facilitar o codigo em aplicativos "normais" ...

No código acima, a propriedade ItemJanelas, q naum deixa de ser uma variável também, vai ler e escrever na variável _itemJanelas .....

Compartilhar este post


Link para o post
Compartilhar em outros sites

essa unit é uma unit de uma janela q qdo eu crio manualmente, tem q ser criada com esses itens!!!

falo em criar manualmente, pois ja tem um tela de cadastro q eu pego através de new -> other -> meu projeto e assim crio praticamente automáticamente essa tela com suas funcionalidades!só crio manualmente qdo essa tela q eh criada automáticamente naum atende as minhas necessidades!!

unit U_GastosPneu;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, Grids, DBGrids, ExtCtrls, FMTBcd, StdCtrls, Mask, ActnList, DB,  DBClient, Provider, SqlExpr, Buttons,Typinfo;type  TF_GastosPneu = class(TForm)	Panel1: TPanel;	Panel2: TPanel;	Panel3: TPanel;	Panel4: TPanel;	DBGrid1: TDBGrid;	Panel5: TPanel;	SpeedButton1: TSpeedButton;	SpeedButton2: TSpeedButton;	sqlRelatorio: TSQLQuery;	prvRelatorio: TDataSetProvider;	cdsRelatorio: TClientDataSet;	dsRelatorio: TDataSource;	aclstRelatorio: TActionList;	edDtIni: TMaskEdit;	edDtFim: TMaskEdit;	Label1: TLabel;	Label2: TLabel;	cdsRelatorioPS_PLACA: TStringField;	cdsRelatorioPS_CUSTO_TOTAL: TFMTBCDField;	cdsRelatorioPS_CUSTO_RECAP: TFMTBCDField;	cdsRelatorioPS_CUSTO_PNEU: TFMTBCDField;	acImprimir: TAction;	acCancelar: TAction;	procedure acCancelarExecute(Sender: TObject);	procedure edDtFimExit(Sender: TObject);	procedure FormClose(Sender: TObject; var Action: TCloseAction);	procedure FormShow(Sender: TObject);	procedure acImprimirExecute(Sender: TObject);	private	   { Private declarations }	   _itemJanelas	 : Integer;	public	   { Public declarations }	published		property itemJanelas  : Integer read _itemJanelas write _itemJanelas;	end;var  F_GastosPneu: TF_GastosPneu;implementationuses U_dmBASE, U_Main, U_QrGastoPneu;{$R *.dfm}procedure TF_GastosPneu.acCancelarExecute(Sender: TObject);begin   Close;end;procedure TF_GastosPneu.edDtFimExit(Sender: TObject);begin   sqlRelatorio.Params[0].Value := edDtFim.Text;   sqlRelatorio.Params[1].Value := edDtIni.Text;   cdsRelatorio.Close;   cdsRelatorio.Open;end;procedure TF_GastosPneu.FormClose(Sender: TObject;  var Action: TCloseAction);begin   with F_Main do	actManager.ActionBars[0].Items[3].Items.FindItemID(getPropValue((Sender as TF_GastosPneu),'itemJanelas')).Destroy;   Action := caFree;end;procedure TF_GastosPneu.FormShow(Sender: TObject);begin   acImprimir.Enabled := true;   acCancelar.Enabled := true;end;procedure TF_GastosPneu.acImprimirExecute(Sender: TObject);begin   Application.CreateForm(TF_QrGastoPneu,F_QrGastoPneu);   cdsRelatorio.Close;   with sqlRelatorio do begin	  Params[0].Value := edDtFim.Text;	  Params[1].Value := edDtIni.Text;   end;   cdsRelatorio.Open;   F_QrGastoPneu.Relatorio.Preview();   F_QrGastoPneu.Free;end;end.

essa tela é a tela principal do programa, a 1 tela após o login...aqui eu vi q tem uma função q usa os dados daquela private e published!

 

unit U_Main;interfaceuses  Windows  , Messages , SysUtils , Variants, Classes , Graphics		, Controls, Forms,  Dialogs  , Menus	, ComCtrls , ExtCtrls, ActnList, StrUtils		, CustomPesqCombo,  PesqCombo, StdCtrls , Grids	, DBCtrls , Buttons , XPStyleActnCtrls, ActnMan		,  ToolWin  , ActnCtrls, ActnMenus, TypInfo, StdStyleActnCtrls, CustomizeDlg;type  TF_Main = class(TForm)	stBar: TStatusBar;	tmPrincipal: TTimer;	actManager: TActionManager;	acCentroCusto: TAction;	procedure FormShow(Sender: TObject);	procedure tmPrincipalTimer(Sender: TObject);	procedure acCentroCustoExecute(Sender: TObject);	  private	{ Private declarations }  public	{ Public declarations }	Function CriarMDI(FormClass: TFormClass; AcaoMenu: TAction): TForm;	Procedure MudarComEnter(var Msg: TMsg; var Handled: Boolean);  end;var  F_Main: TF_Main;implementationuses U_Cadastro, U_CentroCusto, U_ICentroCusto;{$R *.dfm}procedure TF_Main.MudarComEnter(var Msg: TMsg; var Handled: Boolean);var  i: SmallInt;begin  If (Screen.ActiveControl<>Nil) then begin	  if not ((Screen.ActiveControl is TCustomMemo)		 OR			  (Screen.ActiveControl is TCustomGrid)		 OR			  (Screen.ActiveControl is TCustomComboBox)	 OR			  (Screen.ActiveControl is TDBLookUpComboBox)   OR			  (Screen.ActiveControl is TBitBtn)			 OR			  (Screen.ActiveControl is TCustomPesqCombo)	OR			  (Screen.ActiveForm.ClassName='TMessageForm')) THEN begin		If Msg.message = WM_KEYDOWN then begin		  Case Msg.wParam of			VK_RETURN,VK_DOWN : Screen.ActiveForm.Perform(WM_NextDlgCtl,0,0);			VK_UP			 : Screen.ActiveForm.Perform(WM_NextDlgCtl,1,0);		  end;		  if Msg.wParam in [VK_RETURN,VK_DOWN,VK_UP] then			Msg.wParam:=0;		end else if Msg.message = WM_MOUSEWHEEL then begin		  Msg.message := WM_KEYDOWN;		  Msg.lParam := 0;		  i := HiWord(Msg.wParam);		  if i > 0 then			Msg.wParam := VK_UP		  else			Msg.wParam := VK_DOWN;		  Handled := False;		end;	  end;  end;end;Function TF_Main.CriarMDI(FormClass: TFormClass; AcaoMenu: TAction): TForm;var  Contador	 : Integer;begin  Result := nil;  for Contador:= 0 to Screen.FormCount - 1 do begin	if Screen.Forms[Contador] is FormClass then begin	  Result := Screen.Forms[Contador];	  break;	end;  end;  if result = nil then begin	LockWindowUpdate(Handle);	Result	:=FormClass.Create(AcaoMenu.Owner);	result.Tag:=AcaoMenu.Tag;	LockWindowUpdate(0);	actManager.ActionBars[0].Items[3].Items.Add;	actManager.ActionBars[0].Items[3].Items[actManager.ActionBars[0].Items[3].Items.Count - 1].Action  :=AcaoMenu;	actManager.ActionBars[0].Items[3].Items[actManager.ActionBars[0].Items[3].Items.Count - 1].ShortCut:=0;	actManager.ActionBars[0].Items[3].Items[actManager.ActionBars[0].Items[3].Items.Count - 1].Caption :=Result.Caption + ifThen((AcaoMenu.Owner is TF_Cadastro),ifThen(AcaoMenu.Tag=0,' (INSERINDO)',' (ALTERANDO)'),'');	SetPropValue(result,'itemJanelas',actManager.ActionBars[0].Items[3].Items[actManager.ActionBars[0].Items[3].Items.Count - 1].ID);end else begin	result.WindowState := wsNormal;	Result.BringToFront;	Result.SetFocus;  end;end;procedure TF_Main.FormShow(Sender: TObject);begin  (Sender as TForm).Top   :=Screen.WorkAreaTop;  (Sender as TForm).Left  :=Screen.WorkAreaLeft;  (Sender as TForm).Height:=Screen.WorkAreaHeight;  (Sender as TForm).Width :=Screen.WorkAreaWidth;  DecimalSeparator :=',';  ThousandSeparator:='.';  DateSeparator	:='/';  ShortDateFormat  :='dd/mm/yyyy';  stBar.Panels[0].Width:=(Sender as TForm).Width - (stBar.Panels[1].Width + stBar.Panels[2].Width);  Application.CreateForm(TF_UsuarioTroca,F_UsuarioTroca);  try	F_UsuarioTroca.ShowModal;  Finally	F_UsuarioTroca.Free;  end;end;procedure TF_Main.tmPrincipalTimer(Sender: TObject);begin  stBar.Panels[stBar.Panels.Count-2].Text:=DateToStr(Date);  stBar.Panels[stBar.Panels.Count-1].Text:=TimeToStr(Time);end;procedure TF_Main.acCentroCustoExecute(Sender: TObject);begin  CriarMDI(TF_CentroCusto,(Sender as TAction));end;Initialization  RegisterClasses([				   TF_CentroCusto,				   TF_ICentroCusto,				   ]);end.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.