GTwvw - É possível trocar coord. de LIN/COL por PÍXELS?

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

GTwvw - É possível trocar coord. de LIN/COL por PÍXELS?

Mensagem por Dr.Microso »

Prezados, saudações!

GTwvw
Há possibilidade de trocar coordenadas de LINHA x COLUNA ou seja SetMode(), por PÍXEL (altura/largura), na definição de telas, imagens, e outros "objetos"?
Como faria por exemplo, para criar uma janela de 640x480 e posicionar uma imagem de 300x200 em certa posição?

As outras GTs permitem isso ou são similares à WVW em funcionamento?
Em tempo: quais tipos de imagens a WVW suporta?

Um abraço!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

GTwvw - É possível trocar coord. de LIN/COL por PÍXELS?

Mensagem por Imatech »

Olá Dr.Microso !
.
.
.
Desconheço essa possiblidade e nos fontes tambem não temos referencia a essa possiblidade...
.
.
.
Sucesso...
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
Dr.Microso
Usuário Nível 3
Usuário Nível 3
Mensagens: 173
Registrado em: 12 Jan 2009 21:26
Localização: Belo Horizonte, MG

GTwvw - É possível trocar coord. de LIN/COL por PÍXELS?

Mensagem por Dr.Microso »

Caro Imatech, grato pelo feedback!

Nunca tinha me aventurado pela WVW que, apesar de tida como obsoleta, me parece a forma mais rápida e indolor para uma migração rápida... Achei bem documentada! Para quem quer contornar as limitações impostas pelo Windows aos app de 16 bits, conferindo um aspecto GUI que pode ser aprimorado, não vi nada melhor. Recomendo!

Um abraço!
"O que domina aos outros é forte; o que domina a si mesmo é poderoso." [ Lao-Tsé - séc VII AC]
"É tipo uma Alquimia... Porções de código viram soluções que mutam-se fisicamente em sorrisos e outros, como o notebook que uso para escrever estas linhas..." dr.microso@hotmail.com
Imatech
Usuário Nível 3
Usuário Nível 3
Mensagens: 350
Registrado em: 24 Ago 2010 23:48
Localização: Goiânia-GO

GTwvw - É possível trocar coord. de LIN/COL por PÍXELS?

Mensagem por Imatech »

Olá !
.
.
.
Obrigado pela dica...
.
.
.
Recomendo tambem, como solução definitiva estudar hbQT ou hwGui
.
.
.
Sucesso...
M., Ronaldo

by: IMATECH

IMATION TECNOLOGIA
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

GTwvw - É possível trocar coord. de LIN/COL por PÍXELS?

Mensagem por bencz »

Olá, já tive esse mesmo problema, e a solução que eu utilizei foi essa veja:

Código: Selecionar todos

HDC hDC;
TEXTMETRIC textMetric;
HFONT   hFont, hOldFont;
int sizeInPpoints, lineHeight;
RECT textRect;
char *buffer = "Comprimento em pixels desta string!";
 
hDC = GetDC(hwnd);
sizeInPpoints = MulDiv(10, GetDeviceCaps(hDC, LOGPIXELSY), 72);
hFont = CreateFont(-sizeInPpoints, 0, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0, "Courier New");
hOldFont = (HFONT)SelectObject(hDC, hFont);
 
GetTextMetrics(hDC, &textMetric);
 
lineHeight = textMetric.tmHeight; // character height in current font

textRect.left = textRect.right = textRect.top = textRect.bottom = 0;
DrawText(hDC, buffer, strlen(buffer), &textRect, DT_CALCRECT);
 
printf("Tamanho do texto calculado pelo DrawText: [%d x %d]\n", textRect.right, textRect.bottom);
printf("Altura do texto calculado pelo GetTextMetrics: %d\n", lineHeight);
Bom, não é exatamente, com exatidão o mesmo problema ( pleonasmo 0 aqui nesta frase xD ), mas, vc pode tentar utilizar a mesma solução (:
vc passa por parametros oque você precisa calcular, e pronto (:
Imagem
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

GTwvw - É possível trocar coord. de LIN/COL por PÍXELS?

Mensagem por Pablo César »

Colega Bencz, podia dar um exemplo ? E como adaptar no Harbour ?
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
bencz
Usuário Nível 4
Usuário Nível 4
Mensagens: 524
Registrado em: 28 Abr 2012 17:36
Contato:

GTwvw - É possível trocar coord. de LIN/COL por PÍXELS?

Mensagem por bencz »

Claro, com todo o prazer (:

Código: Selecionar todos

function main
   ? GETPIXELSIZE("Ola mundo")
   wait
return nil

#pragma BEGINDUMP

#include <Windows.h>
#include "hbapi.h"

#define BUFSIZE 1024

HWND GetConsoleHwnd(void)
{
   HWND hwndFound;
   char pszNewWindowTitle[BUFSIZE];
   char pszOldWindowTitle[BUFSIZE];
   GetConsoleTitle(pszOldWindowTitle, BUFSIZE);
   hwndFound=FindWindow(NULL, pszNewWindowTitle);
   SetConsoleTitle(pszOldWindowTitle);
   return(hwndFound);
}

HB_FUNC ( GETPIXELSIZE )
{
   HDC hDC;
   TEXTMETRIC textMetric;
   HFONT   hFont, hOldFont;
   int sizeInPpoints, lineHeight;
   RECT textRect;
   HWND hwnd = GetConsoleHwnd();
   const char *buffer = hb_parc(1);
   const char *fontType = "Courier New";

   hDC = GetDC(hwnd);
   sizeInPpoints = MulDiv(10, GetDeviceCaps(hDC, LOGPIXELSY), 90);
   hFont = CreateFont(-sizeInPpoints, 0, 0, 0, FW_NORMAL, 0, 0, 0, 0, 0, 0, 0, 0, fontType);
   hOldFont = (HFONT)SelectObject(hDC, hFont);

   GetTextMetrics(hDC, &textMetric);

   lineHeight = textMetric.tmHeight;

   textRect.left = textRect.right = textRect.top = textRect.bottom = 0;
   DrawText(hDC, buffer, strlen(buffer), &textRect, DT_CALCRECT);

   hb_retnl(textRect.right);
}

#pragma ENDDUMP
Neste caso, ele vai retornar o comprimento da string { Ola mundo } em pixels... (:
Imagem
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

GTwvw - É possível trocar coord. de LIN/COL por PÍXELS?

Mensagem por Claudio Soto »

Hola a todos, aquí les dejo una función general para obtener el largo y el ancho de un texto para un determinado tipo y tamaño de fuente.
Ejemplo:

aSize := BT_TEXT_SIZE (hWnd, "Hola Mundo", "Times New Roman", 14, BT_TEXT_BOLD + BT_TEXT_ITALIC)
nSizeTextWIDTH := aSize [1]
nSizeTextHEIGHT := aSize [2]

Saludos,
Claudio Soto.

Código: Selecionar todos

#pragma BEGINDUMP

#define WINVER 0x0500  // minimum requirements: Windows 2000
#include <windows.h>
#include "hbapi.h"

// (c) Dr. Claudio Soto
// srvet@adinet.com.uy
// http://srvet.blogspot.com 
// Setiembre 2012, Uruguay

//*******************************************************************************************************************
//* BT_TEXT_SIZE (hWnd, cText, cFontName, nFontSize, nType) ---> Return Array = { nSizeTextWIDTH, nSizeTextHEIGHT }
//*******************************************************************************************************************

// Type
#define BT_TEXT_BOLD        2
#define BT_TEXT_ITALIC      4
#define BT_TEXT_UNDERLINE   8
#define BT_TEXT_STRIKEOUT   16

HB_FUNC (BT_TEXT_SIZE)
{
   HDC  hDC;
   HFONT hFont;
   SIZE SizeText;
   HWND hWnd;
   CHAR *Text, *FontName;
   INT FontSize;
   INT Type;
   
   INT Bold = FW_NORMAL;
   INT Italic = 0, Underline = 0, StrikeOut = 0;

   hWnd        = (HWND)     hb_parnl  (1);
   Text        = (CHAR *)   hb_parcx  (2);
   FontName    = (CHAR *)   hb_parcx  (3);
   FontSize    = (INT)      hb_parni  (4);  // Size of font in logic points
   Type        = (INT)      hb_parni  (5);
      
   hDC = GetDC (hWnd);
      
   if ((Type & BT_TEXT_BOLD) == BT_TEXT_BOLD)
       Bold = FW_BOLD;
   
   if ((Type & BT_TEXT_ITALIC) == BT_TEXT_ITALIC)    
       Italic = 1;
   
   if ((Type & BT_TEXT_UNDERLINE) == BT_TEXT_UNDERLINE)       
       Underline = 1;
       
   if ((Type & BT_TEXT_STRIKEOUT) == BT_TEXT_STRIKEOUT)    
       StrikeOut = 1;
   
   FontSize = FontSize * GetDeviceCaps (hDC, LOGPIXELSY) / 72;   

   hFont = CreateFont (0-FontSize, 0, 0, 0, Bold, Italic, Underline, StrikeOut,
           DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, FontName);
   
   SelectObject (hDC, hFont);
    
   GetTextExtentPoint32 (hDC, Text, lstrlen(Text), &SizeText);
   hb_reta (2);
   hb_storvnl ((LONG) SizeText.cx, -1, 1); 
   hb_storvnl ((LONG) SizeText.cy, -1, 2); 

   DeleteObject (hFont);
   ReleaseDC (hWnd, hDC);   
}

#pragma ENDDUMP
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Responder