‏نمایش پست‌ها با برچسب Delphi Tips. نمایش همه پست‌ها
‏نمایش پست‌ها با برچسب Delphi Tips. نمایش همه پست‌ها

Migrate a project from Delphi 7 or Delphi XE2 to Delphi XE4

امروز می خواستم یک پروژه که از Delphi 7 به Delphi XE2 ارتقاء داده بودم رو به Delphi XE4 ارتقاء بدم. اما با خطای زیر مواجه شدم :
E2003 Undeclared identifier: ' ShortDateFormat'

خوب اینجور که از سایت شرکت Embarcadero معلوم هست، متغیر هایی مثل ShortDateFormat، DateSeparator، CurrencyString و ... در FormatSettings مجتمع شدن و برای استفاده از اون ها باید به شکل زیر در برنامه نوشته بشن:

FormatSettings.ShortDateFormat := 'dd/MM/yyyy';

اگر هنوز نرم افزارهایی دارید که از Delphi 7 برای برنامه نویسی اون ها استفاده می کنید و اگر در فکر ارتقاء اون ها هستید باید چند نکته رو بدونید:

  • در Delphi 2009 پشیبانی از Unicode به این زبان اضافه شده، و اگر با اون آشنایی ندارید، احتمالا به مشکل بر خواهید خورد. برای اطلاعات بیشتر یا از اینجا White Paper: Delphi and Unicode را دانلود کنید و بخونید و یا بخش اول کتاب Delphi 2009 Handbook رو مطالعه کنید. البته چند لینک مفید هم در آخر معرفی میکنم.
  • اگر از متغیر هایی مثل ShortDateFormat' استفاده می کردید، باید مثل مثال بالا ازشون استفاده کنید.
  • Namespace ها هم به دلفی اضافه شدن. مثلا به جای SysUtils باید و بهتره که بنویسید System.SysUtils و بهتر هست که از این قابلیت در کلاس ها و یونیت های خود استفاده کنید.
  • اگر در شرط هاتون از مجموعه ای از کاراکتر ها (Sets of Characters) استفاده میکردید، به خاطر اینکه قبلا کاراکتر ها Ansi بودن و هر کاراکتر نمایانگر یک بایت بوده میتونستید از شرط زیر استفاده کنید:
if C in ['a'..'z', 'A'..'Z'] then


اما الان چون کاراکتر ها WideChar تعریف شده اند، باید از دستور CharInSet به صورت زیر استفاده کنید:


if CharInSet(C, ['a'..'z', 'A'..'Z']) then

  • و در آخر اگر از کامپوننت های قدیمی استفاده می کنید، به احتمال قوی اون ها از Unicode و توابع جدیدی که به دلفی اضافه شدن، پشتیبانی  نمیکنن و اون ها رو باید ارتقاء بدید.

چند لینک درباره Unicode در دلفی:


\.Chehre

Keyboard layout changes to default when exiting dbgrid - QC

چند وقت وقت پیش سوال و جوابی را با عنوان Keyboard layout changes to default when exiting dbgrid در مورد تغییر Layout وقتی که از کنترل DBGrid خارج میشدیم نوشتم.

لینک های مربوط به موضوع را که امروز پیدا کردم در اینجا قرار میدم.

و در Embarcadero Quality Central:

Keyboard layout changes to default when exiting dbgrid

چند روز پيش يکي از دوستان با من تماس گرفت و سوالي از من کرد.
سوال ايشون اين بود: يک برنامه را مي خواهيم با دلفي 2010 کامپايل کنيم. اين برنامه شامل يک DBGrid و يک کنترل ديگه مثل Edit هستش. حال اگر در زمان اجرا، Layout کيبورد رو عوض کنيم، مثلا به فارسي تغيير بديم و از DBGrid خارج بشيم، Layout کيبورد، هنگام خارج شدن به حالت اولش برمي گرده. حالا چطور ميشه جلوي اين کار رو گرفت.
حالا خود من به اين مشکل برخوردم و به روش زير حلش کردم:
اول به "source\Win32\db" در مسير نصب دلفي بريد، به عنوان مثال
C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\source\Win32\db
فايل DBGrids.pas رو پيدا کنيد و به مسير ديگري کپي کنيد.
در فايلي که کپي کرديد، دنبال پروسيجر "TCustomDBGrid.WMKillFocus" بگرديد. که به صورت زير نوشته شده
procedure TCustomDBGrid.WMKillFocus(var Message: TMessage);
begin
  ImeName := Screen.DefaultIme;
  ImeMode := imDontCare;
  inherited;
  if not ((InplaceEditor <> nil) and
    (HWND(Message.WParam) = InplaceEditor.Handle)) then
    ActivateKeyboardLayout(Screen.DefaultKbLayout, KLF_ACTIVATE);
end;
حالا پروسيجر رو به شکل زير تغيير بديد

procedure TCustomDBGrid.WMKillFocus(var Message: TMessage);
var kblayout: HKL;
begin
  kblayout := GetKeyboardLayout(0);
  ImeName := Screen.DefaultIme;
  ImeMode := imDontCare;
  inherited;
  if not ((InplaceEditor <> nil) and
    (HWND(Message.WParam) = InplaceEditor.Handle)) then
    ActivateKeyboardLayout(kblayout, KLF_ACTIVATE);
end;

حالا بايد اين فايل رو کامپايل کنيد. براي اين کار اين فايل رو در پوشه پروژتون قرار بديد و کل برنامه را Build کنيد.
شاد باشيد.

جستجو