PDA

View Full Version : سوال: نحوه تبدیل یک فونت به یک رشته



mehdi_moosavi
چهارشنبه 13 مهر 1390, 16:52 عصر
با سلام و عرض ادب
دوستان محترم فرض کنید در یک برنامه کاربر میتونه بوسیله یک FontDialog فونت یک Grid رو تنظیم کنه.
حالا اگه بخواهیم Grid.Font.Style رو تبدیل به یک String کنیم و در یک فایل ذخیره کنیم تا بار بعد که برنامه اجرا میشه این فونت از فایل مربوطه خوانده شده و Grid با این فونت تنظیم بشه باید چطور عمل کنیم؟
در واقع من احتیاج به یک فانکشن برای تبدیل Grid.Font.Style به یک String دارم. لطفاً راهنمایی کنید.
با تشکر

vcldeveloper
چهارشنبه 13 مهر 1390, 21:44 عصر
حالا اگه بخواهیم Grid.Font.Style رو تبدیل به یک String کنیم و در یک فایل ذخیره کنیم تا بار بعد که برنامه اجرا میشه این فونت از فایل مربوطه خوانده شده و Grid با این فونت تنظیم بشه باید چطور عمل کنیم؟
TFont.Style کلا چهار مقدار داره که می تونید به صورت Boolean یا صفر و یک اونها رو در یک فایل ذخیره کنید. اگر فقط هدفتون ذخیره کردن مقدار Font.Style باشه، این ساده ترین حالتی هست که بخواید استفاده کنید.

راه حل های دیگه هم مثل استفاده از سیستم Streaming دلفی یا RTTI هست، ولی صرفا ذخیره Style یک فونت ارزش این دردسرها رو نداره. اگر بیشتر از Style فونت مد نظرتون هست، اطلاع بدید تا توضیح بدم.

یوسف زالی
چهارشنبه 13 مهر 1390, 21:59 عصر
سلام.
ببینید کلا فونت چند تا خصیصه بیشتر نداره که شما می تونی هرکدوم رو مثلا در یک خط ذخیره کنی.
موقع خوندن هم با شرط گذاشتن استایل رو بازیابی کنی.

Jozef
دوشنبه 01 اسفند 1390, 16:22 عصر
TFont.Style کلا چهار مقدار داره که می تونید به صورت Boolean یا صفر و یک اونها رو در یک فایل ذخیره کنید. اگر فقط هدفتون ذخیره کردن مقدار Font.Style باشه، این ساده ترین حالتی هست که بخواید استفاده کنید.

راه حل های دیگه هم مثل استفاده از سیستم Streaming دلفی یا RTTI هست، ولی صرفا ذخیره Style یک فونت ارزش این دردسرها رو نداره. اگر بیشتر از Style فونت مد نظرتون هست، اطلاع بدید تا توضیح بدم.

با تشکر
میشه در این مورد توضیح بدین؟

یوسف زالی
دوشنبه 01 اسفند 1390, 20:41 عصر
این کد می تونه کمکتون کنه:

var
x: integer;
NewFont: TFont;
begin
x := integer(fsBold in Font.Style)
+integer(fsItalic in Font.Style) * 2
+integer(fsUnderline in Font.Style) * 4
+integer(fsStrikeOut in Font.Style) * 8;
NewFont := TFont.Create;
NewFont.Style := [TFontStyle((x and 8) -5)]
+[TFontStyle((x and 4) -2)]
+[TFontStyle((x and 2) -1)]
+[TFontStyle((x and 1) -1)];
end;