Problema para dar focus no edit
Estou começando a programara no delphi 2007, mais quando abro o formulario principal carregando outro formulário nao consigo de forma nenhuma, da foco no edit. Ja busquei na internet e tudo que encontrei que testei nao funcionou espero que os amigos aqui me ajudem a conseguir resolver este problema, segue abaixo o codigo fonte:
****************** FORME PRINCIPAL ****************
*****FORME SECUNDARIO AONDE NAO CONSIGO DAR FOCO NO EDIT*********
*****************OU CHAMNDO O FORME DESTA MANEIRA *********
ESTA ULTIMA DA UM ERRO DE ACCESS VIOLATION.
****************** FORME PRINCIPAL ****************
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); begin Application.CreateForm(TForm2, Form2); Form2.ShowModal; Form2.Destroy; end; end.
*****FORME SECUNDARIO AONDE NAO CONSIGO DAR FOCO NO EDIT*********
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) Edit: TEdit; CTRL: TEdit; procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation uses Unit1; {$R *.dfm} procedure TForm2.FormActivate(Sender: TObject); begin Edit.SetFocus; end; end.
*****************OU CHAMNDO O FORME DESTA MANEIRA *********
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); begin Form2.Create(Application); try Form2.ActiveControl := Form2.Edit; Form2.ShowModal; finally Form2.Free; end; end;
ESTA ULTIMA DA UM ERRO DE ACCESS VIOLATION.
Serpentedodeserto
Curtidas 0
Respostas
Marco Salles
02/08/2008
serpentedodeserto o certo voce deve criar formularios assim
[b:043ee7c499]claro com o Form2 na secção Avalaible AutoForms em Projecto Optioons[/b:043ee7c499]
voce não tera problema Nunca para qualquer delphi
E alem disso voce pode focar O edit em qualquer evento
FormShow do form2 ou FormActivate do form2 com voce fez antes
exceto é claro o evento OnCreate do Form2
p:s)
não necessariamente voce precisará da instrução
Form2.ActiveControl := Form2.Edit1;
abaixo da instrução Try como voce postou por ultimo
Para falar a verdade isto nen é muito correto [u:043ee7c499]na minha Opinião [/u:043ee7c499], não é porque não funcione , mas não se deve ficar misturando objetos pertencentes a formuálrios diferentes ...Voce vai ver isto mais tarde quanto se aprofundar em POO
outra coisa so para finalizar . Se voce fez referencia a unit2 no uses do Form1 não precisa fazer referencia a unit do form1 na uses do form2
espero ter sido claro..
var form2:Tform2; begin form2:=TForm2.Create(nil); try form2.showmodal; finally form2.release; end;
[b:043ee7c499]claro com o Form2 na secção Avalaible AutoForms em Projecto Optioons[/b:043ee7c499]
voce não tera problema Nunca para qualquer delphi
E alem disso voce pode focar O edit em qualquer evento
FormShow do form2 ou FormActivate do form2 com voce fez antes
exceto é claro o evento OnCreate do Form2
p:s)
não necessariamente voce precisará da instrução
Form2.ActiveControl := Form2.Edit1;
abaixo da instrução Try como voce postou por ultimo
Para falar a verdade isto nen é muito correto [u:043ee7c499]na minha Opinião [/u:043ee7c499], não é porque não funcione , mas não se deve ficar misturando objetos pertencentes a formuálrios diferentes ...Voce vai ver isto mais tarde quanto se aprofundar em POO
outra coisa so para finalizar . Se voce fez referencia a unit2 no uses do Form1 não precisa fazer referencia a unit do form1 na uses do form2
var
Form1: TForm1;
implementation
uses Unit2;
var
Form2: TForm2;
implementation
uses Unit1; //desnecessário
espero ter sido claro..
GOSTEI 0
Serpentedodeserto
02/08/2008
[b:f362887695][i:f362887695]Marco Salles[/i:f362887695][/b:f362887695]
var form2:Tform2; begin form2:=TForm2.Create(nil); try form2.showmodal; finally form2.release; end;
Muito Obrigado pela atenção a sua sugestão foi de grande valia, em referencia ao codigo que foi postado acabou apurando o que tinha criado, mais a solução vei depois que alterei a linha no ´Project -> Veiw Source ´
"Application.MainFormOnTaskbar := True;"
"Application.MainFormOnTaskbar := False;"
E se poder me da uma luz do que se trata fico agradecido, mais o problema ja foi resolvido sem memsmo saber o que fiz ao certo...ahahahahhahahaha.
UM abraço e obrigado novamente pela ajuda
GOSTEI 0
Marco Salles
02/08/2008
é uma nova propriedade do delphi2007 . A propriedade controla vários aspectos de como executar aplicativos VCL no que diz respeito a minimizar / maximizar / restaurar operações em Windows.
Eu ja li não sei se é verdade quando voce compila um projeto antigo do delphi para o 2007 e vai rodar no windows Vista voce tem que acrescentar Application.MainFormOnTaskbar: = True;.
não uso vista e nen delphi2007 . então não passei por problemas quanto a esta propriedade.
Eu estive obesrvando o seu codigo e acho que a instrução
Form2.Create(Application); deve dar erro de acesso , pq a mesma deveria ser escrita desta forma
TForm2.Create(Application); que cria um ponteiro para o formulário
Apesar de como eu disse , que a opção de criar uma instancia de Formulario é aquela a qua lhe passei.
Mas ajufa a gente aqui ... Voce esta usando WindowsVista ???
Pq também ja li a respeito que colocar
Application.MainFormOnTaskbar: = false;
o Aplicativo n;ao aparece na Barra de Tarefas .... Isto aconteceu com Voce ????
Eu ja li não sei se é verdade quando voce compila um projeto antigo do delphi para o 2007 e vai rodar no windows Vista voce tem que acrescentar Application.MainFormOnTaskbar: = True;.
não uso vista e nen delphi2007 . então não passei por problemas quanto a esta propriedade.
Eu estive obesrvando o seu codigo e acho que a instrução
Form2.Create(Application); deve dar erro de acesso , pq a mesma deveria ser escrita desta forma
TForm2.Create(Application); que cria um ponteiro para o formulário
Apesar de como eu disse , que a opção de criar uma instancia de Formulario é aquela a qua lhe passei.
Mas ajufa a gente aqui ... Voce esta usando WindowsVista ???
Pq também ja li a respeito que colocar
Application.MainFormOnTaskbar: = false;
o Aplicativo n;ao aparece na Barra de Tarefas .... Isto aconteceu com Voce ????
GOSTEI 0