با سلام
من میخوام توی memo خط اضافه کنم ولی هر وقت خواستم کنترل رو به خط آخر ببرم.
ظاهرا با دستور Memo1.Lines.Add(s) کنترل به خط آخر میره و این باعث میشه نتونم تکست این ممو را رصد کنم.
Printable View
با سلام
من میخوام توی memo خط اضافه کنم ولی هر وقت خواستم کنترل رو به خط آخر ببرم.
ظاهرا با دستور Memo1.Lines.Add(s) کنترل به خط آخر میره و این باعث میشه نتونم تکست این ممو را رصد کنم.
دقیق متوجه منظورتون نشدم. زمانی که runtime چیزی به memo اضافه میکنید اتوماتیک اسکرول میشه به اخرین خط اگر میخواید این اتفاق نیافته قبل از اضافه کردن به memo این دستور
Memo1.Lines.BeginUpdate;
ونهایتا بعد از اضافه کردن متنMemo1.Lines.EndUpdate;
رو صدا بزنید.
احتمالا مشکلتون حل خواهد شد.
سلام و تشکر از پاسختون
احسنت :تشویق::تشویق::تشویق:
حالا من میخوام اگر کاربر ممو را به خط آخر ببرد ، حالا دیگه اسکرول بشه.
میشه این مورد را هم راهنمایی بفرمائید؟ :تشویق:
من کدم رو به این شکل نوشتم و مورد حل شد.
Procedure AddLineToMemo(Memo : TMemo; S : String);
// 97-10-28
function GetVisibleLineCount(Memo: TMemo): Integer;
var
DC: HDC;
SaveFont: HFONT;
TextMetric: TTextMetric;
EditRect: TRect;
begin
DC := GetDC(0);
SaveFont := SelectObject(DC, Memo.Font.Handle);
GetTextMetrics(DC, TextMetric);
SelectObject(DC, SaveFont);
ReleaseDC(0, DC);
Memo.Perform(EM_GETRECT, 0, LPARAM(@EditRect));
Result := (EditRect.Bottom - EditRect.Top) div TextMetric.tmHeight;
end;
var
LineCount, TopLine, VisLines: Integer;
NoSCRL : Boolean ;
begin
LineCount := Memo.Perform(EM_GETLINECOUNT, 0, 0) - 1;
TopLine := Memo.Perform(EM_GETFIRSTVISIBLELINE, 0, 0);
VisLines := GetVisibleLineCount(Memo);
settings.Label32.caption := 'Top= ' + IntToStr(TopLine) + ' Count= ' + IntToStr(LineCount)+ ' Vis Line Count= '+ IntToStr(VisLines);
NoSCRL := (TopLine + VisLines) <= LineCount;
if NoSCRL then Memo.Lines.BeginUpdate;
memo.Lines.Add(s);
if NoSCRL then Memo.Lines.EndUpdate;
end;
اما حالا یه مورد دیگه داره.
و اون اینکه در موقعیکه خطوط افزوده میشود و بخواهم یک بخشی از تکس رو سلکت کنم ، با آمدن و اضافه شدن خطوط جدید، سلکت من خراب میشه و از دست میره.
چطور میشه حلش کرد؟