delphi memo как получить размера текста в пикселях или же индекс самой длинной строки в пикселях
Как получить размера текста в пикселях или же индекс самой длинной строки в пикселях
Мне нужно заменить стандартный горизонт скрол на свой но что бы он верно работал нужно знать максимальную ширину текста в текущий момент в memo как ее найти
Перебирать каждую строку? долго очень нагрузить систему.
в
Winapi.Windows.GetTextExtentPoint32(Dc, Ln, Length(Ln), Siz);
впихивать целый текст долго работает
DrawText(DC,PChar(Ln),Length(Ln),Rect,DT_LEFT or DT_CALCRECT);
так же долго работает при больших текстах
Может в win api есть какое сообщение которое вернет индекс самой длиной строки
Любой способ с хорошей производительность подойдет
я включил бары и функции GetScrollRange GetScrollPos начали отвечать но они отвечают только если ShowScrollBar( true ); я могу включать его когда нужно замерить и выключить после замера и что бы он не моргал использовать WM_SETREDRAW но handel бара не знаю пока оправляю всему memo а можно как то узнать handle Vbar Hbar -oв?
SendMessage(Memo2.Handle, WM_SETREDRAW, Ord(false), 0);
b:=ShowScrollBar( Memo2.Handle,SB_VERT,true);
fillchar(Inf,sizeof(Inf),0);
Inf.cbSize:=sizeof(Inf);
b:=GetScrollInfo(Memo2.Handle,SB_VERT,Inf);
L:=0;
b:=GetScrollRange( Memo2.Handle,SB_VERT,H,L);
H:=GetScrollPos ( Memo2.Handle,SB_VERT);
Edit1.Text:= L.ToString+ ' '+H.ToString;
showmessage('s');
b:=GetScrollRange( Memo2.Handle,SB_HORZ,H,L);
H:=GetScrollPos ( Memo2.Handle,SB_HORZ);
b:=ShowScrollBar( Memo2.Handle,SB_VERT,false);
SendMessage(Memo2.Handle, WM_SETREDRAW, Ord(true), 0);