Como determinar o Rect (não client) de controle c/ ScrollBar

26/12/2005

1

Colegas,

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.


Responder

Posts

26/12/2005

Edilcimar

Eu tenho isto que uso para impressão, tente adaptar e veja se dá certo
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);


Responder

26/12/2005

Vinicius2k

Edilcimar,

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! ;)


Responder

26/12/2005

Michael

Achei isso no site da Borland:

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


Responder

26/12/2005

Ipc$

Tente a função GetScrollBarInfo:
var SBI:TScrollBarInfo;
begin
  SBI.cbSize := SizeOf(SBI);
  GetScrollBarInfo((Controle que possui a scrollbar).Handle, ObjId_VScroll, SBI);
end;
SBI.rcScrollBar é o TRect.
ObjId_VScroll é a vertical e ObjId_HScroll a horizontal.


Responder

27/12/2005

Vinicius2k

Colegas Michael e ipc$,

Agradeço a tentativa de ajudar mas, infelizmente, ainda não é a solução para a questão...


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira