Como determinar o Rect (não client) de controle c/ ScrollBar
26/12/2005
0
Fazem dias que estou ´quebrando a cabeça´ com uma coisa:
Como determinar o Rect total de um controle que possui Scrollbars? Um TRichEdit, por exemplo.
Já tentei de tudo usando a API (eu acho) e não consigo identificar qual o tamanho real do controle.
Eu preciso: renderizar para um bitmap todo o texto contido no controle. A renderização é feita sem problemas, mas eu preciso setar o tamanho do bitmap antes de renderizar e gostaria de setar no bitmap o tamanho exato necessário.
Eu até consegui fazer percorrendo todas as linhas, medindo a largura máxima e multiplicando por um índice para determinar a largura. A mesma coisa, contando as linhas e multiplicando por um índice para determinar a altura. Mas isto é impreciso, porque os fonts dentro do controle podem variar de tamanho e também achei meio ´gambiarra´. :)
Será que existe alguma forma ´limpa´ de fazer isto?
Desde já agradeço à todos.
Vinicius2k
Posts
26/12/2005
Edilcimar
IndiceH := Printer.PageWidth div 960;
IndiceV := Printer.PageHeight div 1584;
Rect.Left := ColunaNome * IndiceH;
Rect.Top := LinhaNome * IndiceV;
Rect.Right := 950 * IndiceH;
Rect.Bottom := (Rect.Top + TextHeight(Nome) + 1) * IndiceV;
DrawText(Handle,Pchar(Nome),Length(Nome),Rect,DT_WORDBREAK);
26/12/2005
Vinicius2k
No seu caso, por exemplo, Printer.PageWidth é conhecido, ou seja, você sabe exatamente a largura da página da impressora.
No meu caso, é exatamente o que preciso descobrir: a largura/altura reais do controle, mesmo com rolagens.
Infelizmente, este não é o meu caminho, mas de qualquer forma, obrigado! ;)
26/12/2005
Michael
http://community.borland.com/article/0,1410,16201,00.html
Não consegui testar o exemplo pq parece que foi feito em uma versão bem antiga do Delphi. De qualquer forma, dê uma olhada. Quem sabe vc não consegue modificá-lo para seu propósito.
Avise-nos se obtiver sucesso. ;-)
[]´s
26/12/2005
Ipc$
var SBI:TScrollBarInfo; begin SBI.cbSize := SizeOf(SBI); GetScrollBarInfo((Controle que possui a scrollbar).Handle, ObjId_VScroll, SBI); end;
ObjId_VScroll é a vertical e ObjId_HScroll a horizontal.
27/12/2005
Vinicius2k
Agradeço a tentativa de ajudar mas, infelizmente, ainda não é a solução para a questão...
Clique aqui para fazer login e interagir na Comunidade :)