ویژگی های کار با رابط در دلفی. توصیه هایی برای ایجاد رابط کاربر در دلفی همان فاصله بین عناصر کنترل

این مقاله بر اساس مسائل مربوط به انجمن ها است: "چگونه می توانم خط از DLL را بازگردانم"، "چگونه انتقال و بازگرداندن مجموعه ای از سوابق؟"، "نحوه انتقال به فرم DLL؟"

به منظور اینکه شما نیمی از زندگی را صرف نکنید - در این مقاله همه چیز را بر روی مناظر قرار می دهم.

موضوعات این مقاله در درجه های مختلف بارها و بارها این وبلاگ را تحت تأثیر قرار داده اند، اما در این مقاله آنها در یک دسته جمع آوری شده اند، توجیه داده می شود. به طور خلاصه، اشاره به این مقاله را می توان در کسانی که DLL را توسعه می دهند پرتاب می شود.

یادداشت مهم: مقاله باید بخواند توالی. نمونه هایی از کد فقط به عنوان داده می شود مثال ها، در هر مرحله (پاراگراف) مقاله، کد نمونه ها با جزئیات جدید اضافه شده است. به عنوان مثال، در ابتدای مقاله، هیچ روش خطا، روش های کلاسیک (مانند، با استفاده از GetLastterror، SDTCALL، و غیره) وجود ندارد، که در طول مقاله با کافی جایگزین می شود. به همین دلیل ساخته شده است که طرح های "جدید" ("غیر معمول") طرح ها را مطرح نکردند. در غیر این صورت، زمانی که من مجبور شدم یک یادداشت از گونه را به هر مثال وارد کنم: "این در آن نقطه مورد بحث قرار می گیرد، اما این چیست. در هر صورت، در پایان مقاله یک پیوند به کد آماده شده وجود دارد که در کل آنچه که در مقاله گفته شده است نوشته شده است. شما فقط می توانید آن را مصرف کنید و استفاده کنید. و مقاله توضیح می دهد که چرا و چرا. اگر شما علاقه مند به "چرا و چرا"، برگ در پایان به نتیجه گیری و لینک برای دانلود مثال.

برنامه نویسی شی گرا (OOP)، علاوه بر مفهوم کلاس، همچنین برای مفهوم اساسی رابط فراهم می کند.

رابط کاربری و ویژگی های کار با او در زبان چیست؟ برنامه نویسی دلفی.?

رابط یک طراحی معنایی و نحوی در کد برنامه است که برای مشخص کردن خدمات ارائه شده توسط کلاس یا جزء (ویکی پدیا) مورد استفاده قرار می گیرد.

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

اغلب، رابط ها با کلاسهای انتزاعی مقایسه می شوند، اما با تمام شباهت، این مقایسه کاملا درست نیست. در کلاس های انتزاعی در دسترس، حداقل، مدیریت دید از اعضا. در عین حال، رابط های منطقه دید قابل مشاهده نیست.

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

برای اعلام رابط در دلفی، رابط کلمه کلیدی را به کار می گیرد. این همان کلمه کلیدی است که بخش ماژول را تعریف می کند که ممکن است با خارج از آن تماس بگیرد (بین کلمات کلیدی داخلی و بی نظیر). با این حال، هنگامی که یک رابط اعلام می شود، یک نحو دیگر استفاده می شود، شبیه به کلاس های طبقه بندی شده است.

دلفی / پاسکال

iMynewInterface \u003d رابط رابط رابط؛ پایان؛

ImynewInterface \u003d رابط کاربری.

روش رابط کاربری؛

پایان؛

بنابراین، نحو از اعلامیه رابط خود، تفاوت های اساسی را از دیگر زبان های برنامه نویسی ندارد (ویژگی های پاسکال بر اساس پاسکال شمارش نمی شود). در عین حال، پیاده سازی رابط ها دارای تعدادی از ویژگی های مشخصه است.

واقعیت این است که رابط های دلفی در ابتدا برای پشتیبانی از تکنولوژی COM وارد شدند. بنابراین، رابط Iinterface، که در دلفی یک اجداد برای همه رابط های دیگر است (نوعی از آنالوگ Tobject)، در حال حاضر شامل سه روش اساسی برای کار با این تکنولوژی است: QueryInterface، _Addref، _Release. به عنوان یک نتیجه، اگر کلاس هر رابط را اجرا کند، باید برای اجرای این روش ها اجرا شود. حتی اگر این کلاس برای کار COM طراحی نشده باشد.

با توجه به این ویژگی رابط Iinterface، در دلفی، استفاده از رابط ها، در اکثر موارد، منجر به افزودن قابلیت های غیر استفاده شده به کلاس می شود.

یک کلاس کتابخانه TinterfaceObject وجود دارد که در حال حاضر شامل اجرای این روش ها است و در حالی که وراثت از آن، نیاز به پیاده سازی آنها به طور مستقل ناپدید می شود. اما از آنجایی که دلفی از ارث چند کلاسها پشتیبانی نمی کند، استفاده از آن اغلب تنها باعث مشکلات اضافی در طراحی و اجرای عملکردی مورد نیاز می شود.

همه اینها به این واقعیت منجر شد که علیرغم تمام امکانات ارائه شده توسط رابط ها، کاربرد عملی آنها در دلفی تقریبا فراتر از کار با کام نیست.

بهینه سازی شده برای کار به طور عمده با این تکنولوژی، رابط، و قابلیت های دقیق تر و محدودیت های معماری، هنگام حل وظایف دیگر، خودتان را توجیه نکنید.

بنابراین، بسیاری از برنامه نویسان دلفی هنوز در واقع یک ابزار قدرتمند و انعطاف پذیر برای توسعه معماری برنامه هستند.

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

این مقاله برای باز کردن رابط های دلفی اختصاص داده شده و یک مرور کلی از قابلیت های آنها است. دلفی شش رابط باز را تعریف می کند: رابط ابزار، رابط طراحی، رابط کاربری، رابط کاربری، رابط فایل، رابط کاربری ویرایش و رابط کنترل نسخه. بعید است که، به عنوان بخشی از این مقاله، ما توانستیم جزئیات را برجسته کنیم و امکانات هر یک از آنها را نشان دهیم. متون منبع دلفی به طور کامل به شما کمک می کند تا به شما کمک کند، مزیت توسعه دهندگان آنها را با نظرات مستقر ارائه می دهد. اطلاعیه های کلاس هایی که رابط های باز را نشان می دهند در ماژول های مربوطه در دایرکتوری موجود ... \\ Delphi \\ Source \\ ToolsApi. رابط طراحی (Dsgntf.pas Module) ابزارهایی را برای ایجاد ویراستاران املاک و ویراستاران مولفه فراهم می کند.

ویراستاران و اجزای املاک یک موضوع ارزشمند از یک مکالمه جداگانه هستند، بنابراین ما فقط به شما یادآوری می کنیم که ویرایشگر اموال، رفتار بازرس شی را کنترل می کند، در تلاش برای تغییر ارزش اموال مربوطه، و ویرایشگر جزء زمانی فعال می شود دوبار فشار داده شده دکمه سمت چپ ماوس بر روی تصویر قرار داده شده در فرم جزء. رابط کنترل نسخه (ماژول vcsintf.pas) برای ایجاد سیستم های کنترل نسخه طراحی شده است. با شروع از نسخه 2.0، دلفی از یک سیستم کنترل یکپارچه سیستم برای PVC های Intersolv پشتیبانی می کند، بنابراین در اغلب موارد نیازی به توسعه سیستم خود نیست. به همین دلیل، بررسی رابط کنترل نسخه نیز حذف شده است. رابط فایل (fileintf.pas module) به شما امکان می دهد تا سیستم فایل کار IDE را لغو کنید، که باعث می شود که روش ذخیره سازی فایل خود را انتخاب کنید (به عنوان مثال، در فیلدهای یادداشت در سرور پایگاه داده). رابط رابط (EditIntf.pas Module) دسترسی به بافر متن منبع را فراهم می کند، که به شما اجازه می دهد تا کد را تجزیه و تحلیل کنید و آن را اجرا کنید، برای تعیین و تغییر موقعیت مکان نما در پنجره ویرایشگر کد، و همچنین مدیریت نحوی متن متن را مدیریت کنید .

کلاس های ویژه رابط ها را به اجزای تشکیل شده در فرم (تعیین نوع جزء، دریافت منابع به اجزای والدین و کودک، دسترسی به خواص، انتقال فوکوس، حذف، و غیره)، به بیشترین فرم و به فایل منابع پروژه ارائه می دهد. رابط ویرایش اجازه می دهد تا شما را به شناسایی به اصطلاح به اصطلاح مدولار که واکنش به حوادث مانند تغییر متن منبع ماژول، تغییر شکل، تغییر نام جزء، صرفه جویی، تغییر نام یا حذف ماژول، تغییر فایل پروژه منابع، تغییر شکل پروژه، تغییر شکل، تغییر شکل، تغییر نام، تغییر شکل، تغییر نام، تغییر شکل، تغییر شکل، تغییر شکل، تغییر نام جزء، تغییر نام، تغییر شکل، تغییر شکل، تغییر نام و حذف ماژول . رابط ابزار (ماژول Toolintf PAS) ابزارهای توسعه دهندگان را برای به دست آوردن اطلاعات کلی در مورد وضعیت IDE فراهم می کند و چنین اقداماتی نظیر باز کردن، صرفه جویی و پروژه های بسته شدن را انجام می دهد فایل های فردی، ایجاد یک ماژول، دریافت اطلاعات در مورد پروژه فعلی (تعداد ماژول ها و فرم ها، نام آنها، و غیره)، ثبت نام سیستم فایل، سازمان رابط کاربری به ماژول های فردی و غیره علاوه بر اطلاعیه های مدولار رابط ابزار، آن را تعریف می کند که افزونه های افزودنی را که چنین رویدادی را به عنوان فایل های باز / بسته بندی و پروژه ها، دانلود و ذخیره فایل های دسکتاپ پروژه، اضافه کردن / حذف ماژول های پروژه، بسته های نصب / دژنراسیون، تدوین پروژه، تدوین پروژه، را اضافه / حذف می کند تفاوت از کتاب های افزودنی مدولار به شما اجازه می دهد تا اعدام رویدادهای خاص را لغو کنید.

علاوه بر این، رابط ابزار دسترسی به منوی اصلی IDE Delphi را فراهم می کند، به شما این امکان را می دهد که اقلام اضافی را جاسازی کنید. رابط کارشناس (Exptintf.pas Module) پایه ای برای ایجاد کارشناسان است - ماژول های نرم افزاری تعبیه شده در IDE برای گسترش قابلیت های آن. به عنوان مثال از متخصص، شما می توانید در پایگاه داده پایگاه داده Delphi که تولید فرم فرم برای مشاهده و تغییر محتویات جدول پایگاه داده را به ارمغان می آورد. پس از تعیین کلاس متخصص، لازم است مراقب باشید که دلفی "آموخته" درباره متخصص ما. برای انجام این کار، با گذراندن آن به عنوان نمونه ای از یک کلاس متخصص، باید با استفاده از روش ثبت نام ثبت نام ثبت نام ثبت نام کنید. به عنوان یک تصویر، ما یک متخصص ساده Esstandard را ایجاد خواهیم کرد، که هنگام انتخاب آیتم منو دلفی که مربوط به آن است، پیامی را که در حال اجرا است، نمایش می دهد. همانطور که می توان از جدول بالا دیده می شود، سبک Esstandard متعادل به همپوشانی شش روش است:

به منظور کارشناس "فعال"، شما باید آیتم منو کامپوننت / نصب را انتخاب کنید، یک ماژول را در گفتگوی مرورگر انتخاب کنید، شامل یک متخصص (در مورد ما exmpl_01.pas)، روی OK کلیک کنید، و پس از کامپایل DCLUSR30 .DPK بسته در منوی اصلی، بخش دلفی در بخش راهنما باید مورد کارشناس ساده 1، زمانی که شما پیام اطلاعاتی را انتخاب کنید "متخصص استاندارد شروع شد!". چرا دلفی یک مورد منوی کارشناس را در بخش راهنما قرار می دهد، یک رمز و راز باقی می ماند. اگر دوست ندارید که آیتم منو به نظر می رسد که در آن شما دلفی را می خواهید، و نه در جایی که می خواهید، گزینه زیر امکان پذیر است: ایجاد یک متخصص سبک افزودنی، که باعث ایجاد خودکار آیتم منو و منوی Add Manue را حذف می کند مورد با استفاده از رابط ابزار. این به شما این امکان را می دهد که موقعیت مکانی جدید را در منوی اصلی به طور تصادفی تنظیم کنید.

برای اضافه کردن آیتم منو، کلاس Titoolservices استفاده می شود - رابط ابزار پایه - و کلاس های Timainmenuintf، TimenuitEmintf، پیاده سازی رابط ها به منوی اصلی IDE و موارد آن. کلاس TitoolServices کلاس Titoolservices نمونه توسط IDE خود را هنگامی که آن را آغاز شده است ایجاد شده است. لطفا توجه داشته باشید که مسئولیت انتشار رابط ها به منوی اصلی دلفی و اقلام آن بر توسعهدهنده می افتد. از لحاظ راه، بار عملکردی متخصص کمی پیچیده است: هنگامی که آیتم منو خود را فعال می کنید، یک گواهی در مورد نام پروژه باز می شود این لحظه در روز چهارشنبه: در این مثال، تابع AddidididididideMenuiem برگزار می شود، که آیتم منو را به منوی اصلی IDE دلفی تمرین می کند. به عنوان پارامترها، آن را به متن آیتم منو جدید، شناسه آن، شناسه مورد، قبل از آن که مورد جدید وارد شده، ارائه کلید از کلید، که، همراه با کلید CTRL، می تواند به سرعت استفاده شود منتقل می شود دسترسی به مورد جدید، و رویداد دستیار مربوط به انتخاب یک آیتم جدید. ما یک آیتم جدید منو را به قسمت نمایش در مقابل آیتم ساعت اضافه کردیم.

حالا بیایید با اطلاعیه ها آشنا شویم. ما تعمیم افزودنی را تعریف می کنیم، لحظات پیگیری پروژه های بسته شدن / باز کردن و اصلاح زمینه را بر اساس آن تعریف می کنیم که نام پروژه فعال را ذخیره می کند (پیاده سازی روش هایی که تغییرات را در مقایسه با مثال TPRED انجام نمی دهند، برای کوتاه بودن به پایین تر): به پیاده سازی یک اعلان، ما کلاس taddinnnotifier را تعریف کردیم، که یک تیادی ناتوان کننده نسل است و روش filenotification را مسدود کرده است. IDE این روش را هر بار که یک رویداد اتفاق می افتد، این روش را فراخوانی می کند، که قادر به واکنش به آگهی آگهی می شود (هر کدام از این رویداد با نوع ثابت TFILENTFICIFICIFICTIFICATIFICATIFICTIFICE نشان داده می شود). میدان کارشناس در کلاس Taddinnotifier برای بازخورد با یک متخصص (روش taddinnotfier.filentification). در مخرب متخصص، ثبت نام یک اعلان حذف شده است، و اطلاعیه تخریب شده است. و اکنون ما استفاده از عدم اطلاعیه های مدولار را نشان خواهیم داد. اجازه دهید یک متخصص افزودنی ایجاد کنیم که پیام های مربوط به صرفه جویی در یک فایل پروژه را حل می کند (اجرای روش های آشنا در حال حاضر برای کوتاه بودن ذکر نشده است): در این مثال، افزونه های افزودنی، رویدادهایی را که با باز کردن / بسته شدن مواجه می شوند، نظارت می کنند از پروژه ها.

هر بار که پروژه کشف شده است، یک اطلاعیه مدولار مربوط به فایل پروژه ثبت شده است. از لحاظ پیاده سازی، تاثیرگذاران مدولار شبیه به کتاب های افزودنی هستند: ما کلاس TModulenotifier را تعریف می کنیم، که یک نسل از Timodulenotifier است و با روش های اطلاع رسانی و کامپوننت آن همپوشانی دارد. IDE روش اطلاع رسانی را هنگامی که رویدادهای خاص مربوط به این ماژول رخ می دهد، می نامد؛ در داخل این روش، واکنش به یک رویداد خاص تعیین می شود. روش componentrenamed هنگام تغییر نام جزء دروغین در فرم ماژول نامیده می شود. لطفا توجه داشته باشید که ما از این روش استفاده نمی کنیم، اما آنها باید آن را مسدود کنند، در غیر این صورت هنگام تغییر نام جزء با یک روش کلاس پایه انتزاعی به چالش کشیده می شود که منجر به پیامدهای غیر قابل پیش بینی می شود.

ثبت نام یک یادداشت مدولار یک فرآیند تا حدودی پیچیده تر در مقایسه با ثبت نام افزودنی از اعلان است: ابتدا ما رابط ماژول (Timoduleinterface) را دریافت می کنیم، و سپس با استفاده از رابط ماژول، یک یادداشت را ثبت کنید. هنگامی که پروژه بسته شده است، ثبت نام یک اعلان مدولار حذف می شود (دوباره با استفاده از TimoduleInterface) حذف می شود و اطلاعیه تخریب شده است. در نتیجه، ما نشان خواهیم داد که چگونه می توانید موقعیت مکان نما را در پنجره ویرایشگر کد تعریف کنید. یک متخصص ایجاد کنید که هنگام انتخاب آیتم منو مناسب، یک پیام حاوی نام فایل فعال و موقعیت مکان نما در آن داده می شود (فقط برای این نمونه ها قابل توجه است): برای تعیین موقعیت مکان نما، ما باید توالی رابط زیر را بدست آوریم: رابط مدولار (Timoduleinterface)؛ کد ویرایشگر کد (TieditorInterface)؛ رابط نمایندگی ماژول در پنجره ویرایشگر (TieditView).

اگر، هنگامی که آیتم منوی کارشناس را انتخاب می کنید، فایل منبع فعال است (* .pas)، سپس یک پیام حاوی نام فایل فعال و موقعیت فعلی مکان نما در آن صادر می شود. اگر فعال یک فایل PAS نیست، پیام صادر نمی شود. برای به دست آوردن نام فایل فعال، از روش GetCurrentFile کلاس Titoolservices استفاده کنید. در این راستا، توجه به راه های استفاده از رابط های باز. CD-ROM شامل متون منبع تمام نمونه های داده شده است. CD-ROM همچنین شامل یک نمونه پیچیده تر و دقیق تر حاوی متخصص افزودنی است که اجازه می دهد تا کاربر را به بوک مارک ها در متن منبع ماژول های دلفی. خلاصه نصب و استفاده از بوک مارک های متخصص در فایل BKMRKS97.HTM موجود است. بنابراین، در این مقاله، رابط های باز به طور کلی در نظر گرفته می شود و نمونه هایی از استفاده آنها داده می شود. یک بار دیگر ما تکرار می کنیم: به لطف حضور متون منبع از رابط های باز، شما به راحتی می توانید جزئیات مورد علاقه خود را درک کنید. ما امیدواریم که تنوع فرصت های ارائه شده توسط رابط های باز، شما هیچ ایده ای جسورانه و مفید ندارید.

این مقاله از لحاظ تجزیه و تحلیل برنامه های نوشته شده توسط توسعه دهندگان جوان گروه ما نوشته شده است.

به درستی دنباله ای از اجزای سوئیچینگ را تنظیم کنید

بسیاری از کاربران، به ویژه کسانی که قبلا در DOS کار کرده اند، عادت دارند تا بین فیلدهای ورودی را با ماوس تغییر دهند، اما با استفاده از صفحه کلید با کلید Tab. علاوه بر این، بسیار سریعتر از برجسته کردن هر فیلد ماوس است. بنابراین، روش برای تعویض اجزای باید به درستی نمایش داده شود. این مربوط به اجزای موجود در تمام اجزای کانتینر (پانل ها، گروه های گروهی، و آنها مشابه) و اجزای کانتینر خود هستند، اگر چندین مورد وجود داشته باشد.

روش برای سوئیچینگ اجزای داخل ظرف توسط ویژگی Taborder تنظیم شده است. اولین عنصر فعال می شود، که در آن Taborder برابر با 0، دوم از 1، و غیره است، تا زمانی که تمام اجزای منتقل شوند. علاوه بر این، جزء دارای یک اموال TABSTOP است که نشان می دهد که آیا در هنگام تغییر کلید برگه فوکوس را دریافت خواهید کرد. اگر شما نیاز به تعویض به هر جزء ممنوع، قرار دادن tabstop \u003d false. در این مورد، سوئیچ به این جزء می تواند تنها با ماوس باشد.

مواردی وجود دارد که کاربران مورد استفاده قرار می گیرند تا به یک کلید مشخص در یک برنامه تبدیل شوند، عادت، همچنان از آن در بقیه استفاده می کنند. اغلب این اتفاق می افتد با کاربران 1C، که در آن کلید Enter را می توان از طریق فیلدهای ورودی استفاده کرد. خوب، ما اگر در مورد آن بخواهیم، \u200b\u200bآنها را در برنامه های ما به آنها بدهیم. Property KeyPreview را در حقیقت نصب کنید و یک رویداد رویداد OnKeyPress را بنویسید:

روش tform1.formkeypress (فرستنده: togject؛ var key: char)؛
شروع.
اگر ord (کلید) \u003d vk_Return سپس
form1.selectivecontrol، درست، درست است)؛
پایان؛

چنین Handler هنگامی که کلید Enter را فشار می دهید، انتقال را با استفاده از شکل ها فراهم می کند. لازم به ذکر است که چنین روش با دکمه ها کار نخواهد کرد، زیرا فشار دادن Enter بر روی دکمه منجر به فشار دادن آن می شود، در حالی که زبانه فشار دادن فوکوس ورودی را به یکی در جزء توالی سوئیچینگ انتقال می دهد.

دکمه های پیش فرض

همه کاربران یکسان به سرعت در محاوره های برنامه استفاده می شود، به عنوان یک قانون، کلید Enter می تواند انتخاب شما را تأیید کند و کلید ESC لغو شود. بیایید آنها را در برنامه های ما ناامید نکنیم، به خصوص از آنجایی که انجام آن بسیار ساده است. برای یک دکمه واکنش برای وارد کردن، اموال پیش فرض را در حقیقت تنظیم کنید. برای دکمه واکنش ESC، اموال لغو را در حقیقت تنظیم کنید. و این است.

آره یا نه

تمام جعبه های محاوره ای، درخواست های کاربر، باید حداقل دو دکمه داشته باشید: تصدیق اقدامات و امتناع (بله / خیر، ذخیره / لغو، و غیره). امتناع از عمل را می توان با پنجره [X] در هدر پنجره بسته شد. این غیر قابل قبول است اگر تنها یک دکمه برای تایید عمل وجود داشته باشد، و به شکست آن، دکمه [X] را در هدر بسته می شود، یا امکان امتناع وجود ندارد. این کاربر را گیج می کند، باعث یک سوال منطقی می شود: چگونه از آن رد شود؟

ما همچنین در مورد آنچه که در بالا ذکر شد، فراموش نمی کنیم.

تمام جعبه های گفتگو باید مرکز صفحه را باز کند.

در مرکز، و نه جایی که آنها در حالت طراحی ایجاد شده اند. اول، به وضوح، و در مرحله دوم، به طور خودکار مشکل رزولوشن صفحه نمایش مختلف از کاربران مختلف را از بین می برد.

استثنا انجام می شود اگر جعبه محاوره ای به طور مداوم نیست، و با نتایج کاربر در این پنجره، تغییرات بلافاصله در پنجره اصلی (به عنوان مثال، یک فیلتر مجموعه داده، نمودارهای بازسازی، و غیره) رخ می دهد.

اندازه پنجره ها نباید بیش از اندازه صفحه نمایش باشد

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

تغییر صحیح در عناصر پنجره

عناصر پنجره باید به درستی ابعاد خود را تغییر دهند یا حرکت کنند، زمانی که اندازه پنجره تغییر می کند، هنگام به حداکثر رساندن پنجره و هنگام بازگرداندن پنجره پس از به حداکثر رساندن.

همه چیز همیشه قابل مشاهده است

کاهش اندازه پنجره نباید منجر به ناپدید شدن عناصر پنجره شود و مطلوب است نباید منجر به ظاهر نوار پیمایش (اسکرولر) پنجره خود را. شما می توانید حداقل ابعاد پنجره را محدود کنید تا همه موارد قابل مشاهده و قابل دسترس باشند. اگر امکان قرار دادن اجزاء وجود نداشته باشد، به طوری که هر کس بتواند در پنجره دیده شود، می توانید از بوک مارک ها (نوع pagecontrol) را برای تقسیم اجزای به گروه ها استفاده کنید. عذر خواهی در مورد قطعنامه صفحه نمایش یا از دست ندهید.

نکات در همه جا، راهنمایی همیشه

برای دکمه ها، به ویژه در نوار ابزار (نوع نوار ابزار) باید دستورات (اشاره) را تنظیم کنید تا همیشه روشن شود که چرا شما نیاز به یک دکمه یا یک دکمه دیگر دارید.

طیف رنگ

اجزاء را در فرم در تمام رنگ های رنگین کمان رنگ نکنید. این چشم ها را ترمیم می کند و توجه کاربر را پراکنده می کند. این نگاه "سرد" نیست. انتخاب رنگ در مورد مورد استفاده قرار می گیرد زمانی که توجه کاربر باید به یک عنصر خاص یا بخش خاصی از پنجره جذب شود. به عنوان مثال، رنگ قرمز نور را رنگ کنید که در آن خطاها وجود دارد یا برعکس، رنگ سبز نور ضبط، بررسی آن موفقیت آمیز بود.

نتیجه

یک روش بسیار خوبی وجود دارد که به شما امکان می دهد تا نقایص برنامه را به طور کلی و رابط کاربری به طور خاص پیدا کنید. این ساده است: خود را در سایت کاربر تصور کنید و نیم ساعت سعی کنید به کار خود ادامه دهید. حتی بهتر است اگر کاربر شما در دسترس باشد (به عنوان مثال، آن را در همان سازمان کار می کند). در این مورد، در کنار او نشسته و بهتر به جای او، و سعی کنید آن را کار کنید. برای ایجاد داده ها، تغییر آنها، نمایش گزارش ها، و غیره اگر نمی دانید چگونه آن را درست کنید، از کاربر خود بپرسید. یک یا دو عملیات تک نوع، مانند حالت اشکال زدایی، و 20-30، و یا حتی بیشتر عملیات های مختلف، به روش های مختلف نیست. چیزی را فراموش کرده اید که وارد یا نادرست وارد شوید و ببینید که چگونه برنامه به آن پاسخ خواهد داد. شما به سرعت نقاط ضعف برنامه خود را ببینید.

نویسنده مقاله به صورت خودکار کار کمیته پذیرش در دانشگاه، و در سال اول اجرای برنامه 3-4 ساعت در روز صرف شده در کمیسیون پذیرش، ثبت نام متقاضیان، پر کردن اطلاعات شخصی خود و صدور گزارش ها در امتحانات و در زمان کار باقی مانده، اشتباهات و کاستی ها را ثابت کرد. باور کنید، سال آینده عملا هیچ مشکلی وجود ندارد. به طور مشابه، آن را نیز در معرفی یک ماژول پرسنل بود.

بنابراین، راحتی کار برای کاربران را به یاد داشته باشید. اجازه دهید آنها را آسان و دلپذیر برای کار با برنامه های خود را.

من با استفاده از کلاس دلفی از کد C ++ مشکل دارم. دلفی DLL نسخه ی نمایشی، که یک تابع را که جسم را باز می کند، صادر می کند.
کد دلفی DLL من به نظر می رسد این است:

کتابخانه دلپذیر // از بخش استفاده می کند .... نوع imyobject \u003d روش رابط Dothis (n: integer)؛ تابع Dothat: Pwidechar؛ پایان؛ tmyObject \u003d کلاس (tineterfaceDoBject، ImyObject) روش Dothis (n: integer)؛ تابع dothat: pchar؛ پایان؛ // پیاده سازی TmyObject بروید اینجا ... روش tmyobject.dothis (n: integer)؛ شروع showmessage ("شما می خواهید Method dothis با" + inttostr (n) + "پارامتر")؛ پایان؛ تابع tmyobject.dothat: pchar؛ شروع showmessage ("شما از عملکرد Dothat تماس می گیرید")؛ نتیجه: \u003d PCHAR ("سلام من داوتات")؛ پایان؛

// صادرات DLL توابع:

تابع CreateMyObject: ImyObject؛ stdcall؛ صادرات؛ var txt: textfile؛ شروع اختصاص دادن (TXT، "C: \\ log.log")؛ بازنشانی (TXT)؛ Writeln (TXT، "Hello")؛ نتیجه: \u003d tmyobject.create؛ پایان؛ صادرات CreateMyObject؛

در پروژه من C ++، من رابط iMyObject را به شرح زیر اعلام کردم:

کلاس imyobject (عمومی: imyobject ()؛ مجازی ~ imyobject ()؛ void void dothis (int n) \u003d 0؛ مجازی char * dothat () \u003d 0؛)؛

و ویژگی اصلی من به شرح زیر است:

typedef imyobject * (__stdcall * createfn) ()؛ int main () (hmodule hlib؛ hlib \u003d loadlibrary (l "delphitest.dll)؛ اظهارات (hlib! \u003d null)؛ // pass !! createfn pfncreate؛ pfncreate \u003d (createfn) getProcaddress (hinstance) hlib،" CreatemyObject) ")؛ اگر (pfncreate \u003d\u003d null) (dword errc \u003d getlasterror ()؛ printf ("٪ U \\ n "، ERRC)؛ // خطا 127) else (printf (" بارگذاری موفقیت \\ n ")؛ imyObject * objptr \u003d pfncreate ()؛ objjptr\u003e dothis (5)؛ freelibrary (hlib)؛ int in؛ scanf_s ("٪ I"، & in)؛ بازگشت 0؛)

در این مثال، وقتی سعی می کردم به عملکرد صادرات دسترسی پیدا کنم، اشتباه کردم. خطاهای خط:
imyobject * objptr \u003d pfncreate ()؛

می توانید به من بگویید که نه با مثال من.
و، در صورت امکان، هر نمونه کاری برای دسترسی به کلاس دلفی (در DLL) از کد C ++ است.

تصمیم

اولین مشکل این است که روش روش ها را فراخوانی کنیم. رابط دلفی از ثبت نام استفاده می شود که یک توافقنامه چالشی دلفی خاص است. برای مثال، با استفاده از StdCall، برای روش های رابط.

مشکل زیر در C ++. رابط C ++ شما باید از iunknown استخراج شود، علاوه بر این، نباید یک طراح یا مخرب را اعلام کرد.

علاوه بر این، کد دلفی شما توسط Pwidechar صادر می شود که در Char * نمایش داده نمی شود، آن را در wchar_t نمایش داده می شود،

در حال جستجو، بازگشت PChar در اینجا عالی کار می کند، زیرا پیاده سازی شما یک لفاف را باز می گرداند. اما کد جدی تر احتمالا می خواهد از یک رشته پویا قرار داده شود، و در این لحظه طراحی شما دارای نقایص است.

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

من انتظار دارم که اشتباهات دیگری وجود داشته باشد، اما این همه چیز را تا کنون یافتم.