PDA

View Full Version : Messagebox چند رنگی



Batman
یک شنبه 24 شهریور 1387, 22:47 عصر
با سلام و قبولی طاعات و عبادات عزیزان
دوستان چجوری میشه یه messagebox با دورنگ قرمز و آبی ساخت مثلا
"بنام خداوند بخشنده مهربان"
ممنونم

shervin farzin
دوشنبه 25 شهریور 1387, 00:56 صبح
سلام
شما به كمك كد زير ميتونين يه MessageBox جديد در زمان RunTime بسازيد :


var
tempform:tform
msgtext:string
msgtype:TMsgDlgType
begin
tempform:=CreateMessageDialog(msgtext,msgtype,[mbok],mbok);
tempform.ShowModal;


و همين طور كه ميدونين همراه هر MessageBox به طور پيش يه Label و Image ساخته ميشه
شما ميتونين رنگ Label پيش فرض رو مثلا آبي كنين و خودتون يه Label به صورت دايناميك
Create كنين و رنگشو هم قرمز قرار بدين .

در نمونه بالا من يه MessageBox ساختم كه متن پيام و نوع پيام رو از كاربر ميگيره و اين Message
فقط يه دكمه OK داره . طبيعيه كه شما ميتونين اين مشخصات به طور دلخواه خودتون تغيير بدين
و يه نكته ديگه ، به عنوان msgtype همون مقادير Default رو ميتونين وارد كنين مثل mtWarning

اميدوارم كمكتون كرده باشم . موفق باشيد .

Batman
دوشنبه 25 شهریور 1387, 05:43 صبح
سلام
شما به كمك كد زير ميتونين يه MessageBox جديد در زمان RunTime بسازيد :


var
tempform:tform
msgtext:string
msgtype:TMsgDlgType
begin
tempform:=CreateMessageDialog(msgtext,msgtype,[mbok],mbok);
tempform.ShowModal;


و همين طور كه ميدونين همراه هر MessageBox به طور پيش يه Label و Image ساخته ميشه
شما ميتونين رنگ Label پيش فرض رو مثلا آبي كنين و خودتون يه Label به صورت دايناميك
Create كنين و رنگشو هم قرمز قرار بدين .

در نمونه بالا من يه MessageBox ساختم كه متن پيام و نوع پيام رو از كاربر ميگيره و اين Message
فقط يه دكمه OK داره . طبيعيه كه شما ميتونين اين مشخصات به طور دلخواه خودتون تغيير بدين
و يه نكته ديگه ، به عنوان msgtype همون مقادير Default رو ميتونين وارد كنين مثل mtWarning

اميدوارم كمكتون كرده باشم . موفق باشيد .
با سلام و تشکر
در ابتدا دوست عزیز اگر کدهاتون رو بین tag قرار بدید برای بقیه دوستانی هم که میخوان استفاده کنن خواناتر خواهدبود
اما درباره جوابتون:
من خودم از همین روش استفاده کردم
اما مشکلی که هست رنگ label برای همه متن در نظر گرفته میشه یعنی به طور مثال متنی رو که در پست قبلی نوشتم همش به یه رنگ خاص در میاد نه قسمت خاصی از اون
دوستان کسی راه حل دیگری نداره
ممنونم

shervin farzin
دوشنبه 25 شهریور 1387, 13:31 عصر
سلام
من در مورد اين كه چه طوري بشه Caption يه Label رو در دو رنگ ديد اطلاعاتي ندارم .
اگه منظور شما اينه ، پس بايد منو ببخشيد ولي اگه در كل هدفتون اينه كه MessageBox
با دو رنگ داشته باشيد ، همونطور كه گفتم خود MessageBox يه Label ميسازه و Label دوم
رو شما بايد خودتون بسازيد . من يه مثال كوچيك نوشتم كه اميدوارم به دردتون بخوره .


Function showmsg(msgtext:string;msgtype:TMsgDlgType;msgbtns :TMsgDlgButtons;msgdefault:TMsgDlgBtn):integer;
var
tempform:tform;
templabel:TLabel;
begin
msgtext:='به نام خداوند ';
tempform:=CreateMessageDialog(msgtext,msgtype,msgb tns,msgdefault);
templabel:=TLabel.Create(tempform);
templabel.Parent:=tempform;
TLabel(tempform.FindComponent('Message')).Font.Col or:=clBlue;
templabel.Left:=TLabel(tempform.FindComponent('Mes sage')).Left;
templabel.Top:=TLabel(tempform.FindComponent('Mess age')).Top+15;
templabel.Font.Color:=clRed;
templabel.Caption:='بخشاينده مهربان';
result:=tempform.ShowModal;
freeandnil(tempform);
end;


موفق باشيد .

Batman
دوشنبه 25 شهریور 1387, 13:44 عصر
ممنونم دوست عزیز حل شد
حالا چجوری میشه اون کلیدی رو که ما میخوایم (از کلیدهای مثلا yes,no) به طور مثال کلید yes به صورت پیش فرض فعال بشه
ممنونم

pad_kay
دوشنبه 25 شهریور 1387, 13:51 عصر
با سلام و قبولی طاعات و عبادات عزیزان
دوستان چجوری میشه یه messagebox با دورنگ قرمز و آبی ساخت مثلا
"بنام خداوند بخشنده مهربان"
ممنونم

با سلام و خسته نباشید
شما می توانید از کد های html برای این منظور استفاده کنید و نیازی به اظافه کردن لیبل جدید نیز ندارید

shervin farzin
دوشنبه 25 شهریور 1387, 14:22 عصر
حالا چجوری میشه اون کلیدی رو که ما میخوایم (از کلیدهای مثلا yes,no) به طور مثال کلید yes به صورت پیش فرض فعال بشه

ميتونين از پارامتر آخري در همون Function بود استفاده كنين مثل حالت زير


showmsg('Test',mtError,[mbYes,mbNO],mbNo);

كه در اين حالت دكمه No به طور پيش فرض در لحظه نمايش MessageBox فعال خواهد بود .
موفق باشيد .

s.mostafa.rahmani
دوشنبه 25 شهریور 1387, 15:16 عصر
شما می توانید از کد های html برای این منظور استفاده کنید و نیازی به اظافه کردن لیبل جدید نیز ندارید
چطوري ميشه تو MessageBox از كد html استفاده كرد؟

Batman
دوشنبه 25 شهریور 1387, 17:10 عصر
سلام
من در مورد اين كه چه طوري بشه Caption يه Label رو در دو رنگ ديد اطلاعاتي ندارم .
اگه منظور شما اينه ، پس بايد منو ببخشيد ولي اگه در كل هدفتون اينه كه MessageBox
با دو رنگ داشته باشيد ، همونطور كه گفتم خود MessageBox يه Label ميسازه و Label دوم
رو شما بايد خودتون بسازيد . من يه مثال كوچيك نوشتم كه اميدوارم به دردتون بخوره .


Function showmsg(msgtext:string;msgtype:TMsgDlgType;msgbtns :TMsgDlgButtons;msgdefault:TMsgDlgBtn):integer;
var
tempform:tform;
templabel:TLabel;
begin
msgtext:='به نام خداوند ';
tempform:=CreateMessageDialog(msgtext,msgtype,msgb tns,msgdefault);
templabel:=TLabel.Create(tempform);
templabel.Parent:=tempform;
TLabel(tempform.FindComponent('Message')).Font.Col or:=clBlue;
templabel.Left:=TLabel(tempform.FindComponent('Mes sage')).Left;
templabel.Top:=TLabel(tempform.FindComponent('Mess age')).Top+15;
templabel.Font.Color:=clRed;
templabel.Caption:='بخشاينده مهربان';
result:=tempform.ShowModal;
freeandnil(tempform);
end;


موفق باشيد .
با سلام
یه مشکلی هست و اونم اینه که باید به صورت دستی label ای رو که درست می کنیم مقدار بدیم و یه مشکل دیگه این که طول messagebox فقط به اندازه پیغامی که براش می فرستیم قابل تغییر هست و خود label هیچ تغییری در اندازه messagebox ایجاد نمیکنه
ببین تمام همدف من از این کار اینه که یه پیغام دقیقا مثل پیغام زیر چاپ بشه و اونی که به رنگ آبی هستش از یه edit خونده میشه
"بانک ملت با موفقیت ثبت شد"
دقیقا این متن باید توی خود پارامتری که براش میفرستیم قرار بگیره تا از لحاظ اندازه فرم مشکلی پیش نیاد
امیدوارم منظورم رو تونسته باشم برسونم
ممنونم

pad_kay
دوشنبه 25 شهریور 1387, 17:12 عصر
چطوري ميشه تو MessageBox از كد html استفاده كرد؟
با سلام خدمت شما
شما باید یک کامپوننت جدید بنویسید که در آن MessageBox را شبیه سازی کنید برای اطلاعات بیشتر می توانید به سورس THTMLabel از مجموعه TMS روجوع کنید
موفق باشید

Batman
دوشنبه 25 شهریور 1387, 17:13 عصر
با سلام و خسته نباشید
شما می توانید از کد های html برای این منظور استفاده کنید و نیازی به اظافه کردن لیبل جدید نیز ندارید
میشه راهنمایی کنید
ممنونم

vcldeveloper
سه شنبه 26 شهریور 1387, 05:35 صبح
یک راهش اینه که از Labelهایی استفاده کنید که تگ HTML هم قبول می کنند، از این Labelها بصورت رایگان هم وجود داره.
راه دیگه اینه که خودتون یک کامپوننت برای این کار بسازید.
راه سوم اینه که از RichEdit به نحوی استفاده کنید که BorderStyle آن bsNone باشه، البته RichEdit مثل Label قابلیت Transparent نداره، و باید خودتون رنگ پس زمینه آن را با رنگ فرم تنظیم کنید تا پس زمینه اش به چشم نیاد.

Batman
سه شنبه 26 شهریور 1387, 21:01 عصر
با سلام
جناب كشاورز ميشه درباره راه حل اول(تگ html) بيشتر توضيح بديد
ممنونم

vcldeveloper
چهارشنبه 27 شهریور 1387, 01:56 صبح
ميشه درباره راه حل اول(تگ html) بيشتر توضيح بديد
http://www.vclcomponents.com/Delphi/Labels/THMLStaticText_and_TPictureContainer-info.html