PDA

View Full Version : افزودن خط در ممو بدون اینکه کنترل به خط آخر بره



seyed_farid
پنج شنبه 27 دی 1397, 14:49 عصر
با سلام

من میخوام توی memo خط اضافه کنم ولی هر وقت خواستم کنترل رو به خط آخر ببرم.
ظاهرا با دستور Memo1.Lines.Add(s) کنترل به خط آخر میره و این باعث میشه نتونم تکست این ممو را رصد کنم.

Delphi Coder
جمعه 28 دی 1397, 02:10 صبح
با سلام

من میخوام توی memo خط اضافه کنم ولی هر وقت خواستم کنترل رو به خط آخر ببرم.
ظاهرا با دستور Memo1.Lines.Add(s) کنترل به خط آخر میره و این باعث میشه نتونم تکست این ممو را رصد کنم.

دقیق متوجه منظورتون نشدم. زمانی که runtime چیزی به memo اضافه میکنید اتوماتیک اسکرول میشه به اخرین خط اگر میخواید این اتفاق نیافته قبل از اضافه کردن به memo این دستور

Memo1.Lines.BeginUpdate;
ونهایتا بعد از اضافه کردن متن
Memo1.Lines.EndUpdate;

رو صدا بزنید.
احتمالا مشکلتون حل خواهد شد.

seyed_farid
جمعه 28 دی 1397, 22:04 عصر
سلام و تشکر از پاسختون
احسنت :تشویق::تشویق::تشویق:

حالا من میخوام اگر کاربر ممو را به خط آخر ببرد ، حالا دیگه اسکرول بشه.
میشه این مورد را هم راهنمایی بفرمائید؟ :تشویق:

seyed_farid
شنبه 29 دی 1397, 00:13 صبح
من کدم رو به این شکل نوشتم و مورد حل شد.

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;


اما حالا یه مورد دیگه داره.
و اون اینکه در موقعیکه خطوط افزوده میشود و بخواهم یک بخشی از تکس رو سلکت کنم ، با آمدن و اضافه شدن خطوط جدید، سلکت من خراب میشه و از دست میره.
چطور میشه حلش کرد؟