icefusion 0 Denunciar post Postado Outubro 16, 2007 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
marcio.theis 3 Denunciar post Postado Outubro 16, 2007 É 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
icefusion 0 Denunciar post Postado Outubro 16, 2007 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
Pantoja 5 Denunciar post Postado Outubro 16, 2007 O Public seria para você poder criar procedimentos/funções que seriam usadas "publicamente" em todo seu projeto Delphi. Compartilhar este post Link para o post Compartilhar em outros sites
icefusion 0 Denunciar post Postado Outubro 16, 2007 possa passar variáveis tb naum posso?!? Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 16, 2007 Passar variáveis não teria como, o que você consegue é atribuir variáveis e buscar valores de variáveis de outros locais... Compartilhar este post Link para o post Compartilhar em outros sites
icefusion 0 Denunciar post Postado Outubro 16, 2007 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
marcio.theis 3 Denunciar post Postado Outubro 16, 2007 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
icefusion 0 Denunciar post Postado Outubro 16, 2007 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
Pantoja 5 Denunciar post Postado Outubro 16, 2007 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
Rodrigo Miss 1 Denunciar post Postado Outubro 16, 2007 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
icefusion 0 Denunciar post Postado Outubro 17, 2007 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