Marca Posted May 9, 2018 Report Share Posted May 9, 2018 Bom dia a Todos DEFINE DIALOG oDlgBol RESOURCE 'MINHATELA TITLE "TESTE DE ALINHAMENTO DE TEXTO " FONT meufonte BRUSH meubrush TRANSPARENT REDEFINE BITMAP oBmpFx ID 6000 RESOURCE "BANNER" OF oDlgBol ADJUST TRANSPARENT Quero escrever um texto que fique alinhado em cima deste bitmap sendo que da direita pra esquerda com o say e o sensitive say funcionam sendo q. ambos dão problemas em determinadas situações o say caso eu coloque um brush na tela ela não aparece o texto , ele mostra o Brush O sensitivesay deu problema com alguns temas e com o Windows server REDEFINE SAY oSayBol[7] PROMPT 'Texto que quero que saia alinhado a direita' ID 6001 OF oDlgBol FONT oPub:oFontBaner COLOR CLR_WHITE ALIGN RIGHT TRANSPARENT Com isso encontrei este exemplo que escreve em cima do bitmap e resolve o problema sendo que quero calcular a posição da coluna automaticamente e não colocar ela fixa para que se mudar a resolução não de problema: Como calcular nCalculoPosColuna de acordo com o texto q. eu enviar ?? O Gilmer me sugeriu utilizar a //GetTextWidth( <hDC>, <cString>, [<hFont>] ) --> nPixelWidth Sendo q. já tentei e não esta funcionando conforme a função abaixo q. inicializei no on init ACTIVATE DIALOG oDlgBol CENTERED ; ON INIT ( MontaSayTela ( oBmpFx , cTextoTela , oDlgBol ) ) FUNCTION MontaSayTela ( oBmpSay , cTextoSay , oDlg ) LOCAL nCalculoPos IF oBmpSay != NIL // 0 316 813 581 151 ? oDlg:nLeft,oDlg:nRight, oDlg:nWidth ,oDlg:nHeight ,oDlg:nBottom // Valores * ? oBmpSay:nLeft,oBmpSay:nRight, oBmpSay:nWidth ,oBmpSay:nHeight // 0 0 10 40 0 * nCalculoPos := GetTextWidth(0,Replicate("B",Max(oDlg:nHeight,len(cTextoSay))+1), oPub:oFontBaner) oBmpSay:bPainted := {|| oBmpSay:Say( 1 , nCalculoPos , cTextoSay , CLR_WHITE, , oPub:oFontBaner, .T. ,.T. , )} oBmpSay:Refresh() ENDIF Alguém saberia como resolver ? Quote Link to comment Share on other sites More sharing options...
MatheusFarias Posted May 9, 2018 Report Share Posted May 9, 2018 sugeriria usar um PADR ou PADL no texto, claro se não passar de uma linha. Mas se usar o Pelles o componente "edit" permite ser multiline e alinhar ele em: left,center,right Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 9, 2018 Report Share Posted May 9, 2018 O sensitive say deu problema com alguns temas e com o Windows server Marcelo, você incorpora o Manifest? Eu não vivo sem esses caras aqui, é de terceiros é, mas são excelentes: https://www.4shared.com/zip/frhN_QWqce/DSAYSSAY.html Quote Link to comment Share on other sites More sharing options...
Marca Posted May 9, 2018 Author Report Share Posted May 9, 2018 João. Eu estou exatamente na contramão disso Estou tirando tudo que não é nativo do five de meu sistema com isso estou eliminando TsSay Tsbutton ts.... e ai por diante quero utilizar somente os componentes nativos. kapiaba 1 Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 9, 2018 Report Share Posted May 9, 2018 Veja se ajuda: http://forums.fivetechsupport.com/viewtopic.php?f=6&t=934&p=3704&hilit=obmp+bpainted#p3704 Quote Link to comment Share on other sites More sharing options...
gilmer Posted May 10, 2018 Report Share Posted May 10, 2018 Bom Dia, Você precisa pegar o comprimento da janela em pixel e diminuir o comprimento do texto, assim você terá a posição, ex. Comprimento da janela em pixel = 500 Comprimento do texto (GetTextWidth) = 100 Posição inicial da coluna = 400 (assim ficará alinhado a direita) Quote Link to comment Share on other sites More sharing options...
kapiaba Posted May 10, 2018 Report Share Posted May 10, 2018 Assim Gilmer? #include "FiveWin.Ch" FUNCTION Main() LOCAL oFont, oDlg LOCAL oDat1,cDat1:='Observaciones' LOCAL oDat2,cDat2:='Datos de la cotización' DEFINE FONT oFont NAME "ARIAL" SIZE 0,-20 BOLD DEFINE DIALOG oDlg FROM 0,0 TO 300,450 PIXEL oDlg:lHelpIcon := .F. @ 1, 30 SAY oDat1 VAR cDat1 OF oDlg FONT oFont PIXEL SIZE GetTextWidth(0,cDat1,oFont),20 / 2 @ 12, 30 SAY oDat2 VAR cDat2 OF oDlg FONT oFont PIXEL SIZE GetTextWidth(0,cDat2,oFont),20 / 2 ACTIVATE DIALOG oDlg CENTERED oFont:End() RETURN NIL Quote Link to comment Share on other sites More sharing options...
Marca Posted May 10, 2018 Author Report Share Posted May 10, 2018 Bom Dia, Você precisa pegar o comprimento da janela em pixel e diminuir o comprimento do texto, assim você terá a posição, ex. Comprimento da janela em pixel = 500 Comprimento do texto (GetTextWidth) = 100 Posição inicial da coluna = 400 (assim ficará alinhado a direita) Já fiz isso e não funcionou * nCalculoPos := (oDlg:nWidth-GetTextWidth(0, cTextoSay ,oPub:oFontBaner)) Tentei tbem calculando o bmp * nCalculoPos := (oBmp:nWidth-GetTextWidth(0, cTextoSay ,oPub:oFontBaner)) Pra funcionar tive q. fazer assim: nCalculoPos := oDlg:nWidth - Len( cTextoSay ) Oq. não faz sentido. Quote Link to comment Share on other sites More sharing options...
gilmer Posted May 11, 2018 Report Share Posted May 11, 2018 o que exatamente não funcionou ? coloque uma imagem Você verificou se o nwidth esta trazendo uma informação coerente ? quais são os valores? Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.