How to adjust a memo to the height required to show all text without scrollbars (Views: 28)
Problem/Question/Abstract: How would I find out how many viewed lines are in a memo? For example, if one line is wrapped once, it would count as two. I need to stretch it so that all lines are visible. Answer: Solve 1: Adjusting a memo to the height required to show all text without scrollbars: procedure TForm1.Button2Click(Sender: TObject); var rect1, rect2: TRect; S: string; begin s := Memo1.Text; memo1.Perform(EM_GETRECT, 0, longint(@rect1)); rect2 := rect1; canvas.font := memo1.font; DrawTextEx(canvas.handle, Pchar(S), Length(S), rect2, DT_CALCRECT or DT_EDITCONTROL or DT_WORDBREAK or DT_NOPREFIX, nil); memo1.Height := memo1.height + rect2.bottom - rect1.bottom; end; Solve 2: I use the following: with TControlCanvas.Create do try Control := MmoView; Font.Assign(MmoView.Font); FFontHeight := TextHeight('Q'); FFontWidth := TextWidth('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') div 52; finally Free; end; FMaxBuf := (MmoView.ClientHeight div FFontHeight) * (MmoView.ClientWidth div FFontWidth); FMaxLines := (MmoView.ClientHeight div FFontHeight) - 1; |