PDA

View Full Version : AutoSize



delphiman00
سه شنبه 02 تیر 1383, 18:37 عصر
سلام
چگونه می توانم یک Edit را طوری Autosize کنم که علاوه بر ارتفاع عرض آن نیز رب حسب طول نوشته داخل edit تنظیم شود ؟

A.VAHID
سه شنبه 02 تیر 1383, 20:55 عصر
با سلام
شما میتوانید در قسمت Events مربوط به Edit1Change خودتان این تکه برنامه را اضافه کنید که عدد 10 ضریبی است که دوست دارید به طول آن اضافه شود البته متوانید به همین روش به ارتفاع آن اضافه نمائید
ع.و



procedure TForm1.Edit1Change(Sender: TObject);
begin
Edit1.Width := length(Edit1.Text) * 10;
end;

hr110
پنج شنبه 04 تیر 1383, 22:51 عصر
البته اگر میخواهید دقیقاً طول edit برابر رشته ورود باشد بهتر است از این کد استفاده کنید

Edit1.Width:=Canvas.TextWidth(Edit1.TExt)+10;

delphiman00
جمعه 05 تیر 1383, 08:41 صبح
سلام
از وحیدجان ممنون ولی منظور من اینه که با هر فونتی دیقیقا عرض من برابر طول رشته بشود

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

delphiman00
یک شنبه 07 تیر 1383, 12:17 عصر
مدیر عزیز


Edit1.Width:=Canvas.TextWidth(Edit1.TExt)+10;

از دستور شما استفاده کردم

اما این دستور برای هر حرف یک تعداد پیکسل مشخص بر می گرداند و اگر اندازه سایز فونت را عوض کنیم باز این عدد تغییر نمی کند خلاصه این دستور هم مشکل من را حل نکرد

اگر واقعا بتوان اندازه رشته را با توجه به اندازه بزرگی فونت بدست آورد شاید بتوان کاری کرد

hr110
یک شنبه 07 تیر 1383, 14:01 عصر
مشکل در canvas است ، شما باید فونت canvas رو هم عوض کنید

در این متدی که من برایتان نوشتم canvas برای فرم است و شما میتوانید از یک ابجکت دیگه که پراپرتی canvas داشته باشه میتونید استفاده کنید، مثل panel که برای انکه طراحی فرمتون هم به هم نخوره میتونید اونو hide کنید و تنها از canvas اون استفاده کنید

delphiman00
یک شنبه 07 تیر 1383, 17:50 عصر
حتما امتحان می کنم

با تشکرات فراوان :flower:

delphiman00
سه شنبه 09 تیر 1383, 22:08 عصر
سلام
از روشی که گفتید استفاده کردم اما ظاهرا پراپرتی Canvas را نمی توان مستقیم از Panel گرفت چون این پراپرتی از پراپرتی های محافظت شده TCustomControl است ( Protected ) لذا کار زیر را انجام دادم :


type TCustomControl=class(Controls.TCustomControl);
type TPanel=class(ExtCtrls.TPanel);

البته مشکل من حل شد فقط می خواستم ببینم برای دستیابی به Canvas شی TPanel راه درستی رفتم یا خیر ؟

delphiman00
چهارشنبه 10 تیر 1383, 19:27 عصر
سلام
جواب سؤال بالا را نگرفتم

اما به نوشته های زیر هم توجه کنید...

delphiman00
چهارشنبه 10 تیر 1383, 19:28 عصر
سلام
با کمک از دلفی و کمی دستکاری خودم دو تا تابع نوشتم تا بوسیله آنها بتوان یک Editbox را به راحتی و بدون وابستگی به یک Panel یا اینکه حتما Edit ما در حالت bsSingle باشد Autosize کرد هم از ارتفاع هم از عرض :

برای تنظیم ارتفاع Edit :


procedure TForm1.Button1Click(Sender: TObject);
var
DC: HDC;
SaveFont: HFont;
I: Integer;
SysMetrics, Metrics: TTextMetric;
begin
DC := GetDC(Edit1.Handle);
GetTextMetrics(DC, SysMetrics);
SaveFont := SelectObject(DC, Edit1.Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
ReleaseDC(Edit1.Handle, DC);

if Edit1.Ctl3D then I := 6 else I := 4;

I := GetSystemMetrics(SM_CYBORDER) * I;

edit1.Height := Metrics.tmHeight + I;

end;



برای تنظیم عرض Edit :


procedure TForm1.Button2Click(Sender: TObject);
var
DC: HDC;
SaveFont: HFont;
I,n: Integer;
SysMetrics, Metrics: TTextMetric;
begin
n:=Length(Edit1.Text);
DC := GetDC(Edit1.Handle);
GetTextMetrics(DC, SysMetrics);
SaveFont := SelectObject(DC, Edit1.Font.Handle);
GetTextMetrics(DC, Metrics);
SelectObject(DC, SaveFont);
ReleaseDC(Edit1.Handle, DC);

if Edit1.Ctl3D then I := 6 else I := 4;

I := GetSystemMetrics(SM_CXBORDER) * I;

edit1.Width := (Metrics.tmAveCharWidth)*n + I;

end;

منتظر پیشنهادات سازنده شما هستم

MToloo
جمعه 12 تیر 1383, 05:51 صبح
خوب اینهایی که نوشتی هم میشه. ولی خیلی طولانی و سخته. راه ساده ترش همون Canvase دلفیه. ولی باید قبلش فونتش رو عوض کنی. اینطوری:

Canvase.Font:= Edit1.Font;
Edit1.width:= Canvas.textwidth(Edit1.text);

در اینجا از همون Canvase فرم استفاده میشه.