PDA

View Full Version : رفتن به خط بعدی پس از وارد کردن تعداد محدودی کارکتر



MY DEAR DELPHI
شنبه 29 تیر 1387, 23:41 عصر
سلام
چطور می تونم وقتی کاربر در یک memo پس از وارد کردن 50 کارکتر, به خط بعدی بره.یعنی در هر خط اجازه وارد کردن 50 کلمه رو داشته باشه

Hsimple11
یک شنبه 30 تیر 1387, 00:51 صبح
یک راهش این است که با Sendmessage یک مستطیل فرضی (SETRECT) برای Memo تعریف کنیم که بیشتر از طول آن دیگر کاراکتر تایپ نشود و خودبخود Cursor به خط بعدی می آید.

Hsimple11
یک شنبه 30 تیر 1387, 00:52 صبح
البته با این روش کاراکتر را نمیتوان معیار در نظر گرفت چون بر حسب پیکسل اندازه گرفته میشود.

as13851365
یک شنبه 30 تیر 1387, 17:08 عصر
اول باید بدونی که توی چندمین خط هستی بعد تعداد کاراکتر های موجود در آن خط را با استفاده از تابع Length به دست می آری بعد فکر کنم که اگه یک بار دستور ادد رو خالی اجرا کنی برنامه به خط بعدی می ره

tefos666
یک شنبه 30 تیر 1387, 22:42 عصر
دوست من امیدوارم این قطعه کد کمکت کنه - یه تایمر - ممو - لیبل رو فرمت بزار تو تایمر بنویس



procedure TForm1.Timer1Timer(Sender: TObject);
var z,i:Integer;
begin
for i:=1 to Length(Memo1.Text) do
z:= Length (Memo1.Lines.Text )-2;
Label1.Caption:=IntToStr (z);
if z>=20 then
Begin
Memo1.Lines.Add('new line')
end
end



همیشه ساده ترین راه بهترین راهه

success is doing , not wishing :تشویق:

اصغر (پآچ)
دوشنبه 31 تیر 1387, 00:22 صبح
سلام دوست من
ببین بیا در رویداد OnChange مربوط به Memo طول متن تایپ شده رو بگیر و بر 50 تقسیم کن اگه جوابش صفر بود دستور ;('')Memo1.Lines.Add رو اجرا کن

موفق و موید باشی

as13851365
دوشنبه 31 تیر 1387, 12:08 عصر
سلام دوست من
ببین بیا در رویداد OnChange مربوط به Memo طول متن تایپ شده رو بگیر و بر 50 تقسیم کن اگه جوابش صفر بود دستور ;('')Memo1.Lines.Add رو اجرا کن

موفق و موید باشی

با راه حلی که شما پیشنهاد کردید فکر نکنم بشه به جواب رسید به یه دلیل
اگه ما در سطر اول 25 کاراکتر را وارد کنیم وبعد در سطر بعدی بخواهید 30 کارکتر را وارد کنیم برنامه 25 کاراکتر را وارد کرده و به خط جدید می پرد در صورتی که ما می خواهیم در هر سطر حداکثر 50 کاراکتر تایپ شود

برای این کار هم باید اول سطری را که در آن قرار داریم شمارش را به دست بیاریم و بعد تعداد کاراکتر های تایپ شده در آن سطر را به دست آورده در صورتی که تعداد بیشتر از 50 بود برنامه به خط بعدی برود

tefos666
دوشنبه 31 تیر 1387, 12:36 عصر
فکر کنم مشکلت با این تیکه حل بشه -

for i:=1 to Length(Memo1.lines.text) do

z:= Length (Memo1.Lines.Text )-2

taha
دوشنبه 31 تیر 1387, 12:36 عصر
سلام
برای اینکه بتونی اینکارو انجام بدی لازم بدونی در هنگام تایپ کردن در ممو در کدام خطی که بتونی طول اون خط را تشخیص بدی و ... ادامه کار.

تشخیص موقعیت کرسر (شماره خط):


procedure TForm1.Memo1Change(Sender: TObject);
begin
Caption:= IntToStr(SendMessage(Memo1.Handle, EM_LINEFROMCHAR,-1,0));
end;

Hsimple11
دوشنبه 31 تیر 1387, 13:58 عصر
جالبه ده تا راه حل گفته شد ولی کاربری که سوال رو پرسیده بود اصلا یک بارم سر نزده!!

as13851365
سه شنبه 01 مرداد 1387, 10:14 صبح
جالبه ده تا راح حل گفته شد ولی کاربری که سوال رو پرسیده بود اصلا یک بارم سر نزده!!

خوب این کارش به کسی ضرری نرسونده
با همچین کارهایی دوستان با نظرات و راه حل های دیگران هم آشنا می شن

MY DEAR DELPHI
شنبه 05 مرداد 1387, 23:05 عصر
جالبه ده تا راه حل گفته شد ولی کاربری که سوال رو پرسیده بود اصلا یک بارم سر نزده!!

از لطف همتون ممنون.حتما مشکل داشتم که نیومدم.....

نه زمان را درد کسی نه کسی را درد زمان