IsWindowActive(Form_x) retorna sempre .F.

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

IsWindowActive(Form_x) retorna sempre .F.

Mensagem por NiltonGM »

Pessoal, me deparei com algo estranho que nunca tinha me ocorrido, sempre usei a função IsWindowActive() para saber se um formulário já se encontrava aberto para não reinicia-lo, uma prática comum, porem nesse novo projeto que estou trabalhando, ao abrir um terceiro formulário a partir de um ondblclick() na grid do segundo formulário, essa função está sempre retornando .F. fazendo recarregar o formulário, aí dá erro!
Form_Main tipo principal, abre o Form_2 STANDARD autorelease = .F., não uso Form_2.Release, apenas Form_2.Show ou Form_2.Hide, nesse a função IsWindowActive(Form_2) funciona perfeitamente.
No Form_2 há uma grid, ao clicar em uma linha com ondblclick(), eu abro o Form_3, pela primeira vez a função IsWindowAtive() retorna .F., então o Form_3 é criado com LOAD, mas se clicarmos de novo na grid do Form_2 com dbclick() novamente, a função IsWindowActive(Form_3) está sempre retornando .F., isso me forçou a criar uma variável PUBLIC para controlar se o Form_3 já está aberto ou não.
Desconfio que é por causa do Form_2 estar setado para NOAUTORELEASE.

Código: Selecionar todos

Procedure main_grid_Agenda_ondblclick()

    if Is_WindowActive(editastatus)   // Essa coisa aqui só está retornando .F.
        DoMethod( "editastatus", "SHOW" )
        DoMethod( "editastatus", "MINIMIZE" )
        DoMethod( "editastatus", "RESTORE" )
        DoMethod( "editastatus", "SETFOCUS" )
    else
        LOAD WINDOW editastatus
            ON KEY ESCAPE OF editastatus ACTION editastatus.Release
        editastatus.Show
    end
Para piorar, esse form (editastatus=Form_3) não esta passando pelo evento OnInit...

Código: Selecionar todos

Procedure editastatus_form_oninit()
    
    // Não entra nesse evento, mesmo que eu tenha certificado que essa procedure está mensionada no evento OnInit
    MsgDebug( {GetProperty( "agenda", "Grid_agenda", "Value" ), GetProperty( "agenda", "Grid_Agenda", "CellEx", GetProperty( "agenda", "Grid_agenda", "Value" ), 1 )} )
    
    editastatus.Label_em.Value := GetProperty( "agenda", "Grid_Agenda", "CellEx", GetProperty( "agenda", "Grid_agenda", "Value" ), 1 ) 
    editastatus.Label_das.Value := GetProperty( "agenda", "Grid_Agenda", "CellEx", GetProperty( "agenda", "Grid_agenda", "Value" ), 2 )
    editastatus.Label_as.Value := GetProperty( "agenda", "Grid_Agenda", "CellEx", GetProperty( "agenda", "Grid_agenda", "Value" ), 3 )
    editastatus.Label_cliente.Value := GetProperty( "agenda", "Grid_Agenda", "CellEx", GetProperty( "agenda", "Grid_agenda", "Value" ), 4 )
    editastatus.Label_profissional.Value := GetProperty( "agenda", "Grid_Agenda", "CellEx", GetProperty( "agenda", "Grid_agenda", "Value" ), 5 )
    editastatus.Label_servico.Value := GetProperty( "agenda", "Grid_Agenda", "CellEx", GetProperty( "agenda", "Grid_agenda", "Value" ), 6 )

Return
Nilton Medeiros
nilton@sistrom.com.br
Avatar do usuário
NiltonGM
Usuário Nível 3
Usuário Nível 3
Mensagens: 397
Registrado em: 05 Jun 2014 23:47
Localização: Caieiras/SP

IsWindowActive(Form_x) retorna sempre .F.

Mensagem por NiltonGM »

Descobri o que estava errado, erro básico, esqueci de ativar o form após o LOAD com editastatus.Active.
Como pude esquecer isso?! rs
Nilton Medeiros
nilton@sistrom.com.br
Responder