- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ajuda com MsObjGetPos
×
Linguagem de Programação ADVPL
Perguntas Ajuda com MsObjGetPos
- inocenciojr
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 114
- Obrigados Recebidos: 1
10 anos 2 meses atrás #24677
por inocenciojr
Ajuda com MsObjGetPos foi criado por inocenciojr
Boa Tarde Pessoal,
Estou criando uma tela customizada e estou com algumas duvidas com o MsObjGetPos.
Criei o objeto e chamei ele assim
aSize := MsAdvSize(.T.)
AADD( _aObj, { 100, 015, .T., .F. })
// Cálculo automático da dimensões dos objetos (altura/largura) em pixel
aInfo := { aSize[1], aSize[2], aSize[3], aSize[4], 3, 3 }
_aPObj := MsObjSize( aInfo, _aObj,.T.,.F. )
// Cálculo automático de dimensões dos objetos MSGET
_aPGet := MsObjGetPos( (aSize[3] - aSize[1]), 315, { {nLinIni, nColIni, nLinFim, nColFim},{nLinIni+8, nColIni, nLinFim+55, nColFim+9},{130,420,295,560}} )
DEFINE MSDIALOG oDlg FROM aSize[7],aSize[1] TO aSize[6],aSize[5] TITLE _cCadastro PIXEL
@ 001,002 TO 119, 600 OF oDlg PIXEL
oFld := TFolder():New( 120, 0, aFolder, aFolder, oDlg,,,, .T., , 400,150 )
@ 120,419 SAY "Historico do Atendimento" SIZE 065,07 OF oDlg PIXEL
@ _aPGet[3][1],_aPGet[3][2]GET cMemo Var _mMemo MULTILINE SIZE _aPGet[3][3],_aPGet[3][4] WHEN .T. OF oDlg HSCROLL Pixel
@ _aPGet[1][1],_aPGet[1][2] SAY "Numero *" SIZE _aPGet[1][3],_aPGet[1][4] OF oDlg PIXEL
@ _aPGet[2][1],_aPGet[2][2] MSGET _cNumero SIZE _aPGet[2][3],_aPGet[2][4] WHEN .F. OF oDlg PIXEL
Os arrays ao qual o _aPGet se referem é de acordo com as cores que marquei mesmo?
Se não for, de onde vem isso?
Obrigado
Estou criando uma tela customizada e estou com algumas duvidas com o MsObjGetPos.
Criei o objeto e chamei ele assim
aSize := MsAdvSize(.T.)
AADD( _aObj, { 100, 015, .T., .F. })
// Cálculo automático da dimensões dos objetos (altura/largura) em pixel
aInfo := { aSize[1], aSize[2], aSize[3], aSize[4], 3, 3 }
_aPObj := MsObjSize( aInfo, _aObj,.T.,.F. )
// Cálculo automático de dimensões dos objetos MSGET
_aPGet := MsObjGetPos( (aSize[3] - aSize[1]), 315, { {nLinIni, nColIni, nLinFim, nColFim},{nLinIni+8, nColIni, nLinFim+55, nColFim+9},{130,420,295,560}} )
DEFINE MSDIALOG oDlg FROM aSize[7],aSize[1] TO aSize[6],aSize[5] TITLE _cCadastro PIXEL
@ 001,002 TO 119, 600 OF oDlg PIXEL
oFld := TFolder():New( 120, 0, aFolder, aFolder, oDlg,,,, .T., , 400,150 )
@ 120,419 SAY "Historico do Atendimento" SIZE 065,07 OF oDlg PIXEL
@ _aPGet[3][1],_aPGet[3][2]GET cMemo Var _mMemo MULTILINE SIZE _aPGet[3][3],_aPGet[3][4] WHEN .T. OF oDlg HSCROLL Pixel
@ _aPGet[1][1],_aPGet[1][2] SAY "Numero *" SIZE _aPGet[1][3],_aPGet[1][4] OF oDlg PIXEL
@ _aPGet[2][1],_aPGet[2][2] MSGET _cNumero SIZE _aPGet[2][3],_aPGet[2][4] WHEN .F. OF oDlg PIXEL
Os arrays ao qual o _aPGet se referem é de acordo com as cores que marquei mesmo?
Se não for, de onde vem isso?
Obrigado
Por favor Acessar ou Registrar para participar da conversa.
- AndersonBR
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 108
- Obrigados Recebidos: 0
10 anos 2 meses atrás #24697
por AndersonBR
Respondido por AndersonBR no tópico Ajuda com MsObjGetPos
Veja se isso te ajuda:
#INCLUDE "PROTHEUS.CH"
#include "rwmake.ch"
User function Posget()
Local aSize := {}
Local oGet1,oGet2, oDlgaSize := MsAdvSize()
aPosGet := MsObjGetPos(aSize[3]-aSize[1], 315,{{003,033,073,103}} )
DEFINE MSDIALOG oDlg TITLE "Teste MsObjGetPos" From 0,0 to 500,500 PIXEL
@ 10,aPosGet[1,1] SAY "Label 1" SIZE 050,009 OF oDlg PIXEL
@ 10,aPosGet[1,2] MSGET oGet1 SIZE 060,009 OF oDlg PIXEL
@ 10,aPosGet[1,3] SAY "Label 2" SIZE 050,009 OF oDlg PIXEL
@ 10,aPosGet[1,4] MSGET oGet2 SIZE 060,009 OF oDlg PIXEL
ACTIVATE MSDIALOG oDlg
Return
Por favor Acessar ou Registrar para participar da conversa.
- inocenciojr
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 114
- Obrigados Recebidos: 1
10 anos 2 meses atrás #24701
por inocenciojr
Respondido por inocenciojr no tópico Ajuda com MsObjGetPos
Boa Tarde Anderson,.
Obrigado pela ajuda.
Também achei esse exemplo, mas ainda estou brigando para posicionar os campos nas tela e não estou conseguindo de jeito nenhum.
Com esse exemplo ele trás os seguintes valores
aPosGet[1,1]
5.8
aPosGet[1,2]
63.8
aPosGet[1,3]
141.13333333
aPosGet[1,4]
199.13333333
Ele posiciona corretamente os objetos na tela, porém não consigo reproduzir o mesmo efeito no meu fonte e não entendi como ele chegou exatamente aqueles números.
Obrigado pela ajuda.
Também achei esse exemplo, mas ainda estou brigando para posicionar os campos nas tela e não estou conseguindo de jeito nenhum.
Com esse exemplo ele trás os seguintes valores
aPosGet[1,1]
5.8
aPosGet[1,2]
63.8
aPosGet[1,3]
141.13333333
aPosGet[1,4]
199.13333333
Ele posiciona corretamente os objetos na tela, porém não consigo reproduzir o mesmo efeito no meu fonte e não entendi como ele chegou exatamente aqueles números.
Por favor Acessar ou Registrar para participar da conversa.
- AndersonBR
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 108
- Obrigados Recebidos: 0
10 anos 2 meses atrás #24703
por AndersonBR
Respondido por AndersonBR no tópico Ajuda com MsObjGetPos
Inocencio, na verdade eu não uso essa forma para redimensionar meus objetos, só para entender o problema nesse caso é por causa da resolução da tela?
Por favor Acessar ou Registrar para participar da conversa.
- inocenciojr
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 114
- Obrigados Recebidos: 1
10 anos 2 meses atrás #24704
por inocenciojr
Respondido por inocenciojr no tópico Ajuda com MsObjGetPos
Anderson, exatamente.
Tive de criar um tela na mão para atender as necessidades de forma que não conseguia fazer com a mbrowse.
Porém, por um acaso do destino, tive de testar em outra maquina com monitor full screen e com a resolução mais baixa (que é a resolução máxima da maquina). pois estava sem a minha e vi que os objetos ficaram fora da tela.
Até brinquei aqui que só iria homologar para tela Wide, mas é exatamente nesta tela que uma das pessoas mais irá usar e futuramente outro no monitor Wide que estou usando como base para o desenvolvimento.
Qual forma usa para redimensionar?
Pois até então nunca tive de desenvolver a tela toda na mão, (ao menos nenhum objeto grande) e nem havia me passado pela cabeça esse problema.
Tive de criar um tela na mão para atender as necessidades de forma que não conseguia fazer com a mbrowse.
Porém, por um acaso do destino, tive de testar em outra maquina com monitor full screen e com a resolução mais baixa (que é a resolução máxima da maquina). pois estava sem a minha e vi que os objetos ficaram fora da tela.
Até brinquei aqui que só iria homologar para tela Wide, mas é exatamente nesta tela que uma das pessoas mais irá usar e futuramente outro no monitor Wide que estou usando como base para o desenvolvimento.
Qual forma usa para redimensionar?
Pois até então nunca tive de desenvolver a tela toda na mão, (ao menos nenhum objeto grande) e nem havia me passado pela cabeça esse problema.
Por favor Acessar ou Registrar para participar da conversa.
- AndersonBR
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 108
- Obrigados Recebidos: 0
10 anos 2 meses atrás - 10 anos 2 meses atrás #24705
por AndersonBR
Respondido por AndersonBR no tópico Ajuda com MsObjGetPos
Eu tenho esse problema aqui, cada monitor de um tamanho, cada usuário uma resolução.
Passei a fazer desta forma, aqui tem resolvido e mais disparidades que aqui não tem viu, bacana que assim redimensiona tudo!
Se ajudar segue:
E chamo assim:
Passei a fazer desta forma, aqui tem resolvido e mais disparidades que aqui não tem viu, bacana que assim redimensiona tudo!
Se ajudar segue:
Static Function D(nTam) // QDO TELA Eh DESENVOLVIDA COM RESOLUCAO 1080
***********************************************************************
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³ Ajusta Tamanho dos Objetos ³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
Local nHRes := oMainWnd:nClientWidth // Resolucao horizontal do monitor
If nHRes == 640 // Resolucao 640x480 (soh o Ocean e o Classic aceitam 640)
nTam /= 1.28
ElseIf (nHRes == 798).Or.(nHRes == 800) // Resolucao 800x600
nTam /= 1.28
Else // Resolucao 1024x768 e acima
nTam *= 1.28
EndIf
//ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
//³Tratamento para tema "Flat"³
//ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
If "MP8" $ oApp:cVersion .Or. '10' $ cVersao
If (Alltrim(GetTheme()) == "FLAT") .Or. SetMdiChild()
nTam /= 1.04
EndIf
EndIf
Return Int(nTam)
E chamo assim:
oDlgRec := MSDialog():New( D(095),D(232),D(462),D(829),"XXXXXX",,,.F.,,,,,,.T.,,oFont1,.T. )
oGrp := TGroup():New( D(004),D(004),D(156),D(284),"",oDlgRec,CLR_BLACK,CLR_WHITE,.T.,.F. )
oSay1 := TSay():New( D(012),D(008),{||"YYYYY"},oGrp,,oFont1,.F.,.F.,.F.,.T.,CLR_BLACK,CLR_WHITE,D(208),D(008))
oGet1 := TGet():New( D(020),D(008),{|u| If(PCount()>0,cForEmail:=u,cForEmail)},oGrp,D(272),D(008),'',,CLR_BLACK,CLR_WHITE,oFont1,,,.T.,"",,,.F.,.F.,,.F.,.F.,"","",,)
Ultima edição: 10 anos 2 meses atrás por AndersonBR.
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Ajuda com MsObjGetPos
Tempo para a criação da página:0.081 segundos