با سلام
من لاگ اتفاقات برنامه رو در ممو ثبت میکنم.
وقتی ممو را بخوام ببینم و بالا و پایین برم؛ اگر در همین حین اتفاقی بیاد، کرسر یهو به خط آخر میره.
راهی هست که فقط متن جدید اضافه بشه به متن قبلی ولی نشانکر جابجا نشه؟
با سلام
من لاگ اتفاقات برنامه رو در ممو ثبت میکنم.
وقتی ممو را بخوام ببینم و بالا و پایین برم؛ اگر در همین حین اتفاقی بیاد، کرسر یهو به خط آخر میره.
راهی هست که فقط متن جدید اضافه بشه به متن قبلی ولی نشانکر جابجا نشه؟
https://stackoverflow.com/questions/...hange-in-tmemo
procedure TSomeMemo.OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key in [VK_UP, VK_DOWN, VK_LEFT, VK_RIGHT] then
OnMouseDown(Sender, mbLeft, Shift, 0, 0);
end;
procedure TSomeMemo.OnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
row,col: integer;
begin
if Button = mbLeft then
begin
row := SendMessage(Handle, EM_LINEFROMCHAR, SelStart, 0);
col := SelStart - SendMessage(Handle, EM_LINEINDEX, row, 0);
...
end;
end;
ممنون از پاسختون
ولی
من میخوام وقتی درحال دیدن و خواندن ممو هسنم وقتی با دستور Memo1.lines.add(text); لاگ رو مینویسم تو ممو، ممو نره خط آخر.
ضمنا من مستقیم بوسیله کیبورد چیزی نمی نویسم.
سلام
جهت استفاده دوستانی که مشکل من رو داشتند.
procedure TMainForm.AddToLog(s : string);
var i, j, LineChar, LastLine : Integer;
begin
LineChar := SendMessage(Memo1.Handle,EM_charfrompos,0, (Memo1.ClientHeight-1) shl 16 );
LastLine := (LineChar and $ffff0000) shr 16;
if LastLine < Memo1.Lines.Count
then
begin
j := Memo1.SelLength;
i := SendMessage(Memo1.Handle,EM_GETFIRSTVISIBLELINE,0, 0);
Memo1.Lines.BeginUpdate;
try
Memo1.Lines.Add(s);
Memo1.SelStart := i;
Memo1.SelLength := j;
Memo1.Perform(EM_SCROLLCARET, i, j)
finally
Memo1.Lines.EndUpdate;
end;
end
else
Memo1.Lines.Add(s);
end;