Problema para dar focus no edit

02/08/2008

10

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 ****************
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.


Responder

Posts

02/08/2008

Marco Salles

serpentedodeserto o certo voce deve criar formularios assim

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..


Responder
[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;"
Para
"Application.MainFormOnTaskbar := False;"
E descobri por acaso.

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


Responder

02/08/2008

Marco Salles

é 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 ????


Responder