Página 1 de 1
Mais controle com janelas...
Enviado: 22 Mai 2012 11:56
por rcb2002
Pessoal, estou com um "problemasso" já a alguns dias, sem solução: fiz umas máscaras "telas" para um programa, carrego todas como pano de fundo para as janelas. O programa ficou mais "profissional", os campos, caixas e botões eu meço milimetricamente pra parecerem parte da tela de fundo ( e a propósito acho essa uma das inconveniências da Minigui - os BMP têm que ficar lá numa pasta, Imagens; deveria poder colocar tudo dentro do EXE para o caso de o usuário apagar acidentalmente a imagem o programa não ser afetado, mas tudo bem... a dúvida não é essa).
Acontece que agora decidi abrir uma janela de cadastro, por exemplo, DENTRO da janela MAIN, só que posicionando ela lá dentro pra cobrir "só uma parte" da MAIN (como se um novo formulário fosse carregado ali, com uma bela tela de fundo, sem o usuário perceber). Suprimindo os botões FECHAR, MINIMIZAR, a BARRA DE TÍTULOS e toda a moldura da janela, fica perfeito. O problema está no POSICIONAMENTO DESSA JANELA SOBRE A MAIN. Ela é CHILD e eu estou usando uma referência relativa pra determinar sua linha e coluna, como abaixo:
Código: Selecionar todos
PUBLIC Linha := int( (GetDesktopRealHeight() - 761) /2 ); Coluna := int( (GetDesktopRealWidth() - 1200)/2 )
DEFINE WINDOW TEMPLATE AT Linha , Coluna WIDTH 1200 HEIGHT 791 MAIN
e na janela que vai em cima dessa faço o mesmo, alterando os valores de LINHA E COLUNA e o WINDOWTYPE.
O problema: não há meio de eu conseguir posicionar a segunda janela sobre a primeira,, "cirurgicamente", como eu esperava que fosse. Qualquer valor que eu coloco em LINHA e COLUNA deixam a janela NA ORIGEM da MAIN (0,0). O que eu imaginava era que a interna ficasse LIMITADA pela externa e que os valores usados para posicioná-la fossem relativos à ORIGEM da MAIN, não à origem da tela.
Alguém pode me ajudar?
Mais controle com janelas...
Enviado: 22 Mai 2012 15:10
por Pablo César
Eu não sei se te entendi direito, mas eu acho que seria melhor você desenhar essa janela, seja com bmp ou até mesmo interativamente com linhas, requadros, labels e que tudo isso fosse parte do mesmo form do Main. Assim você não precisaria estar controlando o movimento, posicionamento da segunda janela. Daria para você mostrar um Print Screen de tudo isso ?
Mais controle com janelas...
Enviado: 22 Mai 2012 17:56
por Pablo César
a propósito acho essa uma das inconveniências da Minigui - os BMP têm que ficar lá numa pasta, Imagens; deveria poder colocar tudo dentro do EXE para o caso de o usuário apagar acidentalmente a imagem o programa não ser afetado, mas tudo bem...
Esta característica não é somente da HMG ou Minigui. Eu também achava que deveria ser embutido no próprio EXE, mas grandes linguagens mantém também esse padrão. Uma solução seria compactar os arquivos gráficos bmp e incorporá-lo no seu código fonte em forma binária, só que iria aumentar de tamanho o seu executável. Mas não sei se valeria a pena considerando que deletar os arquivo gráfico (geralmente numa sub-pasta) isso pode ocorrer eventualmente.
Mais controle com janelas...
Enviado: 23 Mai 2012 20:12
por MSDN
Prezado,
Com a MiniGUI Extended, vc consegue realizar muito facilmente tudo o que relatou, inclusive na pasta samples, existe exemplo.
Para posicionar uma janela, da forma que desejar, sem ser CHILD (não aconselho), basta criar dentro da janela MAIN uma outra janela do tipo PANEL, fica perfeito. Quanto aos BMPs, vc pode utilizar arquivos de recursos (RC) onde define as imagens a serem utilizadas em seu sistema, e que serão incluídas no seu EXE.
Continue postando aqui suas dúvidas, além de resolver seus problemas, ajudará outras pessoas.
Abraços
Marcelo Neves
Mais controle com janelas...
Enviado: 23 Mai 2012 20:54
por rcb2002
Obrigado a ambos e vou continuar sempre (ou enquanto insistir em Clipper/Minigui) postando e usando esse Fórum como referência quando tenho dúvidas. Em 100% dos casos vcs dão uma solução brilhante para meus problemas.
Quanto ao atual, abaixo duas telas de exemplo:
http://www.sendspace.com/file/r3cuho
MSDN, Eu USO MiniGUI Extended! E vasculhei todo o SAMPLES atrás de exemplos assim (minha base para programar ainda são os SAMPLES). Sem querer abusar, sabe qual dos exemplos se refere a isso? Outra coisa: Não tem WindowType PANEL aqui! (Child, Main, Modal, SplitChild, Standard, MDI, MainMDI e MDIChild) e também nunca ouvi falar nesse exemplo. Será que tem algo em SAMPLES também? Por favor sinta-se livre pra olhar as imagens e auxiliar na solução para o meu "enigma".
Mestre Pablo,
Pelas imagens vc vai ver que quando reposiciono a segunda sobre a primeira não consigo descer mais. Ela desloca horizontalmente (a coluna) mas verticalmente não (linha). E o mais engraçado: quando tento usar qualquer outro tipo de janela que não CHILD obtenho um erro de sintaxe em Window, ainda na compilação. Só tá aceitando CHILD. Não era pra isso funcionar?
Código: Selecionar todos
DEFINE WINDOW TEMPLATE AT Linha+30, Coluna WIDTH 1200 HEIGHT 760 NOMINIMIZE NOMAXIMIZE NOSIZE NOSYSMENU NOCAPTION CHILD
Já tentei de tudo, só aqui agora pra encontrar a solução! Mais uma vez, obrigado.
Mais controle com janelas...
Enviado: 23 Mai 2012 21:26
por Pablo César
Eu particularmente não gosto de carregar os forms, eu prefiro mesmo gerar o código e colar no meu código fonte. A segunda tela, você poderia apresentar os elementos sem ter que abrir nova janela. Você pode criar uma função que apenas posicione os TEXTBOX com a clausula OF <form.main> (por exemplo). Aliás, pode posicionar todos os elementos e escondê-los e depois chamar a função de cadastro e seria apenas para mostrá-los ao usuário. Para isso utilize: hide e show.
Mais controle com janelas...
Enviado: 24 Mai 2012 00:27
por rcb2002
Cara eu entendo... só q acho q não vou ter a mesma qualidade: ainda gostaria de usar as telas, será que não tem jeito? O outro usuário (MSDN) falou algo sobre janelas tipo PANEL, pode ser que isso resolva... enquanto não vejo outra solução vou começar tentando arredondar os cantos das textboxes...
Mais controle com janelas...
Enviado: 24 Mai 2012 09:25
por MSDN
Prezado,
Analise esses exemplos :
1 - C:\MiniGUI\SAMPLES\BASIC\REGIONS_2
2 - C:\MiniGUI\SAMPLES\BASIC\CONTAINERS
O primeiro, mostra como usar uma imagem sendo o form, e como utilizar arquivos de recursos (RC).
O segundo, mostra dois exemplos (pasta PANEL e PANEL2), de como inserir uma janela dentro de outra usando o método PANEL.
Abraços
Mais controle com janelas...
Enviado: 26 Mai 2012 18:28
por rcb2002
Pois é, pessoal... primeiramente obrigado pela ajuda. Confesso que agora eu cismei e vou querer o sistema assim: imagina um sistema web, online, onde o REFRESH só acontece nos FRAMES? Eu fuço um pouquinho em web mas não vou ter tempo de converter todo o sistema agora, pronto, pra outra plataforma. Segui 50% do conselho de cada um: larguei a ideia de desenhar a tela toda em BMP; só carrego o fundo e faço o resto como o Pablo sugeriu; crio tudo escondido e vou mostrando conforme a necessidade. Do MSDN peguei o exemplo do PANEL, tá ficando perfeito. Agora só mais uma dúvida: tem como me dar um exemplo de como esconder um "grid" (ou criar ele depois com a cláusula OF <FORM.secondary> (não entendi bem como isso funciona). Pq o GRID não tem VISIBLE .F. e não sei como usar o OF.
O detalhe é que esse post provavelmente vai ser útil um dia pra outros membros do Fórum; acho difícil que ninguém até hoje tenha tido a necessidade de algo assim, telas "atualizando" dentro da Main, não janelas abrindo, sabe? O sistema todo rodando numa janela só. Seria legal outras pessoas que já tiveram esse problema postarem aqui como solucionaram... acho q é tendência esse negócio de abrir tudo numa tela só, fica mais elegante e pra o usuário (como meu sistema também tem uma parte que alimenta os dados via Web) parece que tudo é online.
Obrigado galera!!
Mais controle com janelas...
Enviado: 26 Mai 2012 22:20
por Pablo César
só mais uma dúvida: tem como me dar um exemplo de como esconder um "grid"
Tudo depende como você vai querer que aconteçam o aparecimento e a ocultação de cada componente. Mas basicamente todas é dada pela mesma função: DoMethod(<Form>,<Componente>,"hide" ou "show"). Eu peguei o exemplo C:\MiniGUI\SAMPLES\BASIC\Grid e mudei as duas primeiras opções desse menu:
Código: Selecionar todos
/*
* MINIGUI - Harbour Win32 GUI library Demo
*
* Copyright 2002 Roberto Lopez <harbourminigui@gmail.com>
* http://harbourminigui.googlepages.com/
* MiniGUI 1.0 Experimantal Build 6 - Grid Demo
* (c) 2005 Jacek Kubica <kubica@wssk.wroc.pl>
*
* New property - ColumnWidth(nColumn) for BROWSE & GRID controls
* New methods for BROWSE & GRID controls
- ColumnAutoFit(nColumn) - set column width to best fit regarding to column contents
- ColumnAutoFitH(nColumn) - set column width to best fit regarding to column header & column contents
- ColumnsAutoFit - set widths of all columns in control to best fit regarding to column contents
- ColumnsAutoFitH - set widths of all columns in control to best fit regarding to column header & column contents
*/
#include "minigui.ch"
Function Main()
Local aRows [20] [3]
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 450 ;
HEIGHT 400 ;
TITLE 'MiniGUI 1.0 Experimantal Build 6 - Grid Demo' ;
MAIN
aRows [1] := {'Simpson','Homer','555-5555'}
aRows [2] := {'Mulder','Fox','324-6432'}
aRows [3] := {'Smart','Max','432-5892'}
aRows [4] := {'Grillo','Pepe','894-2332'}
aRows [5] := {'Kirk','James','346-9873'}
aRows [6] := {'Barriga','Carlos','394-9654'}
aRows [7] := {'Flanders','Ned','435-3211'}
aRows [8] := {'Smith','John','123-1234'}
aRows [9] := {'Pedemonti','Flavio','000-0000'}
aRows [10] := {'Gomez','Juan','583-4832'}
aRows [11] := {'Fernandez','Raul','321-4332'}
aRows [12] := {'Borges','Javier','326-9430'}
aRows [13] := {'Alvarez','Alberto','543-7898'}
aRows [14] := {'Gonzalez','Ambo','437-8473'}
aRows [15] := {'Batistuta','Gol','485-2843'}
aRows [16] := {'Vinazzi','Amigo','394-5983'}
aRows [17] := {'Pedemonti','Flavio','534-7984'}
aRows [18] := {'Samarbide','Armando','854-7873'}
aRows [19] := {'Pradon','Alejandra','???-????'}
aRows [20] := {'Reyes','Monica','432-5836'}
@ 10,10 GRID Grid_1 ;
WIDTH 200 ;
HEIGHT 330 ;
HEADERS {'Last Name','First Name','Phone'} ;
WIDTHS {140,140,140};
ITEMS aRows ;
VALUE 1 ;
TOOLTIP 'Editable Grid Control' ;
EDIT ;
JUSTIFY { BROWSE_JTFY_LEFT,BROWSE_JTFY_RIGHT, BROWSE_JTFY_RIGHT }
@ 10,240 GRID Grid_2 ;
WIDTH 200 ;
HEIGHT 330 ;
HEADERS {'Last Name','First Name','Phone'} ;
WIDTHS {140,140,140};
ITEMS aRows ;
VALUE 1 ;
TOOLTIP 'Editable Grid Control' ;
ON HEADCLICK { {||MsgInfo('Click 1')} , {||MsgInfo('Click 2')} , {||MsgInfo('Click 3')} } ;
JUSTIFY { BROWSE_JTFY_LEFT,BROWSE_JTFY_CENTER, BROWSE_JTFY_CENTER }
DEFINE MAIN MENU
POPUP 'New Functions Tests'
ITEM 'Esconde o Grid 2' ACTION DoMethod("Form_1","Grid_2","hide")
ITEM 'Mostra o Grid 2' ACTION DoMethod("Form_1","Grid_2","show")
ITEM 'GetColumnWidth Column 3 Grid 1' ACTION MsgBox( str(Form_1.Grid_1.ColumnWidth(3)) )
SEPARATOR
ITEM 'SetColumnWidth Column 1 Grid 1 To 100 ' ACTION {|| (Form_1.Grid_1.ColumnWidth(1) := 100)}
ITEM 'SetColumnWidth Column 1 Grid 2 To 100 ' ACTION {|| (Form_1.Grid_1.ColumnWidth(2) := 100)}
ITEM 'SetColumnWidth Column 1 Grid 3 To 100 ' ACTION {|| (Form_1.Grid_1.ColumnWidth(3) := 100)}
SEPARATOR
ITEM 'SetColumnWidth Column 1 Grid 1 To Auto' ACTION Form_1.Grid_1.ColumnAutoFit(1)
ITEM 'SetColumnWidth Column 2 Grid 1 To Auto' ACTION Form_1.Grid_1.ColumnAutoFit(2)
ITEM 'SetColumnWidth Column 1 Grid 1 To AutoH' ACTION Form_1.Grid_1.ColumnAutoFitH(1)
ITEM 'SetColumnWidth Column 2 Grid 1 To AutoH' ACTION Form_1.Grid_1.ColumnAutoFitH(2)
SEPARATOR
ITEM 'Set Auto Width for Grid_1' ACTION Form_1.Grid_1.ColumnsAutoFit
ITEM 'Set Auto Width for Grid_2' ACTION Form_1.Grid_2.ColumnsAutoFit
SEPARATOR
ITEM 'Set AutoFit Widths for Grid_1 (header)' ACTION Form_1.Grid_1.ColumnsAutoFitH
ITEM 'Set AutoFit Widths for Grid_2(header)' ACTION Form_1.Grid_2.ColumnsAutoFitH
END POPUP
END MENU
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return Nil
Compile e veja se faz sentido esconder e re-exibir os componentes. Imagino que deverá estar atrelado a alguma condição. Aliás pode também colocar no DEFINE WINDOW <FORM> no item ON INIT <sua função que esconda>. Não sei, são apenas sugestões. Vai de cada um, depende a criatividade que cada um possa ter e com a finalidade em que possa ter.
Mais controle com janelas...
Enviado: 10 Jul 2015 19:59
por microvolution
gente minha dúvida é a seguinte:
como faço pra fechar 100% uma janela?
somente o RELEASE ou ele apenas simula um fechamento?
Tenho uma tela de LOGIN que é fechada no momento certo, mas,depois que está na hora do MENU PRINCIPAL com o POPUP MENU ela (a tela de login) aparece novamente.
Alguém sabe o que fazer?
Mais controle com janelas...
Enviado: 11 Jul 2015 22:52
por microvolution
continuando minha dúvida:
qual diferença?
FLogin.Center
FLogin.Activate
para:
FLogin.Center()
FLogin.Activate()
ou para:
Center Window Flogin
Activate Window Flogin
Diante disso aparecem para mim mensagens completamente diferentes; MAS, infelizmente mesmo reativando o "WINDOW MAIN F1" com o comando F1.SHOW e F1.MAXIMIZE continua aparecendo junto o FLOGIN para digitar senha novamente.
Mais controle com janelas...
Enviado: 13 Jul 2015 09:54
por Pablo César
FLogin.Center = Center Window Flogin
FLogin.Activate = Activate Window Flogin
FLogin.Center(): Center é uma propriedade, mas também utiliza a função DoMethod e que chama a função em C_CENTER em C.
FLogin.Activate(), chama a função ActivateWindow( <cNome> )
Para compreender tudo você deveria olhar os fontes que estão disponíveis na pasta SOURCE.