procedure TForm1.Memo1Change(Sender: TObject);
var
ContentHeight: Integer;
begin
Canvas.Font := Memo1.Font; //這什么意思.canvas是干什么用的.為什么給它賦值
ContentHeight := Canvas.TextHeight('好'); //這句完全不明白.還有那個('好')又是個什么東西
ContentHeight := (Memo1.Lines.Count+1) * ContentHeight;//這句話有什么意義啊
if ContentHeight < Memo1.Height then //這里下面我知道.判斷是否超出memo的高度
begin
Memo1.ScrollBars := ssNone;
end
else
begin
Memo1.ScrollBars := ssVertical;
end;
end;
end.
好人做到底.給我個詳細解答
uj5u.com熱心網友回復:
procedure TForm1.Memo1Change(Sender: TObject);var
ContentHeight: Integer;
begin
Canvas.Font := Memo1.Font; //canvas是memo1控制元件的畫布,memo1顯示出的東西都是畫在這上面的。
ContentHeight := Canvas.TextHeight('好'); //這句是得到單獨一行文字的高度,"好"字沒意義,只是隨便用一字來取得當前字體下,一行文字的高度,你可以換成其它字。
ContentHeight := (Memo1.Lines.Count+1) * ContentHeight;//這句話得到memo1中所有行的文字高度
if ContentHeight < Memo1.Height then //這里下面我知道.判斷是否超出memo的高度
begin
Memo1.ScrollBars := ssNone;
end
else
begin
Memo1.ScrollBars := ssVertical;
end;
end;
end.
uj5u.com熱心網友回復:
ContentHeight := (Memo1.Lines.Count+1) * ContentHeight;
這句還是不理解.為什么Memo1.Lines.Count+1 要加1.還要剩 ContentHeight
uj5u.com熱心網友回復:
ContentHeight := (Memo1.Lines.Count+1) * ContentHeight;在乘法沒有執行前,ContentHeight是每行的高度
而memo1中,有Memo1.Lines.Count這么多行,所以總高度應該是(Memo1.Lines.Count+1) * ContentHeight;
+1應該是為了讓memo1提前一行就開始有滾動條。你把+1去掉也沒關系,顯示上有點不同。
uj5u.com熱心網友回復:
滾動條不是自己出現的么?為什么還要判斷?uj5u.com熱心網友回復:
MEM0的滾動條有四種狀態。只撿兩種說。ssNone:不出現滾動條。即使超出范圍也不出現。(界面上不顯示滾動條部分)
ssVertical:當超出Memo高度時出現滾動條。(界面上始終顯示滾動條部分).
所以樓主的意思是兩者的綜合體,超出的時候可以顯示,但是沒超出來就不能顯示滾動條部分!但是Memo默認的屬性要么始終顯示,要么都不顯示。這就有點死板了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151940.html
標籤:語言基礎/算法/系統設計
下一篇:execl 做資料源問題
