صفحه 1 از 2 12 آخرآخر
نمایش نتایج 1 تا 40 از 63

نام تاپیک: اصلاح کارکترهای "ک"درزمان ورود.

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    اصلاح کارکترهای "ک"درزمان ورود.

    با سلام
    دوستان بنده یک فرم Master ساختم وKeyPreview مربوط به فرم را True کرده ام و در رویداد KeyPress مربوط به آن کد زیر را نوشته ام.

    procedure TMaster.MyEdit2KeyPress(Sender: TObject; var Key: Char);
    begin
    IF Key = #223 then Key := #152;
    IF Key = #236 then Key := #237;
    end;

    حالا همه فرمهای را از کلاس این فرم می سازم.

    TForm1 = class(TMaster)

    حالا هر زمان کاربر کلید"ک" را بزند و کد مربوط #223 باشد به #152 تغییر میکند.
    و اگر کلید "ی" با کد #236 زده بشود به #237 تبدیل می شود.
    حالا بنده دو سوال داشتم.
    1-نظر شما دوستان در رابطه با این کار چی است؟خوب است یا بد و همچنین دلیل خود را بیان کنید.
    2-اگر روشی بهتر و سریععتر از این داریدپیشنهاد کنید.
    منتظر نظرات شما دوستان محترم هستم.

  2. #2
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    روش بهتر کپی پیست کردن کد نوشته شده در رویداد گفته شده است.

  3. #3
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط dkhatibi مشاهده تاپیک
    روش بهتر کپی پیست کردن کد نوشته شده در رویداد گفته شده است.
    ممنون از اینکه نظر خود را اعلام کردید.
    ولی می گویید چرا؟؟؟
    منتظر نظرات شما و دیگر دوستان هستم.

  4. #4
    کاربر جدید
    تاریخ عضویت
    تیر 1385
    محل زندگی
    تهران
    پست
    27

    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, AppEvnts, StdCtrls;

    type
    TForm1 = class(TForm)
    ApplicationEvents1: TApplicationEvents;
    Edit1: TEdit;
    procedure ApplicationEvents1Message(var Msg: tagMSG;
    var Handled: Boolean);
    private
    { Private declarations }
    public
    { Public declarations }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
    var Handled: Boolean);
    begin
    if (Msg.message = WM_CHAR) and (Msg.wParam = 152) then
    begin
    Msg.wParam := 223;
    Handled := False;
    end
    else if (Msg.message = WM_CHAR) and (Msg.wParam = 236) then
    begin
    Msg.wParam := 237;
    Handled := False;
    end;
    end;



  5. #5
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    FSarab جان دستت درد نکنه ولی خط زیر در زمان اجرای برنامه پیغام می دهد و آن را پاک می کند.

    ApplicationEvents1: TApplicationEvents;


    دوستان نظرشان در رابطه با این روش چیست؟
    باز هم من منتظر سایر جوابها و پیشنهاد ها هستم.

  6. #6
    کاربر جدید
    تاریخ عضویت
    تیر 1385
    محل زندگی
    تهران
    پست
    27
    کامپوننت ApplicationEvents را از پلت Additional به فرم اضافه کن و همچنین کامپوننت Edit را از پلت Standard به فرم اضافه کن.

  7. #7
    نقل قول نوشته شده توسط SYNDROME مشاهده تاپیک
    با سلام
    دوستان بنده یک فرم Master ساختم وKeyPreview مربوط به فرم را True کرده ام و در رویداد KeyPress مربوط به آن کد زیر را نوشته ام.
    منتظر نظرات شما دوستان محترم هستم.
    همین روش بهترین روش هست. سایر روشها مشکل دارند.

    نقل قول نوشته شده توسط dkhatibi مشاهده تاپیک
    روش بهتر کپی پیست کردن کد نوشته شده در رویداد گفته شده است.
    این دیگه از اون حرفها بودها !!!!!

  8. #8
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط dkhatibi مشاهده تاپیک
    روش بهتر کپی پیست کردن کد نوشته شده در رویداد گفته شده است.
    این بدترین کاری است که یک برنامه نویس میتونه انجام بده. کد ایشان خیلی مختصر و جمع و جور است، با کپی و پیست فقط مشکلات اضافه میشه.
    به http://en.wikipedia.org/wiki/Inherit...mputer_science)
    نگاه بندازید.

  9. #9
    من نمی دانم چرا بعضی از دوستان عادت کردن همدیگر را مسخره کنند اگر قرار به مسخره کردن هست دیگه فردی که مسخره شده نظر نمی ده و ...
    امید وارم دیگه از این جور مسائل پیش نیاید.

    هر کس برای خودش شخصیتی داره.



    یا حق...

  10. #10
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    با شکر از آقای Ghabil و همه دوستان دیگر.
    نقل قول نوشته شده توسط Arman_1367 مشاهده تاپیک
    من نمی دانم چرا بعضی از دوستان عادت کردن همدیگر را مسخره کنند اگر قرار به مسخره کردن هست دیگه فردی که مسخره شده نظر نمی ده و ...
    امید وارم دیگه از این جور مسائل پیش نیاید.
    هر کس برای خودش شخصیتی داره.
    فکر نکنم دوستان قصد چنین کاری را داشته باشند و با شناختی که بنده از دوستان داریم غیر ممکن است چنین منظوری داشته باشد.
    بهتر است از حاشیه خارج شویم.
    من باز هم متظر نظرات دیگر دوستان هستم.

  11. #11
    کاربر دائمی آواتار Kamyar.Kimiyabeigi
    تاریخ عضویت
    خرداد 1384
    محل زندگی
    تهران
    پست
    1,276
    چرا از kbd استفاده نمیکنین تا Keyboard همه کاربرانتون یکسان بشه در ضمن نیازی هم به کد نویسی نداره.
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar kbd.rar‏ (276.6 کیلوبایت, 514 دیدار)

  12. #12
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط Kamyar.Kimiyabeigi مشاهده تاپیک
    چرا از kbd استفاده نمیکنین تا Keyboard همه کاربرانتون یکسان بشه در ضمن نیازی هم به کد نویسی نداره.
    با تشکر از راهنمایی شما
    قبلا در رابطه با این قضیه بحث شد که اگر نرم افزار دیگری روی سیستم نصب باشد تکلیف چیست؟

  13. #13
    کاربر دائمی آواتار Kamyar.Kimiyabeigi
    تاریخ عضویت
    خرداد 1384
    محل زندگی
    تهران
    پست
    1,276
    نقل قول نوشته شده توسط SYNDROME مشاهده تاپیک
    با سلام

    با تشکر از راهنمایی شما
    قبلا در رابطه با این قضیه بحث شد که اگر نرم افزار دیگری روی سیستم نصب باشد تکلیف چیست؟
    ولی این kbd اصلا" کار غیر استانداردی انجام نمیده برعکس Keyboard را کاملا" استاندارد میکنه. من خودم بشخصه بعنوان کاربر وقتی ببینم که Keyboard ام استاندارد شده ترجیح میدم بقیه نرم افزارهای سیستمم هم براساس همین Keyboard کار کنن.

  14. #14
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط Kamyar.Kimiyabeigi مشاهده تاپیک
    ولی این kbd اصلا" کار غیر استانداردی انجام نمیده برعکس Keyboard را کاملا" استاندارد میکنه. من خودم بشخصه بعنوان کاربر وقتی ببینم که Keyboard ام استاندارد شده ترجیح میدم بقیه نرم افزارهای سیستمم هم براساس همین Keyboard کار کنن.
    روش خوبی است ولی اگر قبلا یک نرم افزار دیگه رو سیستم نصب شده باشد و با صفحه کلید غیر استاندارد اطلاعات را وارد کرده باشد و شما صفحه کلید را تغییر دهید آنگاه تکلیف چیست؟

  15. #15
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط SYNDROME مشاهده تاپیک
    با سلام

    با تشکر از راهنمایی شما
    قبلا در رابطه با این قضیه بحث شد که اگر نرم افزار دیگری روی سیستم نصب باشد تکلیف چیست؟
    بستگی دارد. شما نمیتوانید که تمام مشکلات را حل کنید. آگر این روش کمترین مشکلات را در بر دارد، میتوانید به کاربر اعلام کنید که برایه استفاده از نرم افزاز شما kbd فعال میشود، و برایه غیر فعال کردنش هم بهشان اطلاعت میدید.
    به هر حال در برنامه نویسی همه چیز را نمیشه انجام داد و گاها باید تکالیف را به متخصصش واگذار کرد و اینجوری که من دستگیرم شد برایه این مشکل شما kbd متخصص است.
    این کار استانداردی است از این بابت که برنامه‌هایی هستند که برایه درست کار کردن از برنامه‌ها و یا فریم ورکهایه دیگر بهره مند میشند. به کاربر اطلاع بدید و دردسر خودتان را کم کنید.

  16. #16

    با سلام

    دوستان امید وارم حال همگی شما خوب باشد.
    به نظر من روش آقای ارژنگ بهتر است و با منطق برنامه نویسی شئی گرا بیشتر همخوانی دارد چون یک فیلتر برای اصلاح کارکترهای ورودی هم کار یک برنامه نویس را راحت تر می کند و هم حجم برنامه را کاهش می دهد یک مثال ساده این است که با استفاده از کمپاننت DelphiAssistant شما برای هر فرم باید یک کمپاننت قرار دهید اما با در دست گرفتن پیامهای ارسالی برای برنامه شما فقط یک کمپاننت و فقط یک بار کد نویسی نیاز دارید.در ضمن فرض کنید شما بخواهید از یک فرم که در کمپاننت خاصی طراحی شده و به صورت مستقیم امکان دسترسی به آن را ندارید در برنامه استفاده کنید و باز هم نیاز به اصلاح کارکتر ورودی داشته باشید پس این راه بهتر است.
    در هر صورت این یک کمپاننت ساده هست که امکان فیلتر کردن رویدادهای موشواره و کی بورد ارسالی برای پروژه را به شما می دهد.
    لینک دانلود

  17. #17
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط Arman_1367 مشاهده تاپیک
    دوستان امید وارم حال همگی شما خوب باشد.
    به نظر من روش آقای ارژنگ بهتر است و با منطق برنامه نویسی شئی گرا بیشتر همخوانی دارد چون یک فیلتر برای اصلاح کارکترهای ورودی هم کار یک برنامه نویس را راحت تر می کند و هم حجم برنامه را کاهش می دهد یک مثال ساده این است که با استفاده از کمپاننت DelphiAssistant شما برای هر فرم باید یک کمپاننت قرار دهید اما با در دست گرفتن پیامهای ارسالی برای برنامه شما فقط یک کمپاننت و فقط یک بار کد نویسی نیاز دارید.در ضمن فرض کنید شما بخواهید از یک فرم که در کمپاننت خاصی طراحی شده و به صورت مستقیم امکان دسترسی به آن را ندارید در برنامه استفاده کنید و باز هم نیاز به اصلاح کارکتر ورودی داشته باشید پس این راه بهتر است.
    در هر صورت این یک کمپاننت ساده هست که امکان فیلتر کردن رویدادهای موشواره و کی بورد ارسالی برای پروژه را به شما می دهد.
    لینک دانلود
    آقا آرمان دستت درد نکنه.
    کامپونت را نگاه کردم.خیلی جالب بود.

  18. #18
    کاربر دائمی
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    Iran
    پست
    212
    نقل قول نوشته شده توسط اَرژنگ مشاهده تاپیک
    به هر حال در برنامه نویسی همه چیز را نمیشه انجام داد و گاها باید تکالیف را به متخصصش واگذار کرد و اینجوری که من دستگیرم شد برایه این مشکل شما kbd متخصص است.
    این کار استانداردی است از این بابت که برنامه‌هایی هستند که برایه درست کار کردن از برنامه‌ها و یا فریم ورکهایه دیگر بهره مند میشند. به کاربر اطلاع بدید و دردسر خودتان را کم کنید.
    اگه به این موضوع به عنوان یک روش کلی و اصولی بخواهیم نگاه کنیم، نمی‌تونیم چیزی مثل kbd رو مطرح کنیم.
    چرا بیشتر ما وقتی صحبت از برنامه‌هامون می‌شه اونا رو فقط در یک محدوده چند یا حداکثر چند ده کاربر می‌بینیم؟ به نظر من وقتی یک برنامه اصولی می‌نویسید، باید به بازه‌های بزرگتری فکر کنید. قبول کنید که خیلی سخته که برای تک تک کاربران یک سازمان بزرگ، kbd نصب کنید. حالا اگه برنامه‌تون بخواد روی وب کار کنه که واویلا می‌شه...
    مشکل دیگه اینکه برخی کاربرها هستند که نمی‌تونید به راحتی صفحه کلیدشون رو عوض کنید، حالا یا سلیقه‌ای، یا همانطور که دوستان گفتند به خاطر برنامه‌های دیگشون و یا حتی برخی کاربران که فکر می‌کنند خیلی واردن! اصلا نمی‌ذارن شما به ویندوزشون دست بزنید.!!!
    حتما پیش خودتون فکر می‌کنید که "اگه من به عنوان برنامه‌نویس، اینو اجبار کنم، باید انجام بده". ولی دوستان، در سازمان‌های بزرگ چنین خبرهایی نیست، به راحتی سیستم شما را کنار می‌گذارن.
    به نظر من بهتره کمی علمی‌تر با سوالی که در ابتدا مطرح شده برخورد کنیم.
    موفق باشید.

  19. #19
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط اَرژنگ مشاهده تاپیک
    بستگی دارد. شما نمیتوانید که تمام مشکلات را حل کنید. آگر این روش کمترین مشکلات را در بر دارد، میتوانید به کاربر اعلام کنید که برایه استفاده از نرم افزاز شما kbd فعال میشود، و برایه غیر فعال کردنش هم بهشان اطلاعت میدید.
    به هر حال در برنامه نویسی همه چیز را نمیشه انجام داد و گاها باید تکالیف را به متخصصش واگذار کرد و اینجوری که من دستگیرم شد برایه این مشکل شما kbd متخصص است.
    این کار استانداردی است از این بابت که برنامه‌هایی هستند که برایه درست کار کردن از برنامه‌ها و یا فریم ورکهایه دیگر بهره مند میشند. به کاربر اطلاع بدید و دردسر خودتان را کم کنید.
    با این روش یا بایدسیستم شما نصب باشد یا سیستم شرکت دیگر.
    هر روز هم مشکل تازه ای پیش می آید.

  20. #20

    نقل قول: اصلاح کارکترهای "ک"درزمان ورود.

    باسلام
    فایل kbdfa.dll ضميمه را در شاخه های زیر به ترتیب کپی کنید و سپس پیغامی که ظاهر می شود را cancel کنید
    c:\windows\system32\dllcache
    c:\windows\system32
    سپس سیتم رو reset کنید مشکلتون حل می شه.
    فایل های ضمیمه فایل های ضمیمه

  21. #21
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814

    نقل قول: اصلاح کارکترهای "ک"درزمان ورود.

    نقل قول نوشته شده توسط mah_par2009 مشاهده تاپیک
    باسلام
    فایل kbdfa.dll ضمیمه را در شاخه های زیر به ترتیب کپی کنید و سپس پیغامی که ظاهر می شود را cancel کنید
    c:\windows\system32\dllcache
    c:\windows\system32
    سپس سیتم رو reset کنید مشکلتون حل می شه.
    با سلام
    البته به مشکلات این روش هم قبلاً اشاره شده است.
    موفق باشید

  22. #22
    کاربر دائمی آواتار joker
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    اصفهان
    سن
    42
    پست
    1,326

    نقل قول: اصلاح کارکترهای "ک"درزمان ورود.

    یک مشکلی دارم در این رابطه
    فایلهایی دارم که با حرف ی ساخته شده اند
    با استفاده از سورس زیر لیست فایلها و ساب فولدرها را میگیرم ولی فولدرها یا فایلهایی که حرف ی معمولی توش بکار رفته را تشخیص نمیده ، ولی" ي " اصطلاحا ی نقطه دار( shift +X) را بی مشکل تشخیص میده
    چه پیشنهادی میدین؟ ( دلفی آخرش ورژن موجود هم 7 دارم :) به نظرتون چه کنم که مشکل بشه ؟


    http://www.festra.com/eng/snip04.htm

  23. #23
    کاربر دائمی
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    آنجا سرای ابدی است
    پست
    2,011
    می تونی یک کامپوننت edit برای این منظور بنویسی
    این هم یک راه سخت تر و جالب تر. که از روش اولیه ی خودت باید بهره گیری.

  24. #24
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط dkhatibi مشاهده تاپیک
    می تونی یک کامپوننت edit برای این منظور بنویسی
    این هم یک راه سخت تر و جالب تر. که از روش اولیه ی خودت باید بهره گیری.
    دستت درد نکنه .
    ولی اگر این کار را بکنم باید برای ComboBox و DbGrid و . . . کامپونتهای دیگر هم این کار را بکنم.
    آیا راه حل دیگری سراغ ندارید.

  25. #25
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    با داده‌ها چکار میکنید؟ میریزیدشان به داتابیس؟ اگر که بله، به جایه اینکه ک ها را در قسمت گوئی جایگیزین کنید ، در زمان اینسرت به داتابیس عوض کنید.
    روش FSarab چطور بود؟ به نظر من خوب آمد، از روش FSarab چرا استفاده نمیکنید؟ (امتحانش نکردم ، اگرشما امتحان کردید و به مشکلی برخوردید بگید)

  26. #26
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط اَرژنگ مشاهده تاپیک
    با داده‌ها چکار میکنید؟ میریزیدشان به داتابیس؟ اگر که بله، به جایه اینکه ک ها را در قسمت گوئی جایگیزین کنید ، در زمان اینسرت به داتابیس عوض کنید.
    آن روش کمی سخت است چون هر جا که باید ذخیره و جستجو و . . . انجام دهم باید از تایع فوق استفاده شود.
    با سلام
    نقل قول نوشته شده توسط اَرژنگ مشاهده تاپیک
    روش FSarab چطور بود؟ به نظر من خوب آمد، از روش FSarab چرا استفاده نمیکنید؟ (امتحانش نکردم ، اگرشما امتحان کردید و به مشکلی برخوردید بگید)
    روش فوق را اول امتحان کردم جواب نداد ولی با نکته ای که کاربر عزیز بیان کرد دوباره امتحان می کند.
    با تشکر از توجه شما.

  27. #27
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط SYNDROME مشاهده تاپیک
    با سلام

    آن روش کمی سخت است چون هر جا که باید ذخیره و جستجو و . . . انجام دهم باید از تایع فوق استفاده شود.
    .
    اگر درست برنامه نویسی شده باشه ذاشتن یک فیلتر در لایه داتابیس کار درستی است.
    به جایه اینکه در هر فرم ک ها و ی ها را بخواهند درست کنند، باید یا در یکجا برایه کل اپلیکیشن کار کنه و یا اینکه در یکی از لایه‌هایه داتابیس و یا لایه منطقی برنامه (البته اگر برنامه نویسی لایه‌ای میکنند اگر هم که خیر ، برایه برنامه‌نویسی به روش اسپاگتی دیگر روش بهتر و یا بد تر وجود نداره ).

  28. #28
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط A.Nemati مشاهده تاپیک
    نظرات جالبی ارایه شد ولی به این موضوع نیز فکر کنید.
    در برنامه‌های ما کاربران برای ورود اطلاعات معمولا یا از Edit استفاده می‌کنند یا Memo و در موارد معدودی از Combobox و MaskEdit. و همین نیازهای ما رو پاسخ می‌ده. به نظر من بهتره بجای اینکه ما اورهد این کار رو روی کل فرم بگذاریم و یا کی‌برد رو Hook کنیم، می‌تونیم چهار کلاس پایه کوچولو برای این چهار کامپوننت (تازه اگه هر چهارتاش لازم باشه)، درست کنیم که حروف رو جایگزین کنه (مثل TMaster آقای SYNDROME).
    مزیت این کار زیاده، مثلا:
    1- اورهد بیخودی روی کل سیستم ندارید و فقط ابزار موردی نیازتون اونم در موقع ورود اطلاعات، چک می‌شن.
    2- همین اطلاعات رو توی دیتابیس می‌ریزید و در نتیجه موقع نمایش اطلاعات در هر کامپوننتی (Grid, Label, Edit, ListBox, ...) همونطوری که ذخیره شده می‌بینید.
    3- می‌تونید کم کم این کامپوننتهای پایه خودتون رو توسعه بدید و عملا از یک OO اصولی لذت ببرید.

    موفق باشید.
    با تشکر از اظهار نظر شما دوست بزرگوار.
    نقل قول نوشته شده توسط اَرژنگ مشاهده تاپیک
    اگر درست برنامه نویسی شده باشه ذاشتن یک فیلتر در لایه داتابیس کار درستی است.
    به جایه اینکه در هر فرم ک ها و ی ها را بخواهند درست کنند، باید یا در یکجا برایه کل اپلیکیشن کار کنه و یا اینکه در یکی از لایه‌هایه داتابیس و یا لایه منطقی برنامه (البته اگر برنامه نویسی لایه‌ای میکنند اگر هم که خیر ، برایه برنامه‌نویسی به روش اسپاگتی دیگر روش بهتر و یا بد تر وجود نداره ).
    ولی دوست گرامی روشی که بنده گفتم و دیگر دوستان نیز گفتند راحت است چون فقط در اول فرم می نویسی TForm2 = class(TForm_Master) و خیلی راحت است.
    ولی باز هم از نظر شما متشکرم.
    کاربر محترم DelphiAssistant من منتظر توضیحات شما هستم.
    ممنون می شوم اگر در رابطه با تابعی که نوشتید توضیح بدهید.
    با تشکر فراوان

  29. #29
    کاربر جدید
    تاریخ عضویت
    تیر 1385
    محل زندگی
    تهران
    پست
    27

    یک تغییر کوچیک در کامپوننت آقای کرامتی


    unit uFarsiFixer;
    interface
    uses
    Forms,
    Controls,
    SysUtils,
    Dialogs,
    Classes;
    type
    TFarsiKeyboardHook = class(TComponent)
    private
    parentKeyPress: TKeyPressEvent;
    procedure myKeyPress(Sender: TObject; var Key: Char);
    protected
    { Protected declarations }
    public
    constructor Create(AOwner: TComponent); override;
    published
    { Published declarations }
    end;
    procedure Register;
    implementation
    procedure Register;
    begin
    RegisterComponents('Barnamenevis.org', [TFarsiKeyboardHook]);
    end;
    { TFarsiKeyboardHook }
    constructor TFarsiKeyboardHook.Create(AOwner: TComponent);
    begin
    inherited;
    if AOwner is TForm then
    begin
    parentKeyPress := TForm(Owner).OnKeyPress;
    TForm(Owner).OnKeyPress := myKeyPress;
    TForm(Owner).KeyPreview := True;
    end;
    end;
    procedure TFarsiKeyboardHook.myKeyPress(Sender: TObject; var Key: Char);
    begin
    if Key = #152 then Key := #223;
    if Key = #236 then Key := #237;
    if Assigned(parentKeyPress) then
    parentKeyPress(Sender, Key);
    end;
    end.

  30. #30
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط SYNDROME مشاهده تاپیک
    با سلام

    ولی دوست گرامی روشی که بنده گفتم و دیگر دوستان نیز گفتند راحت است چون فقط در اول فرم می نویسی TForm2 = class(TForm_Master) و خیلی راحت است.
    ولی باز هم از نظر شما متشکرم.
    راحتی در برنامه‌نویسی۲ جور است.
    ۱ـ با یک هک که فعلا برنامه کار کند.
    ۲ـ استفاده از اصولی که در دراز مدت توسعه برنامه و نگهداریش راحت باشد٫

    این روش که شما گفتید و دیگر دوستان نیز گفتند راحتیش به این است الان با یک خط از یک لحاظ این مشکل را برطرف کرده ولی به مشکلات دیگری که میانجمد فکر کنید:
    ۱ـمنطق برنامه را به گوئی گره میزنه (این همیشه در دراز مدت مشکل ایجاد میکنه)
    ۲ـ اگر کسی مستقیما داتا را به داتابیس وارد کند(چه دستی و یا با یک برنامه دیگر) این روش ک ها را درست نمیکنه
    ۳- تمام فرمهایه پروجکت باید از TForm_Master باید به ارث ببرند. دلیل این ارث بردن به این که منطق برنامه را که مرتبط به نگهداری داده در داتابیس است را داشته باشند به رفتار فرم گره میزنه. حالا اینکه طرض رفتار فرمها عوض شده به سختی استفاده کردن از فرم اضافه میکند، البته نه الان که تازه است و کد دیگری نیست ولی با گذاشتن زمان و اضافه شدن کد احتمالش بیشتر میشه. وقتی هم که مشکلات ایجاد میشه به دلیل وجود داشتن کد در جائی که نیاز نبود (یعنی اینکه یک روش حل اشتباه در دراز مدت بیشتر ناراحتی بوجود میاره ).

    حالا اگر برنامه قرار نبود که داده ها را به داتابیس بریزه و فقط کاراکترها را ک شان را عوض کند، این روش حرف نداشت. ولی این برنامه به احتمال زیاد در آینده گسترش خواهد یافت. اگر مشکل را الان به شکل صحیح درست نکنید با گذشت زمان فقط سختر میشه.

    در ضمن اینها نظر من نیست، هر کتاب شروع برنامه نویسی همین را میگد و فقط من بازگو کردم.
    مشکل شما در حقیقت فقط اصلاح کارکترهایه ک در زمان ورود نیست، بله دلایل و عواقب اینکار در قسمتهایه دیگر برنامه اثر میگذارند. با داشتن راه حلی که عواقب اینکار را فقط به یک قسمت کوچکی از برنامه محدود میکنند در دراز مدت خیلی راحتتر خواهد بود تا استفاده از TForm2 = class(TForm_Master).

    اما اگر این برنامه قرار نیست گسترش پیدا کند و از این حالتی که الان وجود داره تغییر نخواهد کرد (و الان هم کار میکند) در آن سورت از TForm2 = class(TForm_Master) استفاده کنید و هرچی که بالا گفتم ر افراموش کنید.

  31. #31
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    با اجازه کاربر DelphiAssistant من کامژونت ایشان را کمی تغییر دادم(در حالت قبل کار نمی کرد)

    unit Unit_FarsiFixer;
    interface
    uses
    Forms,
    Controls,
    SysUtils,
    Dialogs,
    Classes;
    type
    TFarsiKeyboardHook = class(TComponent)
    private
    parentKeyPress: TKeyPressEvent;
    procedure myKeyPress(Sender: TObject; var Key: Char);
    protected
    { Protected declarations }
    public
    constructor Create(AOwner: TComponent); override;
    published
    { Published declarations }
    end;
    procedure Register;
    implementation
    procedure Register;
    begin
    RegisterComponents('Barnamenevis.org', [TFarsiKeyboardHook]);
    end;
    { TFarsiKeyboardHook }
    constructor TFarsiKeyboardHook.Create(AOwner: TComponent);
    begin
    inherited;
    IF AOwner is TForm then
    begin
    parentKeyPress := TForm(Owner).OnKeyPress;
    TForm(Owner).OnKeyPress := myKeyPress;
    TForm(Owner).KeyPreview := true;
    end;
    end;
    procedure TFarsiKeyboardHook.myKeyPress(Sender: TObject; var Key: Char);
    begin
    if Key = #223 then Key := #152;
    if Key = #236 then Key := #237;
    if Assigned(parentKeyPress) then
    parentKeyPress(Sender, Key);
    end;
    end.

    امیدوارم از کار بنده ناراحت نشده باشید.
    این کامپونت را تست کردم درست جواب داد.
    با تشکر فراوان.

  32. #32
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379
    بنظر من بهتره یک کامپوننت بنویسید که رویداد OnKeyDown فرم Parent را Hook کند و پس از اجرای پروسه تعویض کد کلید فشرده شده، رویداد مذکور در فرم Parent را فراخوانی کند که ضرری به روند اجرای برنامه وارد نشود. اگر توضیحات کافی نبود میتوانم کامپوننت را برایتان بنویسم.

  33. #33
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط DelphiAssistant مشاهده تاپیک
    بنظر من بهتره یک کامپوننت بنویسید که رویداد OnKeyDown فرم Parent را Hook کند و پس از اجرای پروسه تعویض کد کلید فشرده شده، رویداد مذکور در فرم Parent را فراخوانی کند که ضرری به روند اجرای برنامه وارد نشود. اگر توضیحات کافی نبود میتوانم کامپوننت را برایتان بنویسم.
    دست شما دوست عزیز درد نکنه.
    منظورتان دقیقا همین روشی هست که خودم در اول تاپیک پیشنهاد دادم.
    اگر امکان دارد بیشتر توضیح دهید.
    با تشکر

  34. #34
    بنیان گذار Barnamenevis آواتار مهدی کرامتی
    تاریخ عضویت
    اسفند 1381
    محل زندگی
    کرج، گلشهر
    سن
    46
    پست
    6,379
    منظورم دقیقا چنین چیزی بود:

    unit uFarsiFixer;

    interface

    uses
    Forms,
    Controls,
    SysUtils,
    Dialogs,
    Classes;

    type
    TFarsiKeyboardHook = class(TComponent)
    private
    parentKeyDown: TKeyEvent;
    procedure myKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    protected
    { Protected declarations }
    public
    constructor Create(AOwner: TComponent); override;
    published
    { Published declarations }
    end;

    procedure Register;

    implementation

    procedure Register;
    begin
    RegisterComponents('Barnamenevis.org', [TFarsiKeyboardHook]);
    end;

    { TFarsiKeyboardHook }

    constructor TFarsiKeyboardHook.Create(AOwner: TComponent);
    begin
    inherited;
    if AOwner is TForm then
    begin
    parentKeyDown := TForm(Owner).OnKeyDown;
    TForm(Owner).OnKeyDown := myKeyDown;
    TForm(Owner).KeyPreview := true;
    end;
    end;

    procedure TFarsiKeyboardHook.myKeyDown(Sender: TObject; var Key: Word;
    Shift: TShiftState);
    begin
    if Key = 223 then Key := 152;
    if Key = 236 then Key := 237;
    if Assigned(parentKeyDown) then
    parentKeyDown(Sender, Key, Shift);

    end;

    end.



    فکر میکنم کد فوق اونقدر ساده هست که نیازی به توضیح نداشته باشه، اما بهرحال اگر نیاز هست بفرمائید تا توضیح بدم.

  35. #35
    به نظر شما آیا این روش بهتره که KeyPreview فرم فعال کنیم می دانید اگر مثلاً 10 تا panel روی هم باشد برای آنکه خود کنترل کلید را برای فرم بفرستد باید یک حلقه را طی کند و بالآخره این یک مقدار زمان هر چند اندک می گیرد بعد می گن دلفی زبان کندی همینه دیگه البته من قبول دارم همه شما تجربه بیشتری دارید اما تمام برنامه نویسی این نیست که کد بی نقصی باشه باید علاوه بر آن از بهترین روش هم استفاده بشه تا برنامه سریع هم باشه.

  36. #36
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    با تشکر فراوان از کاربر گرامی DelphiAssistant.
    واقعا بنده را شما و دیگر دوستان شرمنده کردید.
    دستورا شما را در یک Unit نوشتم و برنامه اجرا شد.ولی 2 تا مشکل دارم.
    1-اگر امکان داشت دستورات را تا حدودی برام توضیح دهید.(البته گیرایی بنده پایین است )
    2-و نحوه فعال شدن تابع زیر را نیز توضیح دهید.
    منتظر جواب شما هستم.
    با تشکر

  37. #37
    کاربر دائمی آواتار Hamid_PaK
    تاریخ عضویت
    تیر 1384
    محل زندگی
    تهران
    پست
    1,125
    روش آرمان خوب بود ولی کاش دیگه یه روال جدا واسه WndProc درست نمی کرد و همون رو Override می کرد ...

    یا حق ...

  38. #38
    بازهم میگم بنظر من روش خودت از همه روشهایی که اینجا مطرح شده (بجز مورد ساختن کامپوننت که تقریبا یکی هستند) روش بهتری به دلایل مختلف که از همه مهمترشون اینه که یک ساختار درست Object Oriented هست نه Spaghetti Oriented ;)

  39. #39
    کاربر دائمی آواتار SYNDROME
    تاریخ عضویت
    فروردین 1386
    محل زندگی
    تهران
    پست
    2,814
    با سلام
    نقل قول نوشته شده توسط ghabil مشاهده تاپیک
    بازهم میگم بنظر من روش خودت از همه روشهایی که اینجا مطرح شده (بجز مورد ساختن کامپوننت که تقریبا یکی هستند) روش بهتری به دلایل مختلف که از همه مهمترشون اینه که یک ساختار درست Object Oriented هست نه Spaghetti Oriented ;)
    با تشکر از Ghabil عزیر که باز هم نظر خود را بیان کرد.
    علیرضا جان ما برنامه نویسان باید یاد بگیریم همیشه گوش شنوا داشته باشیم تا بتوانیم قویتر از قبل شویم.
    هدف بنده از ایجاد این تاپیک 2 پیز بود:
    1-رفع مشکل خودم.
    2-بعد از بحث با دوستان دیگر به یک روش مناسب برسیم و روش پیشنهادی را تحلیل و ضعف و حسن آنها را بیان کنیم.
    دوستان لطف کردند و در این بحث شرکد کردند و واقعا بنده را مورد لطف خود قرار دادند.
    بنده امیدوار در پایان این تاپیک به یک جمع بندی خوب برسیم.
    با تشکر از همه دوستان که نظرتان خود را بیان کردند و باز هم منتظر نظرات بقیه کاربران هستیم .

  40. #40
    کاربر دائمی آواتار اَرژنگ
    تاریخ عضویت
    آبان 1384
    محل زندگی
    arjang8000@gmail.com
    پست
    2,736
    نقل قول نوشته شده توسط ghabil مشاهده تاپیک
    بازهم میگم بنظر من روش خودت از همه روشهایی که اینجا مطرح شده (بجز مورد ساختن کامپوننت که تقریبا یکی هستند) روش بهتری به دلایل مختلف که از همه مهمترشون اینه که یک ساختار درست Object Oriented هست نه Spaghetti Oriented ;)
    Object Oriented به تنهایی هیچ فایده‌ای نداره، استفاده از طراحی‌هایه درست پله بعد است.
    در ضمن یک بالانسی باید بین مشکلاتی که یک روش حل میکند و مشکلات دیگری که بوجود میاره باشد. در این بحث ما حتی دلیل اینکار را نپرسیده نمیتونیم نظر بدیم.
    نوشتن برنامه هایی که از اسپاگتی کد استفاده میکنند و کاملا هم Object Oriented هستند خیلی آسان است.
    مثال:
    در باتن کلیکها کد نوشتن، همینطوری ساختن رشته‌هایه اس‌کیو‌ال با استفاده از تکستهایه ادیت‌باکسها و ...
    Object Oriented مثل یک چاقو میماند، میشه باهاش هم جراحی کرد و هم قصابی ، روش استفاده هم مهمه، چونکه بعضا قصابی هم لازمه.

صفحه 1 از 2 12 آخرآخر

تاپیک های مشابه

  1. str_replace , ereg_replace برای "n\" و "r\" و " "
    نوشته شده توسط sweb در بخش PHP
    پاسخ: 1
    آخرین پست: یک شنبه 29 بهمن 1385, 16:30 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •