ডেলফিতে উপাদান তৈরি করা হচ্ছে। ডেলফি উপাদান তৈরির ভূমিকা

আপনার উপাদান তৈরি করার আগে, আপনাকে এটির জন্য একটি পূর্বপুরুষ নির্বাচন করতে হবে। আপনার উপাদানের পূর্বপুরুষ কে হতে পারে?

সাধারণত TCcomponent, TControl, TWinControl, TGraphicControl, TCustomXXXXXX, সেইসাথে উপাদান প্যালেটের সমস্ত উপাদানের পূর্বপুরুষ হিসাবে ব্যবহৃত হয়।
উদাহরণ স্বরূপ TOpenDialog উপাদানটি ধরা যাক, যা কম্পোনেন্ট প্যালেটের ডায়ালগ পৃষ্ঠায় অবস্থিত। এটি তার কাজটি ভাল করে, তবে এটির একটি ছোট অসুবিধা রয়েছে। প্রতিবার আপনি এটি ব্যবহার করার সময়, আপনাকে অবশ্যই প্রতিবার বিকল্প সম্পত্তির মান পরিবর্তন করতে হবে। এবং, একটি নিয়ম হিসাবে, এই একই কর্ম।
OpenDialog1.Options:= OpenDialog1.Options + ;

যাতে আমরা এই ডায়ালগ দিয়ে যে ফাইলটি খোলার চেষ্টা করছি তা আসলে ডিস্কে বিদ্যমান।
আমরা ইতিমধ্যে নিজেদের জন্য একটি কাজ বেছে নিয়েছি, যা বাকি আছে তা হল একটি উপাদান তৈরি করা। আমরা মেনু থেকে কম্পোনেন্ট/নতুন কম্পোনেন্ট... কমান্ডটি নির্বাচন করে এবং ডায়ালগ বক্সে নির্বাচন করে কম্পোনেন্টের জন্য একটি ফাঁকা তৈরি করি।
পূর্বপুরুষের ধরন: TOpenDialog
ক্লাসের নাম: TOurOpenDialog
প্যালেট পৃষ্ঠা: আমাদের পরীক্ষা
আমরা ঠিক আছে ক্লিক করেছি এবং এখন আমাদের ভবিষ্যতের উপাদানের জন্য একটি টেমপ্লেট আছে।

আমরা এই উপাদানটির জন্য কনস্ট্রাক্টরকে ওভাররাইড করি, যেমন পাবলিক বিভাগে লাইন সন্নিবেশ করান:

কনস্ট্রাক্টর ক্রিয়েট (AOwner: TCcomponent); অগ্রাহ্য করা;

এই লাইনে ক্লিক করলে Ctrl + Shift + C এই পদ্ধতির জন্য একটি টেমপ্লেট তৈরি করে, যার ভিতরে আমরা নিম্নলিখিত লাইনগুলি সন্নিবেশ করি:

উত্তরাধিকারসূত্রে তৈরি করুন (AOwner); (উত্তরাধিকার সূত্রে প্রাপ্ত কনস্ট্রাক্টরকে কল করুন)
অপশন:= অপশন + ; (আমাদের প্রয়োজনীয় কাজগুলো আমরা করি)

অনুগ্রহ করে মনে রাখবেন: কীবোর্ড শর্টকাট Ctrl + Shift + আপ/ডাউন তীরগুলি আপনাকে একটি পদ্ধতি ঘোষণা এবং এর বাস্তবায়নের মধ্যে নেভিগেট করতে দেয়।

তৈরি কম্পোনেন্ট কম্পোনেন্ট/ইনস্টল কম্পোনেন্ট ইনস্টল করা হচ্ছে...
নতুন প্যাকেজে ইনস্টল করুন
প্যাকেজ ফাইলের নাম: C:Program FilesBorlandDelphi4LibOurTest.dpk
প্যাকেজ বিবরণ: আমাদের পরীক্ষিত প্যাকেজ

আপনি কি পছন্দ করেন না যে আমাদের উপাদানটির স্ট্যান্ডার্ডের মতো একই আইকন রয়েছে? তাহলে আসুন তার জন্য আমাদের নিজস্ব তৈরি করি।
এটি করার জন্য আমাদের টুলস/ইমেজ এডিটর কল করতে হবে। একটি নতুন *.dcr ফাইল তৈরি করুন।
এতে রিসোর্স/নতুন/বিটম্যাপ ইমেজ ঢোকান। ছবির আকার 24x24 পিক্সেলে সেট করুন। এবং তারপর - আপনার সৃজনশীলতা ...
অনুগ্রহ করে মনে রাখবেন: ছবির নীচের বাম কোণে বিন্দুর রঙের সাথে মেলে এমন বিন্দুর রঙ স্বচ্ছ বলে বিবেচিত হবে!
একবার আপনি আপনার অঙ্কন তৈরি করে ফেললে, বিটম্যাপ1 থেকে TOurOpenDialog-এ নাম পরিবর্তন করুন এবং ফাইলটিকে OurOpenDialog.dcr হিসাবে সংরক্ষণ করুন।
প্যাকেজ থেকে উপাদানটি সরান এবং এটি আবার ইনস্টল করুন (শুধুমাত্র এই ক্ষেত্রে *.dcr ফাইলের একটি লিঙ্ক যোগ করা হবে)।
কম্পাইল, ইনস্টল এবং সৌভাগ্য!

ইউনিটআমাদের ওপেন ডায়ালগ; ইন্টারফেস ব্যবহারসমূহ Windows, Messages, SysUtils, ক্লাস, গ্রাফিক্স, কন্ট্রোল, ফর্ম, ডায়ালগ; টাইপ TOurOpenDialog = ক্লাস(টপেনডায়ালগ) ব্যক্তিগত(ব্যক্তিগত ঘোষণা) সুরক্ষিত পাবলিক(সর্বজনীন ঘোষণা) নির্মাণকারীতৈরি করুন (Awner: TCcomponent); অগ্রাহ্য করা; প্রকাশিত শেষ; পদ্ধতি নিবন্ধন; বাস্তবায়ন পদ্ধতি নিবন্ধন; শুরুরেজিস্টার কম্পোনেন্টস("নমুনা", ); শেষ; (TourOpenDialog) নির্মাণকারী TOurOpenDialog.Create(Awner: TCcomponent); শুরু উত্তরাধিকারসূত্রে প্রাপ্ততৈরি করুন(Awner); (উত্তরাধিকারসূত্রে প্রাপ্ত কনস্ট্রাক্টরকে কল করুন) বিকল্প:= বিকল্প + ; (আমাদের প্রয়োজনীয় কাজগুলো আমরা করি) শেষ; শেষ.

একটি উপাদান ঘোষণা যেমন বিভাগ গঠিত ব্যক্তিগত, সুরক্ষিত, সর্বজনীন এবং প্রকাশিত. তাঁরা কি বোঝাতে চাইছেন?
এগুলি দৃশ্যমানতার নির্দেশিকা।
ধারায় ঘোষিত সবকিছু ব্যক্তিগত, শুধুমাত্র মডিউলের ভিতরে উপলব্ধ যেখানে ক্লাস ঘোষণা করা হয়েছে (ব্যক্তিগত ঘোষণা)। এখানে, একটি নিয়ম হিসাবে, ভেরিয়েবলগুলিকে ঘোষণা করা হয় যেগুলি সম্পত্তির মান সংরক্ষণ করে, সেইসাথে সেগুলি অ্যাক্সেস করার জন্য পদ্ধতি (প্রক্রিয়া বা ফাংশন)।
ধারায় ঘোষিত সবকিছু সুরক্ষিত, ব্যক্তিগত বিভাগে পাওয়া যায়, সেইসাথে এই শ্রেণীর (ডেভেলপার ইন্টারফেস) বংশধরদের কাছে।
এখানে আপনি সম্পত্তির মানগুলি অ্যাক্সেস করার পদ্ধতিগুলি ঘোষণা করতে পারেন (যদি আপনি আপনার উপাদানগুলির শিশুদের এই পদ্ধতিগুলি পরিবর্তন করার অনুমতি দিতে চান),
পাশাপাশি TCustomXXX টাইপের উপাদানগুলিতে বৈশিষ্ট্য, পদ্ধতি এবং ইভেন্ট (ঘটনায় প্রতিক্রিয়া দেখানোর পদ্ধতি)।
ধারায় ঘোষিত সবকিছু পাবলিক, কম্পোনেন্টের যেকোনো ব্যবহারকারীর জন্য উপলব্ধ (রানটাইম ইন্টারফেস)।
পদ্ধতি সাধারণত এখানে ঘোষণা করা হয়. প্রকাশিত বিভাগে শুধুমাত্র বৈশিষ্ট্য এবং ঘটনা ঘোষণা করা যেতে পারে (তাদের বৈশিষ্ট্য হিসাবে ঘোষণা করা হয়)।
এগুলি অ্যাপ্লিকেশন ডিজাইনের সময় উপলব্ধ (ডিজাইন ফেজ ইন্টারফেস)।

বৈশিষ্ট্য

টাইপ বৈশিষ্ট্য massif- নিয়মিত অবজেক্ট প্যাসকেল অ্যারে, কিন্তু পরেরটির বিপরীতে এগুলি কেবল সংখ্যাসূচক মান দ্বারা নয়, স্ট্রিংগুলির দ্বারাও সূচিত করা যেতে পারে। দুর্ভাগ্যবশত, এই ধরনের সম্পত্তির জন্য একটি কাস্টম প্রপার্টি এডিটর প্রয়োজন (অবজেক্ট ইন্সপেক্টরে, প্রোপার্টি এডিটরে তিনটি ডট সহ একটি বোতাম থাকে [...]), তাই প্রপার্টির নিচের উদাহরণে ArrayPropবিভাগে ঘোষণা করা হয়েছে পাবলিক.

টাইপ TOurComponent = ক্লাস(টি-কম্পোনেন্ট) ব্যক্তিগত( ব্যক্তিগত ঘোষণা ) FArrayProp: অ্যারে এরপূর্ণসংখ্যা ফাংশন GetArrayProp(aIndex: integer): integer; পদ্ধতি SetArrayProp(aIndex: integer; constমান: পূর্ণসংখ্যা); সুরক্ষিত(সুরক্ষিত ঘোষণা) পাবলিক(সর্বজনীন ঘোষণা) সম্পত্তি ArrayProp: integer পড়া GetArrayProp লিখুন SetArrayProp; প্রকাশিত(প্রকাশিত ঘোষণা) শেষ;

সম্পত্তি নির্দিষ্টকরণ

স্পেসিফায়ার ডিফল্টফর্ম ফাইলে সম্পত্তি মান সংরক্ষণ করতে হবে কিনা তা নির্দিষ্ট করে। যদি সম্পত্তির মান মানের সাথে মিলে যায় ডিফল্ট- ফর্ম ফাইলের মান সংরক্ষণ করা হয় না, যদি মানগুলি সমান না হয় - এটি সংরক্ষিত হয়। আপনি ফর্মটিতে উপাদানটি রেখে এবং ডান মাউস বোতাম দিয়ে "পাঠ্য হিসাবে দেখুন" মেনু আইটেমটি নির্বাচন করে এটি পরীক্ষা করতে পারেন। ডিফল্টনির্দিষ্ট একটি সম্পত্তির প্রাথমিক মান সেট করে না। এটি অবশ্যই কম্পোনেন্টের কনস্ট্রাক্টরে করা উচিত।

ইউনিটআমাদের উপাদান; ইন্টারফেস ব্যবহারসমূহ Windows, SysUtils, ক্লাস, গ্রাফিক্স, ফর্ম, কন্ট্রোল; টাইপ TOurComponent = ক্লাস(টি-কম্পোনেন্ট) ব্যক্তিগত( ব্যক্তিগত ঘোষণা ) FMyInteger: Integer; সুরক্ষিত(সুরক্ষিত ঘোষণা) পাবলিক(সর্বজনীন ঘোষণা) নির্মাণকারীতৈরি করুন (Awner: TCcomponent); অগ্রাহ্য করা; প্রকাশিত(প্রকাশিত ঘোষণা) সম্পত্তি MyInteger: Integer পড়া FMyInteger লিখুন FMyInteger ডিফল্ট 10; শেষ; বাস্তবায়ন নির্মাণকারী TOurComponent.Create(Awner: TCcomponent); শুরু উত্তরাধিকারসূত্রে প্রাপ্ততৈরি করুন(Awner); ফিন্টেজার:= 10; শেষ; শেষ.

স্পেসিফায়ার নোডফল্টডিফল্ট সম্পত্তি মান ওভাররাইড করে। এই স্পেসিফায়ারটি সাধারণত উত্তরাধিকারসূত্রে পাওয়া সম্পত্তির ডিফল্ট মানকে ওভাররাইড করতে ব্যবহৃত হয়।
উদাহরণ স্বরূপ: সম্পত্তিস্বয়ংক্রিয় আকার নোডফল্ট;

স্পেসিফায়ার সংরক্ষিতফর্ম ফাইলে সম্পত্তি মান কখন সংরক্ষণ করতে হবে তা নির্দিষ্ট করে। পরে সংরক্ষিতদাঁড়াতে পারে সত্য(সর্বদা সংরক্ষণ করুন) মিথ্যা(কখনও সংরক্ষণ করবেন না) বা একটি ফাংশনের নাম যা একটি বুলিয়ান ফলাফল প্রদান করে।

সম্পত্তি OneProp: পূর্ণসংখ্যা পড়া FOneProp লিখুন SetOneProp সংরক্ষিতমিথ্যা; সম্পত্তি TwoProp: integer পড়া FTwoProp লিখুন SetTwoProp সংরক্ষিতসত্য; সম্পত্তিথ্রিপ্রপ: পূর্ণসংখ্যা পড়া FThreeProp লিখুন SetThreeProp সংরক্ষিতফক্ট;

এবং শেষ জিনিস:
কম্পোনেন্ট প্যানেলে প্রদর্শনের জন্য একটি কম্পোনেন্টে একটি ছবি যোগ করতে, আপনাকে এটি করতে হবে: - ফাইল name.dcr দিয়ে 24*24 আকারে এটি তৈরি করতে হবে (রিসোর্সে ছবির নামটি ছবির নামের সমান উপাদান, বড় অক্ষরে)
- উপাদানটির পাশে ছবিটি রাখুন।

উন্নয়ন সফটওয়্যারউইন্ডোজ ওএস এবং অন্যান্য জনপ্রিয়গুলির জন্য বিভিন্ন ধরণের সরঞ্জাম ব্যবহার করে করা যেতে পারে। রাশিয়ান এবং বিদেশী প্রোগ্রামারদের মধ্যে খুব জনপ্রিয় যেগুলির মধ্যে ডেলফি প্রোগ্রাম। এই উন্নয়ন টুলের সুনির্দিষ্ট কি? এর সবচেয়ে উল্লেখযোগ্য বৈশিষ্ট্য কি?

ডেলফি সম্পর্কে সাধারণ তথ্য

ডেলফি হল অ্যাপ্লিকেশন প্রোগ্রামগুলির জন্য একটি উন্নয়ন পরিবেশ যা উইন্ডোজ, ম্যাকওএস এবং মোবাইল ডিভাইসে চালানোর জন্য ডিজাইন করা হয়েছে। অপারেটিং সিস্টেম- iOS এবং Android। এটি ভাষা এবং কোড তৈরির পদ্ধতির সরলতা দ্বারা চিহ্নিত করা হয়।

প্রয়োজনে, C এবং C++ এ লেখা ওএস এবং লাইব্রেরির সাথে নিম্ন-স্তরের যোগাযোগ প্রদান করে। ডেলফি ব্যবহার করে তৈরি করা প্রোগ্রামগুলি চালানোর জন্য তৃতীয় পক্ষের শেলগুলির প্রয়োজন হয় না, যেমন জাভা ভার্চুয়াল মেশিন। ডেলফি একটি উন্নয়ন পরিবেশ যা পেশাদার এবং শিক্ষাগত উদ্দেশ্যে উভয়ের দ্বারা সফলভাবে ব্যবহার করা যেতে পারে। এর মৌলিক ক্ষমতা আয়ত্ত করার জন্য, জটিল প্রোগ্রামিং ভাষার উচ্চ যোগ্যতা এবং জ্ঞান থাকা আবশ্যক নয়।

প্রধান সুবিধা

প্রশ্নে সফ্টওয়্যার পণ্যের মূল সুবিধাগুলি কী তা অধ্যয়ন করা যাক। যখন একটি নির্দিষ্ট আইটি কোম্পানি একটি উন্নয়ন পরিবেশের পছন্দকে সমর্থন করে, তখন ডেলফি অনেক প্রোগ্রামারদের পছন্দ হয়ে যায় এবং তাদের দ্বারা ব্যবহারের জন্য সুপারিশ করা হয়। এটি এই কারণে যে এই পরিবেশটি আপনাকে দ্রুততম সময়ে অ্যাপ্লিকেশনগুলি তৈরি করতে দেয়, এমনকি সেই কম্পিউটারগুলিতেও তাদের উচ্চ কার্যকারিতা নিশ্চিত করে যেগুলির হার্ডওয়্যার বৈশিষ্ট্যগুলি কম। প্রশ্নে উন্নয়ন পরিবেশ বেছে নেওয়ার পক্ষে একটি উল্লেখযোগ্য যুক্তি হল যে এটি নতুন টুলগুলির সাথে সম্পূরক হতে পারে যা ডেলফি ইন্টারফেসে উপস্থিত মানক সেট দ্বারা সরবরাহ করা হয় না।

আসুন এখন ডেলফির ক্ষমতার ব্যবহারিক ব্যবহারের সূক্ষ্মতা অধ্যয়ন করি।

ইন্টারফেস সুনির্দিষ্ট

প্রথমত, আপনি সফ্টওয়্যার বিকাশের পরিবেশের ইন্টারফেসের কিছু বৈশিষ্ট্যের দিকে মনোযোগ দিতে পারেন। এইভাবে, প্রোগ্রামের ওয়ার্কস্পেসের কাঠামোতে বেশ কয়েকটি প্রধান উইন্ডোর সাথে একযোগে কাজ জড়িত। আসুন আরো বিস্তারিতভাবে এই সম্পত্তি বিবেচনা করা যাক।

ডেলফি ডেভেলপমেন্ট এনভায়রনমেন্ট, বিশেষ করে সংস্করণ 7, নিম্নলিখিত কী মডিউলগুলির ব্যবহার জড়িত: ফর্ম ডিজাইনার, সম্পাদক, প্যালেট, অবজেক্ট ইন্সপেক্টর এবং রেফারেন্স বই। কিছু ডেলফি পরিবর্তনে, চিহ্নিত উপাদানগুলির নাম ভিন্নভাবে রাখা যেতে পারে। উদাহরণস্বরূপ, একজন সম্পাদক একটি প্রোগ্রাম কোড উইন্ডোর সাথে সঙ্গতিপূর্ণ হতে পারে এবং একজন ডিজাইনার একটি ফর্ম উইন্ডোর সাথে সঙ্গতিপূর্ণ হতে পারে। যাহোক কার্যকরী উদ্দেশ্যতাদের একই হবে। চিহ্নিত ডেলফি বিভিন্ন সহায়ক সরঞ্জামের পরিপূরক হতে পারে। প্রোগ্রাম উন্নয়ন পদ্ধতির দৃষ্টিকোণ থেকে প্রথম দুটিকে প্রধান হিসাবে বিবেচনা করা হয়। তবে বাকিগুলোও গুরুত্বপূর্ণ। চিহ্নিত ডেলফি মডিউলগুলি ব্যবহার করার বৈশিষ্ট্যগুলি দেখুন।

ফর্ম ডিজাইনার, সম্পাদক এবং প্যালেট

ফর্ম ডিজাইনারের সাহায্যে, বিকাশকারী তার প্রোগ্রামের ইন্টারফেস তৈরি করে। পরিবর্তে, এর কোডটি সম্পাদকে লেখা হয়। অনেক প্রোগ্রামার যারা ডেলফি উন্নয়ন পরিবেশকে সবচেয়ে অনুকূল সমাধান হিসেবে বেছে নেওয়ার পরামর্শ দেন তারা যুক্তি হিসেবে ফর্ম ডিজাইনারের ব্যবহারের সহজতার কথা উল্লেখ করেন। কিছু বিশেষজ্ঞ বিশ্বাস করেন যে এই প্রক্রিয়াটি আরও একটি খেলার মতো।

যত তাড়াতাড়ি ব্যবহারকারী একটি প্রোগ্রাম তৈরি করা শুরু করে এবং ফর্ম ডিজাইনার চালু করে, প্রাথমিকভাবে এটিতে কোনও উপাদান নেই, এটি খালি। তবে আপনি অন্য ডেলফি মডিউল - প্যালেটে অবস্থিত সরঞ্জামগুলি ব্যবহার করে অবিলম্বে এটি পূরণ করতে পারেন। ফর্ম ডিজাইনারে কনফিগার করা প্রোগ্রাম ইন্টারফেসের উপাদানগুলি অবশ্যই কমান্ড দ্বারা নিয়ন্ত্রিত হতে হবে, যা ঘুরে, সম্পাদকে লেখা হয়।

তবে আপাতত প্যালেটে ফিরে আসি। এটি ব্যবহার করে, আপনি ফর্ম ডিজাইনার এলাকায় প্রয়োজনীয় বস্তু স্থাপন করতে পারেন। একটি নির্দিষ্ট টুল ব্যবহার করার জন্য, আপনার এটিতে একবার ক্লিক করা উচিত - যখন এটি প্যালেট এলাকায় থাকে, এবং দ্বিতীয়বার - ফর্ম ডিজাইনার উইন্ডোতে। এর পরে, সংশ্লিষ্ট বস্তুটি উন্নয়ন এলাকায় চলে যাবে এবং আপনি সম্পাদকে এটির জন্য কোড লিখতে পারেন।

অবজেক্ট ইন্সপেক্টর

উইন্ডোজ এবং অন্যান্য সাধারণ প্ল্যাটফর্মের জন্য একটি অ্যাপ্লিকেশন ডেভেলপমেন্ট এনভায়রনমেন্ট ডেলফির মধ্যে আরেকটি উল্লেখযোগ্য উপাদান হল অবজেক্ট ইন্সপেক্টর। আপনি লক্ষ্য করতে পারেন যে এতে প্রদর্শিত তথ্য পরিবর্তন হয়: এটি ফর্ম ডিজাইনার এলাকায় নির্বাচিত বস্তুর স্থিতি দ্বারা প্রভাবিত হয়।

অবজেক্ট ইন্সপেক্টরের গঠন নিম্নরূপ। এটি দুটি জানালা নিয়ে গঠিত। প্রতিটিতে অ্যালগরিদম রয়েছে যা সংশ্লিষ্ট উপাদানগুলির আচরণ নির্ধারণ করে। প্রথমটি বৈশিষ্ট্য প্রদর্শন করে, দ্বিতীয়টি ইভেন্টগুলি প্রদর্শন করে। যদি প্রোগ্রামার একটি নির্দিষ্ট উপাদানকে প্রভাবিত করে এমন অ্যালগরিদমগুলির সাথে সামঞ্জস্য করতে চায়, তাহলে অবজেক্ট ইন্সপেক্টরের ক্ষমতা ব্যবহার করা হয়। উদাহরণস্বরূপ, আপনি নির্দিষ্ট প্রোগ্রাম ইন্টারফেস উপাদানগুলির অবস্থান, তাদের উচ্চতা এবং প্রস্থ পরিবর্তন করতে পারেন।

অবজেক্ট ইন্সপেক্টরের ট্যাব রয়েছে যা আপনাকে এমন পৃষ্ঠাগুলির মধ্যে স্যুইচ করতে দেয় যা বৈশিষ্ট্য বা ইভেন্টগুলি প্রদর্শন করে যা সরাসরি সম্পাদকের সাথে সম্পর্কিত। সুতরাং, আপনি যদি স্ক্রিনে প্রদর্শিত আইটেমগুলির ডানদিকে ডাবল-ক্লিক করেন, তাহলে একটি নির্দিষ্ট ইভেন্টের সাথে সম্পর্কিত কোডটি সম্পাদকে রেকর্ড করা হবে।

ডেলফিতে সফ্টওয়্যার ডেভেলপমেন্ট বিভিন্ন সমস্যার সমাধান করতে অবজেক্ট ইন্সপেক্টর ব্যবহার করে। এটি পূর্বনির্ধারিত যে এই সরঞ্জামটির সাহায্যে আপনি ফর্মটিতে অবস্থিত কার্যত যে কোনও বস্তুর বৈশিষ্ট্যগুলির পাশাপাশি ফর্মটি নিজেই পরিবর্তন করতে পারেন। আসুন অবজেক্ট ইন্সপেক্টরের সাথে কাজ করার কিছু বৈশিষ্ট্যগুলি ঘনিষ্ঠভাবে দেখি।

অবজেক্ট ইন্সপেক্টর: বৈশিষ্ট্য ব্যবহার করা

অবজেক্ট ইন্সপেক্টর এবং ফর্ম ইন্সপেক্টরের মধ্যে মিথস্ক্রিয়ার ক্ষেত্রে ডেলফি আইডিই কীভাবে কাজ করে তা বোঝার জন্য, আপনি উইন্ডোজের কিছু সাধারণ সফ্টওয়্যার ইন্টারফেস উপাদানগুলির বৈশিষ্ট্যগুলিতে পরিবর্তন করার চেষ্টা করতে পারেন - উদাহরণস্বরূপ, মেমো, বোতাম এবং তালিকাবক্স (আমরা করব একটু পরে আরো বিস্তারিতভাবে তাদের সারাংশ অন্বেষণ করুন)। প্রথমত, আপনাকে উপলভ্য ডেলফি টুল ব্যবহার করে ফর্মে তাদের স্থাপন করতে হবে।

আপনি Ctl3D সম্পত্তি নিয়ে পরীক্ষা করার চেষ্টা করতে পারেন। এটি করার জন্য, আপনাকে ফর্মটিতে ক্লিক করতে হবে, তারপর অবজেক্ট ইন্সপেক্টরের কাছে যান এবং প্রশ্নে থাকা সম্পত্তির মান পরিবর্তন করুন। এর পরে, ফর্মটি উল্লেখযোগ্যভাবে পরিবর্তিত হবে। একই সময়ে, ডিজাইন উইন্ডোতে স্থাপন করা উপাদানগুলির প্রতিটিতে Ctl3D বৈশিষ্ট্য পরিবর্তন করা হবে।

পরীক্ষাগুলি সম্পন্ন করার পরে, আমরা ফর্মে ফিরে যেতে পারি এবং Ctl3D মান সক্রিয় করতে পারি। এর পরে, আসুন মেমো এবং তালিকাবক্স উপাদানগুলি দেখুন। এখন আপনি তাদের বৈশিষ্ট্য, ফর্মের অবস্থান এবং চেহারা পরিবর্তন করতে পারেন। উদাহরণস্বরূপ, মেনু আইটেমটিতে সম্পাদনা বিকল্পটি নির্বাচন করে এবং তারপরে আকার নির্বাচন করে, প্রোগ্রামার বস্তুর প্রস্থ এবং উচ্চতা পরিবর্তন করতে পারে। সম্পাদনা এবং সারিবদ্ধ নির্বাচন করে তাদের কেন্দ্র করার একটি বিকল্প রয়েছে। সংশ্লিষ্ট ক্রিয়াগুলি অবজেক্ট ইন্সপেক্টরে প্রদর্শিত উপাদানগুলিকে প্রভাবিত করবে।

প্রশ্নে ডেলফি মডিউল ব্যবহার করে, আপনি উপাদানগুলির বৈশিষ্ট্য পরিবর্তন করতে পারেন। সুতরাং, উদাহরণস্বরূপ, যদি কাজটি তাদের জন্য একটি নির্দিষ্ট রঙ নির্ধারণ করা হয়, তবে একবারে বেশ কয়েকটি সরঞ্জাম ব্যবহার করার বিকল্প রয়েছে। প্রথমত, আপনি একটি রঙের সাথে সম্পর্কিত একটি কমান্ড লিখতে পারেন - উদাহরণস্বরূপ, লাল - clRed - এলাকায় দ্বিতীয়, ব্যবহারকারী একটি তালিকা থেকে পছন্দসই রঙ নির্বাচন করতে পারেন। তৃতীয়ত, রঙের বৈশিষ্ট্যগুলিতে ডাবল-ক্লিক করার একটি বিকল্প রয়েছে - একটি রঙ নির্বাচন উইন্ডো প্রদর্শিত হবে। একইভাবে, বিকাশকারী বস্তুর অন্যান্য বৈশিষ্ট্যগুলি পরিবর্তন করতে পারে - উদাহরণস্বরূপ, ফন্টের ধরন, এর রঙ বা আকার।

ডিরেক্টরি

ডেলফি একটি উন্নয়ন পরিবেশ যা একটি মোটামুটি বিস্তারিত সাহায্য সিস্টেম দ্বারা পরিপূরক। এটি অ্যাক্সেস করতে, মেনু থেকে সাহায্য নির্বাচন করুন। এর পরে, আমরা উপরে উল্লেখিতগুলির মধ্যে একটি উইন্ডোতে প্রদর্শিত হবে। সফ্টওয়্যার মডিউলপ্রশ্নে উন্নয়ন পরিবেশ - রেফারেন্স বই। এটি ব্যবহার করার বিশেষত্ব হল যে আপনি যখন F1 চাপবেন, ব্যবহারকারী একটি নির্দিষ্ট ইঙ্গিত পাবেন যা বর্তমান টুল ব্যবহারের সুনির্দিষ্ট বৈশিষ্ট্যগুলিকে প্রতিফলিত করে। উদাহরণস্বরূপ, যদি একজন প্রোগ্রামার অবজেক্ট ইন্সপেক্টরের সাথে কাজ করে, তবে সে একটি বৈশিষ্ট্য নির্বাচন করতে পারে, তারপরে F1 টিপুন এবং সংশ্লিষ্ট বিকল্প সম্পর্কে সহায়তা তথ্য পেতে পারেন। ডেলফি 7 ডেভেলপমেন্ট এনভায়রনমেন্ট এবং সংশ্লিষ্ট ধরণের সফ্টওয়্যারের অন্যান্য সংস্করণগুলি অন্তর্ভুক্ত করে এমন অন্য কোনও ইন্টারফেস উপাদানের সাথে কাজ করার সময় একই কাজ করা যেতে পারে।

অন্যান্য ইন্টারফেস উপাদান

প্রশ্নে ইন্টারফেসের অন্যান্য গুরুত্বপূর্ণ উপাদানগুলির মধ্যে সফ্টওয়্যার সমাধান- মেনু, প্যানেল দ্রুত প্রবেশ, সেইসাথে একটি ইমেজ সম্পাদক. মেনু সম্পর্কে, এটি প্রোগ্রামারকে উন্নয়ন পরিবেশের কাঠামোতে উপস্থিত প্রয়োজনীয় উপাদানগুলিকে দ্রুত অ্যাক্সেস করতে দেয়। আপনি মাউস ব্যবহার করে বা হট কী ব্যবহার করে এটি ব্যবহার করতে পারেন। মেনুর ঠিক নীচে রয়েছে দ্রুত অ্যাক্সেস প্যানেল৷ এর কিছু ফাংশন মেনুর নকল করে, কিন্তু সেগুলি অ্যাক্সেস করা দ্রুত। ডেলফি কিছুটা উইন্ডোজের পেইন্ট প্রোগ্রামের মতো। অর্থাৎ, এটির সাহায্যে আপনি ছবিগুলিতে সহজ সমন্বয় করতে পারেন, তাদের উপর শিলালিপি এবং অন্যান্য উপাদান রাখতে পারেন।

প্রোগ্রামিং টুলস

ডেলফি হল একটি উন্নয়ন পরিবেশ যেখানে প্রোগ্রামার উৎপাদনশীলতা উন্নত করার জন্য ডিজাইন করা প্রচুর সংখ্যক টুল রয়েছে। সুতরাং, আমরা উপরে আলোচনা করা মূল মডিউলগুলি বিশেষ সরঞ্জামগুলির একটি সেট দ্বারা পরিপূরক। এর মধ্যে একটি ডিবাগার, একটি কম্পাইলার, সেইসাথে WinSight এবং WinSpector উপাদান অন্তর্ভুক্ত রয়েছে। মনে রাখবেন যে ডেলফির কিছু সংস্করণে, চিহ্নিত উপাদানগুলি আলাদাভাবে ইনস্টল করা আবশ্যক। আসুন তাদের সুনির্দিষ্ট অধ্যয়ন করা যাক।

ডেলফি ডিবাগার

ডিবাগার সম্পর্কে, এই সরঞ্জামটি সঠিকতার জন্য সংশ্লিষ্ট সফ্টওয়্যার অ্যালগরিদমগুলির প্রয়োজনীয় পরীক্ষাগুলি বহন করার ক্ষেত্রে কোড সম্পাদককে পরিপূরক করে৷ এটির সাহায্যে, একজন বিকাশকারী তার উত্স কোড লাইনটি লাইন দ্বারা পরীক্ষা করতে পারে। কিছু ক্ষেত্রে, কম্পোনেন্ট ডেভেলপমেন্টের মতো একটি কাজ সমাধান করার সময়, একটি স্বাধীন পণ্য হিসাবে ডেলফিকে একটি বাহ্যিক ডিবাগারের সাথে সম্পূরক করা যেতে পারে, যা প্রোগ্রামারকে তৈরি করা সফ্টওয়্যারটির কোড চেক করার জন্য উন্নত ক্ষমতা দেয়।

ডেলফি কম্পাইলার

আসুন এখন প্রশ্নে উন্নয়ন পরিবেশের কম্পাইলারের সুনির্দিষ্ট বিষয়গুলি অধ্যয়ন করি। উল্লেখ্য যে ডেলফি কাঠামোতে বেশ কিছু সংশ্লিষ্ট উপাদান থাকতে পারে। সুতরাং, ডিসিসি কম্পাইলার ব্যবহার করার একটি বিকল্প রয়েছে, যা একটি বহিরাগত ডিবাগারে অ্যাপ্লিকেশনটির সাথে কাজ করার ক্ষেত্রে কার্যকর।

উইনসাইট এবং উইনস্পেক্টর

নির্দিষ্ট মডিউলগুলি হল যেগুলি ডেলফিতে অতিরিক্তভাবে ইনস্টল করা প্রয়োজন৷ তারা আয়ত্তে আপেক্ষিক অসুবিধা দ্বারা চিহ্নিত করা হয়. যাইহোক, অনেক প্রোগ্রামার যারা ডেলফি ডেভেলপমেন্ট এনভায়রনমেন্ট বেছে নিয়েছে তারা বিশ্বাস করে যে এই উপাদানগুলি ব্যবহার করতে শিখতে হবে। সুতরাং, উইনসাইট মডিউলটি উইন্ডোজ বার্তাগুলি নিরীক্ষণ করতে ব্যবহৃত হয়। একটি বিশেষ ফাইলে কম্পিউটারের অবস্থা রেকর্ড করার জন্য WinSpector এর মতো একটি উপাদান প্রয়োজন। আপনি যদি সফ্টওয়্যার বিকাশের সময় কোনও সমস্যার সম্মুখীন হন, আপনি সর্বদা এই ফাইলটি খুলতে পারেন এবং দেখতে পারেন কী সমস্যা হতে পারে।

স্ট্যান্ডার্ড উপাদান

ডেলফি ডেভেলপমেন্ট এনভায়রনমেন্ট, যা আমরা সাধারণভাবে শিখছি, তাতে বেশ কিছু স্ট্যান্ডার্ড উপাদান রয়েছে যেগুলি সম্পর্কে জানার জন্যও দরকারী। বিশেষজ্ঞরা এগুলিকে শ্রেণীবদ্ধ করেন: মেইনমেনু, পপআপমেনু, লেবেল, সম্পাদনা, মেমো, বোতাম, চেকবক্স, রেডিওবাটন, তালিকাবক্স, কম্বোবক্স, স্ক্রলবার, গ্রুপবক্স, প্যানেল এবং স্ক্রলবক্স। আসুন আরো বিস্তারিতভাবে তাদের সুনির্দিষ্ট অধ্যয়ন করা যাক।

মেইনমেনু উপাদানটি তৈরি করা প্রোগ্রামের ইন্টারফেসে প্রধান মেনু রাখার জন্য ডিজাইন করা হয়েছে। এটি করার জন্য, আপনাকে ফর্মটিতে সংশ্লিষ্ট উপাদানটি স্থাপন করতে হবে, তারপর অবজেক্ট ইন্সপেক্টরের মাধ্যমে আইটেম সম্পত্তিতে কল করতে হবে এবং তারপর প্রয়োজনীয় মেনু আইটেমগুলি নির্ধারণ করতে হবে।

পপআপমেনু উপাদানটি তৈরি করা প্রোগ্রামের ইন্টারফেসে পপ-আপ মেনু রাখার জন্য ডিজাইন করা হয়েছে, অর্থাৎ যেগুলি মাউসের ডান-ক্লিক করে খোলে।

লেবেল উপাদানটি প্রোগ্রাম উইন্ডোতে পাঠ্য প্রদর্শন করতে ব্যবহৃত হয়। এটি কাস্টমাইজ করা যেতে পারে, উদাহরণস্বরূপ, অবজেক্ট ইন্সপেক্টরে পছন্দসই ফন্ট সেট করা।

সম্পাদনা উপাদানটি স্ক্রিনে পাঠ্যের একটি অংশ প্রদর্শন করতে ব্যবহৃত হয় যা ব্যবহারকারী প্রোগ্রামটি চলাকালীন সম্পাদনা করতে পারে। এটি মেমো উপাদান দ্বারা পরিপূরক, যা, ঘুরে, বড় পাঠ্যের সাথে কাজ করতে ব্যবহার করা যেতে পারে। এই উপাদানটির মধ্যে রয়েছে, উদাহরণস্বরূপ, পাঠ্য অনুলিপি করার মতো বিকল্পগুলি।

বোতাম উপাদানটি প্রোগ্রামটি চলাকালীন একটি বোতাম টিপে নির্দিষ্ট ক্রিয়া সম্পাদন করার জন্য ডিজাইন করা হয়েছে। ফর্মটিতে সংশ্লিষ্ট উপাদানটি স্থাপন করা প্রয়োজন এবং তারপরে প্রয়োজনীয় প্রোগ্রাম কোডটি প্রবেশ করান।

চেকবক্স উপাদানটি আপনাকে একটি ছোট উইন্ডো সহ পর্দায় লাইন প্রদর্শন করতে দেয় যেখানে মাউস ব্যবহার করে একটি চেকবক্স স্থাপন করা যেতে পারে। অনুরূপ একটি উপাদান হল রেডিওবাটন। তারা ভিন্ন, প্রথমত, চেহারা- দ্বিতীয় উপাদানটি একটি বৃত্তের আকারে তৈরি করা হয়েছে, এবং দ্বিতীয়ত, প্রথম উপাদানটি একাধিক বিকল্পের একযোগে নির্বাচনের অনুমতি দেয়, রেডিওবাটন - শুধুমাত্র একটি।

লিস্টবক্স উপাদানটি স্ক্রিনে একটি তালিকা প্রদর্শন করতে ব্যবহৃত হয় যা ব্যবহারকারী মাউস ব্যবহার করে স্ক্রোল করতে পারে। আরেকটি উপাদান, কম্বোবক্স, এটি কিছুটা অনুরূপ, তবে এটি একটি বিশেষ ক্ষেত্রে পাঠ্য প্রবেশ করার ক্ষমতা দ্বারা পরিপূরক।

স্ক্রলবার কম্পোনেন্ট হল উইন্ডোজের একটি স্ক্রল বার। সাধারণত টেক্সট স্পেস বা অবজেক্ট সহ ফর্ম উইন্ডোর চেয়ে বড় হওয়ার সাথে সাথেই স্বয়ংক্রিয়ভাবে প্রদর্শিত হয়।

আপনি যখন TAB কী টিপবেন তখন আপনি যে ক্রমানুসারে উইন্ডোজের মধ্যে সরে যান তা রেকর্ড করতে গ্রুপবক্স উপাদানটি ব্যবহার করা হয়। একটি প্যানেল উপাদানের সাথে সম্পূরক করা যেতে পারে, যা ফর্মের উপর বিভিন্ন বস্তু সরাতে ব্যবহার করা যেতে পারে।

স্ক্রোলবক্স উপাদান আপনাকে একটি ফর্মের একটি এলাকা ঠিক করতে দেয় যা অনুভূমিকভাবে এবং উল্লম্বভাবে স্ক্রোল করা যায়। এই বৈশিষ্ট্যটি ডিফল্টরূপে প্রধান ডেলফি উন্নয়ন উইন্ডোগুলিকে চিহ্নিত করে। কিন্তু যদি ফর্মের একটি নির্দিষ্ট বিভাগে এই ধরনের একটি বিকল্প সক্রিয় করার প্রয়োজন হয়, আপনি স্ক্রোলবক্স উপাদান ব্যবহার করতে পারেন।

সারসংক্ষেপ

ডেলফি হল একটি শক্তিশালী অ্যাপ্লিকেশন ডেভেলপমেন্ট এনভায়রনমেন্ট যা একই সাথে এর মূল ফাংশনগুলির ব্যবহারের সহজতার দ্বারা চিহ্নিত করা হয়। এর কাঠামোতে অন্তর্ভুক্ত সরঞ্জামগুলির সাহায্যে, আপনি সর্বাধিক তৈরি করতে পারেন বিভিন্ন ধরনেরউইন্ডোজ এবং অন্যান্য জনপ্রিয় অপারেটিং সিস্টেমের জন্য প্রোগ্রাম।

অনেক প্রোগ্রামারদের দ্বারা ডেলফি ডেভেলপমেন্ট টুলের পছন্দ সংশ্লিষ্ট সফ্টওয়্যারগুলির ইন্টারফেসগুলির ব্যবহারের সহজতার দ্বারা নির্ধারিত হয়, সেইসাথে প্রোগ্রাম তৈরির যে কোনও পর্যায়ে কাজ করার জন্য দরকারী সরঞ্জামগুলির একটি বিস্তৃত পরিসর - ডিজাইনের পর্যায়ে, অ্যালগরিদম প্রোগ্রামিং অথবা ডিবাগিং।


আপনার নিজস্ব উপাদান বিকাশ

আপনি যদি ডেলফির সাথে আসা স্ট্যান্ডার্ড উপাদানগুলির সাথে খুশি না হন তবে আপনার নিজের তৈরি করার জন্য আপনার হাত চেষ্টা করার সময় এসেছে। আমরা প্রথমে সহজগুলি দিয়ে শুরু করব এবং ধীরে ধীরে আরও জটিলগুলির দিকে এগিয়ে যাব। তো, শুরু করা যাক।

আপনার উপাদান তৈরি করার আগে, এটির জন্য সঠিক পূর্বপুরুষ চয়ন করা গুরুত্বপূর্ণ। আপনার উপাদানের পূর্বপুরুষ কে হতে পারে? সাধারণত TCcomponent, TControl, TWinControl, TGraphicControl, TCustomXXXXXX, সেইসাথে উপাদান প্যালেটের সমস্ত উপাদানের পূর্বপুরুষ হিসাবে ব্যবহৃত হয়। উদাহরণ স্বরূপ TOpenDialog উপাদানটি ধরা যাক, যা কম্পোনেন্ট প্যালেটের ডায়ালগ পৃষ্ঠায় অবস্থিত। এটি তার কাজটি ভাল করে, তবে এটির একটি ছোট অসুবিধা রয়েছে। প্রতিবার আপনি এটি ব্যবহার করার সময়, আপনাকে অবশ্যই প্রতিবার বিকল্প সম্পত্তির মান পরিবর্তন করতে হবে। এবং, একটি নিয়ম হিসাবে, এই একই কর্ম।


এই লাইনে ক্লিক করলে Ctrl + Shift + C এই পদ্ধতির জন্য একটি টেমপ্লেট তৈরি করে, যার ভিতরে আমরা নিম্নলিখিত লাইনগুলি সন্নিবেশ করি:


তৈরি কম্পোনেন্ট কম্পোনেন্ট/ইনস্টল কম্পোনেন্ট ইনস্টল করা হচ্ছে...

  • নতুন প্যাকেজে ইনস্টল করুন
  • প্যাকেজ ফাইলের নাম: C:\Program Files\Borland\Delphi4\Lib\OurTest.dpk
  • প্যাকেজ বিবরণ: আমাদের পরীক্ষিত প্যাকেজ

আপনি কি পছন্দ করেন না যে আমাদের উপাদানটির স্ট্যান্ডার্ডের মতো একই আইকন রয়েছে? তাহলে আসুন তার জন্য আমাদের নিজস্ব তৈরি করি। এটি করার জন্য আমাদের টুলস/ইমেজ এডিটর কল করতে হবে। একটি নতুন *.dcr ফাইল তৈরি করুন। এতে রিসোর্স/নতুন/বিটম্যাপ ইমেজ ঢোকান। ছবির আকার 24x24 পিক্সেলে সেট করুন। এবং তারপর - আপনার সৃজনশীলতা... অনুগ্রহ করে মনে রাখবেন: ছবির নীচের বাম কোণে বিন্দুর রঙের সাথে মেলে এমন বিন্দুর রঙ স্বচ্ছ বলে বিবেচিত হবে!

একবার আপনি আপনার অঙ্কন তৈরি করে ফেললে, বিটম্যাপ1 থেকে TOurOpenDialog-এ নাম পরিবর্তন করুন এবং ফাইলটিকে OurOpenDialog.dcr হিসাবে সংরক্ষণ করুন। প্যাকেজ থেকে উপাদানটি সরান এবং এটি আবার ইনস্টল করুন (শুধুমাত্র এই ক্ষেত্রে *.dcr ফাইলের একটি লিঙ্ক যোগ করা হবে)।

কম্পাইল, ইনস্টল এবং সৌভাগ্য!

ডেলফি 5 এর সাথে পেশাদার অ্যাপ্লিকেশন বিকাশ | উন্নয়ন সরঞ্জাম | কম্পিউটারপ্রেস 2"2001

ডেলফি উপাদান তৈরি করা

ডেলফি উপাদান তৈরির ভূমিকা

বোরল্যান্ড ডেলফি ব্যবহার করে অ্যাপ্লিকেশনগুলি বিকাশ করার সময়, নিম্নলিখিত কারণগুলির জন্য উপাদানগুলি তৈরি করা সুবিধাজনক:

  1. ব্যবহারে সহজ. কম্পোনেন্টটি ফর্মটিতে স্থাপন করা হয়েছে এবং আপনাকে এটির জন্য সম্পত্তির মান সেট করতে হবে এবং ইভেন্ট হ্যান্ডলার কোড লিখতে হবে। অতএব, যদি কোনও প্রকল্পে তাদের সাথে সম্পর্কিত নিয়ন্ত্রণ এবং ইভেন্ট হ্যান্ডলারগুলির কোনও সংমিশ্রণ দুটি জায়গায় ঘটে থাকে, তবে একটি সংশ্লিষ্ট উপাদান তৈরি করার বিষয়ে চিন্তা করা বোধগম্য। যদি তাদের সাথে সম্পর্কিত নিয়ন্ত্রণ এবং ইভেন্ট হ্যান্ডলারের সংমিশ্রণ দুইবারের বেশি ঘটে, তাহলে অ্যাপ্লিকেশনটি বিকাশ করার সময় একটি উপাদান তৈরি করা প্রচেষ্টা বাঁচানোর গ্যারান্টিযুক্ত।
  2. গ্রুপ প্রকল্প উন্নয়নের সহজ সংগঠন. গ্রুপ ডেভেলপমেন্টে, প্রকল্পের স্বতন্ত্র অংশগুলিকে উপাদান হিসাবে সংজ্ঞায়িত করা যেতে পারে এবং কাজটি বিভিন্ন প্রোগ্রামারকে অর্পণ করা যেতে পারে। উপাদানগুলি অ্যাপ্লিকেশন থেকে আলাদাভাবে ডিবাগ করা যেতে পারে, যা করা বেশ সহজ।
  3. সরল এবং কার্যকর পদ্ধতিঅন্যান্য প্রোগ্রামারদের সাথে কোড ভাগ করে নেওয়া।অনেক সাইট আছে, উদাহরণস্বরূপ http://www.torry.net/, যেখানে আপনি অবাধে বিতরণ করা উপাদান খুঁজে পেতে পারেন বা নামমাত্র ফি দিয়ে কিনতে পারেন।

ফিচার প্যাক

ডেলফিতে, উপাদানগুলি প্যাকেজে সংরক্ষণ করা হয়। ব্যবহৃত উপাদান প্যাকেজগুলির তালিকাটি কম্পোনেন্ট/ইনস্টল প্যাকেজ মেনু আইটেম ব্যবহার করে কল করা যেতে পারে (তবে, কিছু কারণে এই ডায়ালগের শিরোনাম প্রকল্প বিকল্প রয়েছে)।

এই ডায়ালগ ব্যবহার করে, আপনি একটি নতুন প্যাকেজ যোগ করতে পারেন (যোগ করুন) বা বিদ্যমান একটিকে সরান (সরান)৷ মুছে ফেলার অর্থ ডিস্ক থেকে একটি ফাইলকে শারীরিকভাবে মুছে ফেলা নয়, বরং এই প্যাকেজের উন্নয়ন পরিবেশ থেকে লিঙ্কটি সরিয়ে ফেলা। আপনি যখন একটি নতুন প্যাকেজ যুক্ত করেন, এতে সংরক্ষিত উপাদানগুলি প্যালেটে উপস্থিত হয়, কিন্তু যখন আপনি এটি মুছে ফেলেন, বিপরীতভাবে, তারা অদৃশ্য হয়ে যায়। একটি প্যাকেজ মুছে ফেলার পরিবর্তে, আপনি তালিকার প্যাকেজের নামটি আনচেক করে উন্নয়ন পর্যায়ে এর বিষয়বস্তু "লুকাতে" পারেন৷ আপনি উপাদান এবং তাদের আইকন (উপাদান) দেখতে পারেন। অবশেষে, আপনি ব্যবহারকারী-সংযোজিত প্যাকেজগুলি সম্পাদনা করতে পারেন (সম্পাদনা) - ডেলফির সাথে আসা প্যাকেজগুলি সম্পাদনা করা যায় না (সম্পাদনা বোতামটি ধূসর হয়ে গেছে)।

এই ডায়ালগে, আপনি কীভাবে প্রজেক্ট তৈরি করবেন তা উল্লেখ করতে পারেন: রানটাইম প্যাকেজ ব্যবহার করে বা সেগুলি ছাড়া। এটি থেকে স্পষ্ট যে দুটি ধরণের উপাদান প্যাকেজ রয়েছে: রানটাইম প্যাকেজ (প্যাকেজ যা রানটাইমে কাজ করে) এবং ডিজাইন-টাইম প্যাকেজ (উন্নয়নের সময় ব্যবহৃত প্যাকেজ)। তারা সব DLL (গতিশীল লোড লাইব্রেরি) হয়.

রানটাইম প্যাকেজগুলি (*.bpl এক্সটেনশন) প্রকল্পের সাথে শেষ ব্যবহারকারীর কাছে বিতরণ করা হয় যদি প্রকল্পটি রানটাইম প্যাকেজগুলির সাথে তৈরি বিকল্পটি সক্ষম করে কম্পাইল করা হয়। এই ক্ষেত্রে অ্যাপ্লিকেশনটি নিজেই (*.exe বা *.dll) ছোট হতে দেখা যায়, তবে বরং বড় *.bpl ফাইলগুলিকে এটির সাথে স্থানান্তর করতে হবে। বিশেষজ্ঞদের মতে, রানটাইম প্যাকেজ সহ একটি প্রকল্প সরবরাহ করা হলে সরবরাহকৃত ফাইলের পরিমাণে একটি সুবিধা পাওয়া যায়, শুধুমাত্র যদি এতে ডেলফিতে লেখা পাঁচ বা তার বেশি মডিউল (*.exe বা *.dll) অন্তর্ভুক্ত থাকে। যখন এই মডিউলগুলি একসাথে কাজ করে, তখন অপারেটিং সিস্টেমের সংস্থানগুলি সংরক্ষণ করা হয়, যেহেতু RAM এ লোড করা একটি প্যাকেজ বেশ কয়েকটি মডিউল পরিবেশন করে।

ডিজাইন-টাইম প্যাকেজ (*.dcp এক্সটেনশন) শুধুমাত্র উন্নয়ন পর্যায়ে ব্যবহার করা হয়। বিকাশের সময়, তারা একটি ফর্মে উপাদান তৈরি করতে সমর্থন করে। সংকলিত ডেলফি প্রকল্পে কম্পোনেন্ট প্যাকেজ থেকে নয়, *.dcu ফাইল থেকে কোড অন্তর্ভুক্ত করা হয়েছে। যদিও *.dcp ফাইলটি *.dcu ফাইল থেকে তৈরি করা হয়, তবে তাদের বিষয়বস্তু একই নাও হতে পারে যদি *.pas ফাইলে পরিবর্তন করা হয় এবং প্যাকেজটি পুনরায় কম্পাইল করা না হয়। সংকলন শুধুমাত্র প্রোগ্রামার দ্বারা তৈরি প্যাকেজ জন্য সম্ভব. উপরের ডায়ালগে সম্পাদনা বোতামে ক্লিক করে এটি অর্জন করা হয়। এর পরে, একটি ফর্ম উপস্থিত হয় যা আপনাকে প্যাকেজটি পরিচালনা করতে দেয়।

প্যাকেজটিতে দুটি বিভাগ রয়েছে। ধারণ করে বিভাগে মডিউলগুলির একটি তালিকা রয়েছে যা এই প্যাকেজের উপাদানগুলি গঠন করে (*.pas- এবং *.dcu-files) এবং তাদের আইকনগুলি (*.dcr-files)। প্রয়োজনীয় বিভাগে এই উপাদানগুলির কাজ করার জন্য প্রয়োজনীয় অন্যান্য প্যাকেজের লিঙ্ক রয়েছে। প্যাকেজে একটি নতুন উপাদান যোগ করা যোগ বোতামের সাহায্যে সম্পন্ন করা হয়, এবং বিদ্যমান একটি অপসারণ করা হয় সরান বোতামের মাধ্যমে। কম্পাইল বোতামে ক্লিক করে প্যাকেজ সংকলিত না হওয়া পর্যন্ত, প্যাকেজে করা কোনো পরিবর্তন উন্নয়ন পরিবেশে প্রদর্শিত হবে না। শেষ পর্যন্ত, পূর্ববর্তী ডায়ালগে প্যাকেজের নাম আনচেক করে প্যাকেজের বিষয়বস্তু উন্নয়ন পরিবেশ থেকে সরানো হলে ইনস্টল কমান্ডটি উপলব্ধ হয়।

অপশন কমান্ড আপনাকে একটি প্যাকেজ কম্পাইল করার জন্য বিকল্পগুলি নির্বাচন করতে দেয় যা প্রজেক্ট বিকল্পগুলির অনুরূপ। প্রদত্ত প্যাকেজটি কী ধরণের প্যাকেজ তা নির্ধারণ করতে এগুলি ব্যবহার করা যেতে পারে: রান-টাইম, ডিজাইন-টাইম, বা উভয়ই (ডিফল্ট প্যাকেজ প্রকার)। বিকল্পগুলি প্রয়োজনীয় মডিউলগুলি অনুসন্ধান করতে এবং সংকলনের ফলাফলগুলি সংরক্ষণ করার জন্য ডিরেক্টরিগুলিকে সংজ্ঞায়িত করে। তারা ডিবাগিংয়ের জন্য প্রয়োজনীয় ক্রিয়াগুলিও সংজ্ঞায়িত করে: গ্রহণযোগ্য মানগুলির পরিসর পরীক্ষা করা উচিত কিনা, কীভাবে অপ্টিমাইজেশানগুলি সম্পাদন করতে হয়, কীভাবে I/O ত্রুটিগুলি পরিচালনা করতে হয়। অবশেষে, বিকল্পগুলি প্যাকেজ সংস্করণ তথ্য অন্তর্ভুক্ত করতে পারে। এটি অত্যন্ত গুরুত্বপূর্ণ যদি অ্যাপ্লিকেশনটি রানটাইম প্যাকেজগুলির সাথে বিতরণ করা হয়: ইনস্টলেশন প্রোগ্রাম চালানোর সময়, সংস্করণ তথ্য আপনাকে প্যাকেজের পুরানো সংস্করণগুলিকে সঠিকভাবে প্রতিস্থাপন করার অনুমতি দেবে এবং এর বিপরীতে, যদি আপনি পূর্ববর্তী সংস্করণের একটি প্যাকেজ ইনস্টল করার চেষ্টা করেন। একটি প্রদত্ত কম্পিউটারে ইতিমধ্যে উপলব্ধ, পরবর্তীটি ওভাররাইট করা হবে না।

উপাদান টেমপ্লেট

ডেলফি আপনাকে ডিজাইনের সময়ে একটি ফর্মে নির্বাচিত কয়েকটি সাধারণ উপাদান থেকে সাধারণ যৌগিক উপাদান তৈরি করতে দেয়। মেনু আইটেম উপাদান/কম্পোনেন্ট টেমপ্লেট তৈরি করুন ব্যবহার করে সংশ্লিষ্ট বিশেষজ্ঞকে ডাকা হয়। এই মেনু আইটেমটি পাওয়া যায় যদি ফর্মটিতে অন্তত একটি উপাদান নির্বাচন করা হয়। এটি নির্বাচন করার পরে, কম্পোনেন্ট টেমপ্লেট তথ্য ডায়ালগ বক্স প্রদর্শিত হবে।

এই ডায়ালগে, আপনাকে ক্লাসের নাম এবং কম্পোনেন্ট প্যালেটে পৃষ্ঠার নাম উল্লেখ করতে হবে যেখানে নতুন কম্পোনেন্ট স্থাপন করা হবে। এই নামের একটি পৃষ্ঠা উপাদান প্যালেটে না থাকলে, এটি তৈরি করা হবে। আপনি একটি উপযুক্ত *.bmp ফাইল আপলোড করে নতুন উপাদানের জন্য প্রস্তাবিত আইকন পরিবর্তন করতে পারেন।

যখন একটি টেমপ্লেট তৈরি করা হয়, তখন অবজেক্ট ইন্সপেক্টরে প্রোগ্রামার দ্বারা পরিবর্তিত বৈশিষ্ট্য এবং নির্বাচিত নিয়ন্ত্রণের সাথে যুক্ত ইভেন্ট হ্যান্ডলার উভয়ই মনে রাখা হয়। এই ক্ষেত্রে, অন্যান্য (ফর্মে নির্বাচিত নয়) উপাদান, গ্লোবাল ভেরিয়েবল, পদ্ধতি ইত্যাদিতে কল ফিল্টার না করে ইভেন্ট হ্যান্ডলারদের সম্পূর্ণরূপে মনে রাখা হয়। তদনুসারে, যদি অন্য প্রকল্পে এই জাতীয় উপাদানগুলি (ভেরিয়েবল, পদ্ধতি) অনুপস্থিত থাকে, তবে এই জাতীয় প্রকল্প কম্পাইল করার চেষ্টা করার সময়, অজানা শনাক্তকারী ডায়াগনস্টিক বার্তাটি প্রাপ্ত হবে।

আপনি কখন টেমপ্লেট ব্যবহার করা উচিত? প্রথমত, বেস ক্লাসে ডিফল্টরূপে উপলব্ধ যে কোনও বৈশিষ্ট্য পরিবর্তন করা প্রয়োজন এমন ক্ষেত্রে। উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন হলুদ পাঠ্যের একটি লাইন সম্পাদনা করতে একটি নিয়ন্ত্রণ ব্যবহার করে। আপনি ফর্মটিতে TEdit উপাদান রাখতে পারেন, রঙের বৈশিষ্ট্যটি হলুদে পরিবর্তন করতে পারেন, এই উপাদানটিকে চিহ্নিত করতে পারেন এবং এটিকে একটি টেমপ্লেট হিসাবে সংরক্ষণ করতে পারেন। এর পরে, আপনি এই টেমপ্লেটটি অ্যাক্সেস করতে পারেন, এবং ফর্মটিতে স্থাপিত উপাদানটির একটি হলুদ রঙ থাকবে। যাইহোক, আপনার এই সুযোগের অপব্যবহার করা উচিত নয়, কারণ পরিবর্তিত রঙের সাথে নিয়ন্ত্রণের জন্য একটি নতুন ক্লাস তৈরি করা হবে এবং সমস্ত ভার্চুয়াল পদ্ধতি মেমরিতে নকল করা হবে। এটি অপারেটিং সিস্টেম সংস্থানগুলির উপর নেতিবাচক প্রভাব ফেলবে।

যখন আপনাকে ইভেন্ট হ্যান্ডলারের সাথে এক ফর্ম থেকে অন্য ফর্মে অনেকগুলি উপাদান স্থানান্তর করতে হবে তখন উপাদান টেমপ্লেটগুলি ব্যবহার করাও সুবিধাজনক। এটি করার জন্য, তারা সব নির্বাচিত হয়, একটি উপাদান টেমপ্লেট তৈরি করা হয়, যা একটি নতুন ফর্ম উপর স্থাপন করা হয়। এই ক্ষেত্রে, শুধুমাত্র উপাদানগুলিই স্থানান্তরিত হবে না, ইভেন্ট হ্যান্ডলারগুলিও স্থানান্তরিত হবে, যা কপি/পেস্ট কমান্ডগুলি কল করার সময় অর্জন করা যাবে না - পরবর্তী ক্ষেত্রে, ইভেন্ট হ্যান্ডলারগুলি হারিয়ে যাবে৷

কম্পোনেন্ট টেমপ্লেট তৈরি করুন কমান্ড ব্যবহার করে তৈরি উপাদানগুলি স্ট্যান্ডার্ড পদ্ধতি ব্যবহার করে তৈরি করা নিয়মিত উপাদানগুলির থেকে বেশ আলাদা (নীচে বর্ণিত)। দৃশ্যত, প্রধান পার্থক্যটি হল: যদি একটি টেমপ্লেটটিতে বেশ কয়েকটি নিয়ন্ত্রণ অন্তর্ভুক্ত থাকে, তবে ফর্মটিতে এই জাতীয় উপাদান স্থাপন করার পরে, আপনি একটি স্বতন্ত্র নিয়ন্ত্রণ নির্বাচন করতে পারেন এবং এটি মুছতে পারেন - বাকিগুলি ফর্মে থাকবে। স্ট্যান্ডার্ড উপাদানগুলির জন্য, যদি তারা বেশ কয়েকটি নিয়ন্ত্রণ অন্তর্ভুক্ত করে, তবে তাদের মধ্যে একটি নির্বাচন করা এবং এটি মুছে ফেলা সম্ভব নয় - উপাদানটি নির্বাচন করা হয় এবং সম্পূর্ণরূপে মুছে ফেলা হয়।

একটি সাধারণ উপাদান তৈরি করা

একটি নতুন উপাদান লেখার সময়, আপনাকে স্পষ্ট হতে হবে যে উপাদানটি প্রোগ্রামারদের জন্য লেখা হচ্ছে, শেষ ব্যবহারকারীদের জন্য নয়। এই ক্ষেত্রে, এটি বাঞ্ছনীয় যে প্রোগ্রামার কম্পোনেন্টের বাস্তবায়নের বিশদটি অনুসন্ধান করে না, তবে কেবল এটি দ্বারা প্রকাশিত বৈশিষ্ট্য এবং ঘটনাগুলি ব্যবহার করে। এটি অত্যন্ত পুঙ্খানুপুঙ্খ পরীক্ষার মাধ্যমে অর্জন করা হয়। এমন পরিস্থিতিতেও একটি নতুন উপাদান পরীক্ষা করা আবশ্যক যার জন্য এটি পরিষ্কারভাবে ডিজাইন করা হয়নি।

আসুন নিম্নরূপ সমস্যা জাহির করা যাক. আপনাকে একটি বোতাম তৈরি করতে হবে যা চাপলে বীপ হবে, এবং এটি একটি উপাদান হিসাবে প্রয়োগ করুন যাতে প্রোগ্রামার এটিকে একটি ফর্মে স্থাপন করতে পারে এবং এটি ব্যবহার করতে পারে। সাধারণভাবে, উপাদানগুলি বিবেচনা করার সময়, আমরা প্রায়শই সহজ বাহ্যিক প্রভাবগুলি ব্যবহার করব: বিপিং, একটি বার্তা প্রদর্শন করা ইত্যাদি। এটি বোঝায় যে সেই জায়গাগুলিতে যেখানে বাহ্যিক প্রভাবগুলি ব্যবহার করা হয়, যে কোনও মোটামুটি জটিল কোড স্থাপন করা যেতে পারে। আমরা এই মুহূর্তে তার প্রতি আগ্রহী নই।

একটি উপাদান তৈরি করা উপাদান/নতুন উপাদান মেনু আইটেম নির্বাচন করে শুরু হয়। এর পরে, নতুন উপাদান ডায়ালগ অবিলম্বে প্রদর্শিত হবে।

এই কথোপকথনে, আপনাকে পূর্বপুরুষের শ্রেণী, নতুন তৈরি করা শ্রেণীর নাম, প্যালেটের পৃষ্ঠা যেখানে নতুন উপাদান স্থাপন করা হবে, নতুন উপাদানের বাস্তবায়ন সম্বলিত মডিউলের নাম এবং এর পথ নির্ধারণ করতে হবে এটা যদি নতুন উপাদান অন্যান্য মডিউল ব্যবহার করে, যে পথটি বর্ণনা করা হয় না, সেগুলি অবশ্যই অনুসন্ধান পথ ক্ষেত্রে সংজ্ঞায়িত করতে হবে।

সুতরাং, প্রথম (এবং, সম্ভবত, প্রধান) কাজটি একটি পূর্বপুরুষ শ্রেণী নির্বাচন করা। ড্রপ-ডাউন তালিকায়, প্যালেটে উপলব্ধ সমস্ত উপাদানকে পূর্বপুরুষ শ্রেণী হিসাবে দেওয়া হয়, যেগুলি স্ট্যান্ডার্ড ডেলফি বিতরণে অন্তর্ভুক্ত নয়। পূর্বপুরুষের শ্রেণী হিসাবে এমন একটি শ্রেণী নির্বাচন করা প্রয়োজন যা যতটা সম্ভব বৈশিষ্ট্যের সাথে তৈরি করা হচ্ছে। আমাদের কাজের জন্য, আমরা, উদাহরণস্বরূপ, পূর্বপুরুষ হিসাবে TWinControl নির্বাচন করতে পারি, তবে এই ক্ষেত্রে আমাদের বোতাম ক্লিকের সমস্ত ভিজ্যুয়াল প্রভাব প্রয়োগ করতে হবে, ইত্যাদি। অতএব, আমরা পূর্বপুরুষ হিসাবে TButton বেছে নিই।

নতুন তৈরি ক্লাসের নাম অবশ্যই উপাদানটির বিষয়বস্তুকে প্রতিফলিত করবে এবং কোনও ক্ষেত্রেই ইতিমধ্যে নিবন্ধিত উপাদানের নামের সাথে মিলবে না! এই সংলাপটি পূরণ করার পর্যায়ে, ম্যাচগুলির জন্য নামগুলি পরীক্ষা করা হয় না - এই জাতীয় ত্রুটির সাথে যুক্ত অ্যাডভেঞ্চারগুলি পরে শুরু হবে...

একটি পৃষ্ঠা নির্বাচন করার সময়, আপনাকে জানতে হবে যে আপনি যদি একটি অস্তিত্বহীন পৃষ্ঠার নাম উল্লেখ করেন তবে একটি নতুন তৈরি করা হবে।

অবশেষে, আপনি যখন ইন্সটল এবং ওকে উভয় বোতামে ক্লিক করেন, তখন নতুন উপাদান বাস্তবায়নের জন্য একটি টেমপ্লেট তৈরি করা হবে। যাইহোক, আপনি যখন ইন্সটল বোতামে ক্লিক করেন, টেমপ্লেটটি কম্পোনেন্ট প্যালেটে স্থাপন করা হবে এবং যখন আপনি ঠিক আছে ক্লিক করেন, তখন এটি সহজভাবে তৈরি হয়। এটি ইনস্টল বোতাম ব্যবহার করার জন্য সুপারিশ করা হয়. উপাদান ইনস্টল করার পরে, এটি ফর্মের উপর স্থাপন করা যেতে পারে। এখন কম্পোনেন্ট ইমপ্লিমেন্টেশন কোডে করা সমস্ত পরিবর্তন প্রকল্পের সাথে কম্পাইল করা হবে এবং প্রোগ্রামার অবিলম্বে ত্রুটি বার্তা পাবেন। যদি কম্পোনেন্টটি ইনস্টল করা না থাকে, তবে ত্রুটিগুলি খুঁজে পেতে এটিকে কম্পাইল বোতামে ক্লিক করে প্যাকেজ সম্পাদক (উপরে দেখুন) এর মাধ্যমে কম্পাইল করতে হবে, যা কম সুবিধাজনক।

সুতরাং, ইনস্টল বোতামটি ক্লিক করার পরে, আরেকটি ডায়ালগ উপস্থিত হয়, যা আপনাকে প্যাকেজটি নির্ধারণ করতে দেয় যেখানে এই উপাদানটি স্থাপন করা হবে।

এই ডায়ালগে দুটি পৃষ্ঠা রয়েছে, যার প্রথমটিতে আপনি বিদ্যমান প্যাকেজগুলির মধ্যে একটি নির্বাচন করতে পারেন এবং দ্বিতীয়টিতে আপনি একটি নতুন তৈরি করতে পারেন। প্যাকেজের একটি সংক্ষিপ্ত পাঠ্য বিবরণ প্রদান করা অত্যন্ত যুক্তিযুক্ত; উপাদান/ইনস্টল প্যাকেজ কমান্ড (উপরে দেখুন) দ্বারা বলা ডায়ালগে এটিই দেখানো হবে। একটি প্যাকেজ নির্বাচন করে ওকে বোতাম টিপানোর পরে, প্যাকেজ সম্পাদককে ডাকা হয়, যেখানে নতুন উপাদান বাস্তবায়নের জন্য নতুন তৈরি মডিউলটি স্বয়ংক্রিয়ভাবে স্থাপন করা হয়। এটি বন্ধ না করা, তবে এটিকে স্ক্রিনের একটি কোণে নিয়ে যাওয়া দরকারী যাতে এটি মাউস বোতাম টিপে সক্রিয় করা যায়।

একই সময়ে, নতুন উপাদান বর্ণনা করতে কোড এডিটরে একটি "ফাঁকা" তৈরি করা হবে:

ইউনিট বাটনবিপ; ইন্টারফেস Windows, Messages, SysUtils, ক্লাস, গ্রাফিক্স, কন্ট্রোল, ফর্ম, ডায়ালগ, StdCtrls ব্যবহার করে; TButtonBeep = class(TButton) ব্যক্তিগত (ব্যক্তিগত ঘোষণা) সুরক্ষিত (সুরক্ষিত ঘোষণা) সর্বজনীন (সর্বজনীন ঘোষণা) প্রকাশিত (প্রকাশিত ঘোষণা) শেষ; পদ্ধতি নিবন্ধন; বাস্তবায়ন পদ্ধতি নিবন্ধন; শুরু রেজিস্টার কম্পোনেন্টস("নমুনা",); শেষ; শেষ.

নতুন ক্লাস নিজেই চারটি বিভাগ ঘোষণা করে, যার অর্থ এই সিরিজের পূর্ববর্তী নিবন্ধের "ভেরিয়েবল এবং পদ্ধতিগুলির দৃশ্যমানতা" বিভাগে বিশদভাবে বর্ণনা করা হয়েছে (কম্পিউটারপ্রেস নং 1 "2001)। উপরন্তু, নতুন ক্লাস সংজ্ঞায়িত করে নিবন্ধন পদ্ধতি, যা এই মডিউলটি একটি উপাদান হিসাবে ইনস্টল করার সময় ডেলফি উন্নয়ন পরিবেশ দ্বারা বলা হয়। এতে প্যালেটের পৃষ্ঠার নাম রয়েছে যেখানে এই উপাদানটি স্থাপন করা হয়েছে এবং বর্গাকার বন্ধনীতে - ক্লাসের নাম। সাধারণভাবে, রেজিস্টার পদ্ধতিটি একটি প্যারামিটার হিসাবে শ্রেণির ধরনগুলির একটি অ্যারে নেয়, কারণ একটি মডিউলে বেশ কয়েকটি উপাদান প্রয়োগ করা যেতে পারে৷ তাই, সেগুলি একটি কমা দ্বারা পৃথক করা হয়, উদাহরণস্বরূপ:

পদ্ধতি রেজিস্টার; শুরু রেজিস্টার কম্পোনেন্টস("নমুনা",); শেষ;

আসুন হাতে থাকা টাস্কটি সমাধান করা চালিয়ে যাই - একটি বোতাম তৈরি করা যা একটি চিৎকার করে। প্রথমে, আসুন কিছু তুচ্ছ করি (কিন্তু এটি পরে দেখা যায়, ভুলভাবে) - বোতাম কনস্ট্রাক্টরে একটি OnClick ইভেন্ট হ্যান্ডলার বরাদ্দ করুন। এটি করার জন্য, ব্যক্তিগত বিভাগে, আমরা নতুন পদ্ধতি BtClick(Sender:TObject) এর শিরোনামটি সংজ্ঞায়িত করি এবং এটি বাস্তবায়ন বিভাগে প্রয়োগ করি:

পদ্ধতি TButtonBeep.BtClick(প্রেরক:TObject); beginBeep; শেষ;

কনস্ট্রাক্টর ক্রিয়েট(Awner:TCcomponent); অগ্রাহ্য করা;

একটি বাধ্যতামূলক ওভাররাইড নির্দেশিকা সহ! এর বাস্তবায়ন বিভাগে এটি বাস্তবায়ন করা যাক:

কনস্ট্রাক্টর TButtonBeep.Create(AOwner:TCcomponent); শুরু উত্তরাধিকারসূত্রে তৈরি করুন(AOwner); OnClick:=BtClick; শেষ;

এর পরে, আসুন উপাদানটি কম্পাইল করি। আসুন নমুনা পৃষ্ঠা থেকে ফর্মটিতে একটি বোতাম রাখি এবং বাস্তবায়নের জন্য প্রকল্পটি চালাই। আপনি নিশ্চিত করতে পারেন যে বোতামটি চাপলে বীপ হয়!

এখন ডেভেলপমেন্ট এনভায়রনমেন্টে ফিরে যাই এবং অবজেক্ট ইন্সপেক্টরে একটি OnClick ইভেন্ট হ্যান্ডলার বরাদ্দ করি। ইভেন্ট হ্যান্ডলারে, আমরা ফর্ম শিরোনামে পাঠ্য প্রদর্শন করব:

পদ্ধতি TForm1.ButtonBeep1Click(প্রেরক:TObject); শুরু ক্যাপশন:="পরীক্ষা"; শেষ;

এর প্রজেক্ট রান করা যাক এবং বোতাম টিপুন চেষ্টা করুন. ফর্ম শিরোনাম পরিবর্তন, কিন্তু বোতাম বীপ বন্ধ! ত্রুটি হল যে আমরা OnClick বোতামের একটি ইভেন্টের জন্য দুটি হ্যান্ডলার সংজ্ঞায়িত করার চেষ্টা করেছি: একটি BtClick উপাদানের ভিতরে, এবং অন্যটি অবজেক্ট ইন্সপেক্টর ব্যবহার করে বরাদ্দ করা হয়েছে। TButtonBeep কনস্ট্রাক্টর কাজ করার পরে, আমাদের প্রথম BtClick হ্যান্ডলারের সাথে একটি লিঙ্ক ছিল। তারপরে সংস্থানগুলি লোড করা হয়, এবং ButtonBeep1Click পদ্ধতিটি OnClick ইভেন্ট হ্যান্ডলারকে বরাদ্দ করা হয়। এই ক্ষেত্রে, প্রথম হ্যান্ডলারের লিঙ্ক - BtClick - অপরিবর্তনীয়ভাবে হারিয়ে গেছে।

অতএব, নতুন উপাদান লেখার সময়, আপনার সর্বদা অবজেক্ট ইন্সপেক্টর ব্যবহার করে বৈশিষ্ট্য এবং ইভেন্ট হ্যান্ডলার পরিবর্তন করার কথা বিবেচনা করা উচিত। যদি একটি সম্পত্তি (ইভেন্ট) পরিবর্তন করা উচিত নয়, এটি অবজেক্ট ইন্সপেক্টরে দেখানো উচিত নয়। এবং যদি এটি ইতিমধ্যে দৃশ্যমান হয়, তাহলে আপনার এটি লুকানো উচিত (আমরা এটি সম্পর্কে পরে কথা বলব)। অবজেক্ট ইন্সপেক্টরের যেকোনো বৈশিষ্ট্য পরিবর্তন করার অধিকার প্রোগ্রামারের আছে এবং এর পরে যদি কম্পোনেন্ট কাজ করা বন্ধ করে দেয়, তাহলে কম্পোনেন্টের ডেভেলপারকে দায়ী করা হবে, কিন্তু কোনো ক্ষেত্রেই প্রোগ্রামার এটি ব্যবহার করছে না।

কিভাবে আমরা এই সমস্যাটি সঠিকভাবে সমাধান করতে পারি? উপাদান তৈরি করার একটি উপায় হল বিদ্যমান পদ্ধতি পুনর্লিখন করা। StdCtrls.pas ফাইলটি দেখার সময়, যেখানে TButton উপাদানটির জন্য সোর্স কোড প্রয়োগ করা হয়েছে, আপনি লক্ষ্য করতে পারেন যে এটিতে একটি গতিশীল ক্লিক পদ্ধতি রয়েছে যা পুনরায় লেখা যেতে পারে। অতএব, আমরা কম্পোনেন্ট তৈরি করার সময় ডেলফি বিশেষজ্ঞের তৈরি সোর্স কোডে আবার ফিরে আসি (আমরা কনস্ট্রাক্টর এবং BtClick পদ্ধতিটি সরিয়ে ফেলি)। তারপর পাবলিক বিভাগে আমরা পদ্ধতির শিরোনামটি সংজ্ঞায়িত করি:

প্রক্রিয়া ক্লিক করুন; অগ্রাহ্য করা;

এবং এখানে পদ্ধতির বাস্তবায়ন হল:

পদ্ধতি TButtonBeep. ক্লিক করুন; শুরু ইনহেরিটেড ক্লিক; বীপ শেষ;

আপনি যাচাই করতে পারেন যে বোতাম টিপলে একটি চিৎকার করে। উপরন্তু, অবজেক্ট ইন্সপেক্টরে একটি ইভেন্ট হ্যান্ডলার নিয়োগ করার সময়, এই হ্যান্ডলারটি কার্যকর করা হয় এবং বীপ অদৃশ্য হয় না! উপাদান সঠিকভাবে প্রয়োগ করা হয়.

এই উদাহরণটি ব্যবহার করে, কোড লেখার সময় সম্ভাব্য ত্রুটিগুলি বিশ্লেষণ করা দরকারী:

  1. ক্লিক পদ্ধতি শিরোনাম সংজ্ঞায়িত করার সময় ভুলে যাওয়া ওভাররাইড নির্দেশিকা। বোতামটি বিপ করা বন্ধ করে, তাই ক্লিক পদ্ধতি বলা হয় না।
  2. ক্লিক পদ্ধতির বাস্তবায়নে পূর্বপুরুষ পদ্ধতির (উত্তরাধিকারসূত্রে প্রাপ্ত ক্লিক) একটি ভুলে যাওয়া কল। বোতাম টিপলে বীপ হতে থাকে, কিন্তু অবজেক্ট ইন্সপেক্টরে নির্ধারিত ইভেন্ট হ্যান্ডলারের কোডটি কার্যকর হয় না। তাই, TButton ক্লাসের ক্লিক পদ্ধতি OnClick ইভেন্টকে উত্থাপন করে।

এখন প্যালেটে TButtonBeep উপাদানটির আইকন পরিবর্তন করা যাক। ডিফল্টরূপে, পূর্বপুরুষ উপাদানের আইকন একটি নতুন উপাদানের জন্য ব্যবহৃত হয়। এটি করার জন্য, টুলস/ইমেজ এডিটর কমান্ড ব্যবহার করে ইমেজ এডিটরকে কল করুন। সম্পাদকে, ফাইল/নতুন/কম্পোনেন্ট রিসোর্স ফাইল (*.dcr) কমান্ডটি কল করুন। রিসোর্স/নতুন/বিটম্যাপ কমান্ডের পরে, একটি ডায়ালগ প্রদর্শিত হবে যা 32x32 এর একটি আইকন আকারের পরামর্শ দেবে। এই ডিফল্ট আকারগুলি 24x24 তে পরিবর্তন করা উচিত - এটি এমন আকার যা উপাদান আইকনগুলিতে থাকা আবশ্যক! ঠিক আছে ক্লিক করার পরে, আপনার অনুরূপ মানক সরঞ্জাম ব্যবহার করে একটি চিত্র আঁকতে হবে পেইন্ট সম্পাদক. মনে রাখবেন যে নীচের বাম পিক্সেলের রঙটি মুখোশের রঙ - এই রঙটি "স্বচ্ছ" হবে।

এর পরে, আপনাকে আইকনের সাথে সংস্থানটির নাম পুনরায় সংজ্ঞায়িত করতে হবে; ডিফল্টরূপে, এর নাম বিটম্যাপ 1। নতুন সম্পদের নাম অবশ্যই ক্লাসের নামের সাথে মিলবে - আমাদের ক্ষেত্রে TButtonBeep।

এখন আপনাকে আইকন ফাইলটিকে একই ডিরেক্টরিতে সংরক্ষণ করতে হবে যে মডিউলটিতে এই উপাদানটির জন্য নিবন্ধন পদ্ধতি রয়েছে এবং মডিউল নামের একই নামের সাথে। শুধুমাত্র ফাইল এক্সটেনশনটি *.pas নয়, *.dcr হবে। কম্পোনেন্ট আইকন সহ ফাইলটি প্রস্তুত। যাইহোক, যদি আমরা কম্পোনেন্টস প্যালেটটি দেখি, আমরা দেখতে পাব যে পুরানো আইকনটি এখনও আছে। আপনি যদি ডেলফি বা এমনকি অপারেটিং সিস্টেমটি পুনরায় চালু করেন তবে পুরানো আইকনটি এখনও প্যালেটে থাকবে। আইকন পরিবর্তন করার জন্য, উপাদান পুনরায় নিবন্ধিত করা আবশ্যক. এটি করার জন্য আপনার প্রয়োজন:

এই উদাহরণ একটি পরীক্ষা ব্যায়াম বিবেচনা করা উচিত. একটি নতুন উপাদান লেখার আগে, আপনাকে দেখতে হবে যে অনুরূপগুলি অবাধে বিতরণ করা উপাদানগুলির মধ্যে বিদ্যমান কিনা। প্রায় কোন বোতাম আছে: স্বচ্ছ, দূরে, বৃত্তাকার, রঙিন, ইত্যাদি। পরিস্থিতি অন্যান্য উপাদানগুলির সাথে প্রায় একই - একই শ্রেণীর বংশধর। অতএব, প্রায়শই আপনাকে বিভিন্ন নিয়ন্ত্রণ সমন্বিত উপাদানগুলি বাস্তবায়ন করতে হবে।

সুতরাং, এই উদাহরণে আমরা নতুন উপাদান তৈরি করতে পদ্ধতি পুনর্লিখনের ব্যবহার অন্বেষণ করেছি।

একটি জটিল উপাদান তৈরি করা

ধরা যাক আপনাকে একটি অ্যাপ্লিকেশনে গ্রাহকের নামের তালিকা লিখতে হবে। একই অ্যাপ্লিকেশনে আপনাকে টেলিফোন নম্বরগুলির একটি তালিকাও লিখতে হবে। একটি তালিকা প্রবেশ করা একটি মোটামুটি সাধারণ ক্রিয়াকলাপ, তাই আপনার এটি একটি উপাদান হিসাবে প্রয়োগ করা বিবেচনা করা উচিত।

তালিকায় একটি নতুন উপাদান প্রবেশ করতে, আপনার একটি সম্পাদকের প্রয়োজন হবে - TEdit উপাদান। এর পরে, ব্যবহারকারীর তালিকাটি দেখতে সক্ষম হওয়া উচিত - TListBox উপাদানটির প্রয়োজন হবে। উপরন্তু, আপনার TEdit থেকে তালিকায় বর্তমান মান লিখতে, নির্বাচিত তালিকা আইটেম সম্পাদনা করতে এবং এটি মুছে ফেলার জন্য কমান্ডের প্রয়োজন হবে। এই কমান্ডগুলি বাস্তবায়নের সবচেয়ে সহজ উপায় হল বোতাম ব্যবহার করা। কাজটি সহজ করার জন্য, আমরা ফর্মটিতে একটি বোতাম রাখব, যখন ক্লিক করা হবে তখন আমরা তালিকায় TEdit উপাদানের বিষয়বস্তু যুক্ত করব।

তাই আমাদের একটি নতুন উপাদান তৈরি করতে হবে যাতে একটি TEdit, একটি TListBox এবং একটি TButton অন্তর্ভুক্ত থাকে। সর্বদা হিসাবে, আসুন কম্পোনেন্ট/নতুন কম্পোনেন্ট কমান্ড দিয়ে এটি তৈরি করা শুরু করি। এর পরে, একটি ডায়ালগ প্রদর্শিত হবে যেখানে আপনাকে পূর্বপুরুষ শ্রেণি, শ্রেণির নাম এবং মডিউলের নাম নির্ধারণ করতে হবে। ক্লাসের নাম এবং মডিউলের নামের সাথে কোন অসুবিধা নেই, তবে পূর্বপুরুষ শ্রেণীর নামটি অস্পষ্ট। আমাদের তিনটি নিয়ন্ত্রণ আছে। তাদের জন্য সাধারণ পূর্বপুরুষ শ্রেণী হল TWinControl. কিন্তু যদি আমরা এটিকে পূর্বপুরুষের শ্রেণী হিসেবে বেছে নিই, তাহলে আমরা TButton, TEdit এবং TListBox কোডের একটি দীর্ঘ এবং ক্লান্তিকর বাস্তবায়নের সম্মুখীন হই। এই ধরনের ক্ষেত্রে, একটি পূর্বপুরুষ শ্রেণী হিসাবে একটি উপাদান নির্বাচন করা প্রয়োজন যা অন্যান্য উপাদানগুলির সাথে সম্পর্কিত একটি "পিতা" হতে পারে। ডেলফির সাথে বিতরণ করা মানক উপাদানগুলির মধ্যে তিনটি রয়েছে: TPanel, TGroupBox, TScrollBox। প্যানেলটিকে পূর্বপুরুষের শ্রেণী হিসেবে নির্বাচন করা যাক, কিন্তু TPanel উপাদানটি নয়, বরং TCustomPanel ক্লাস। আমরা নীচে TPanel এর চেয়ে TCustomPanel বেছে নেওয়ার সুবিধা নিয়ে আলোচনা করব।

নতুন ক্লাসের নাম দিন TListAdd এবং Install বাটনে ক্লিক করুন। প্যাকেজটি নির্বাচন করার পরে, উপাদানটি প্যালেটে ইনস্টল করা হবে, যেখান থেকে এটি নতুন তৈরি অ্যাপ্লিকেশনের ফর্মে স্থাপন করা যেতে পারে। এটি সুবিধাজনক কারণ যখন প্রকল্পটি কম্পাইল করা হয়, তখন কম্পোনেন্ট মডিউলটিও কম্পাইল করা হবে এবং যদি ত্রুটি থাকে তবে কম্পাইলার একটি বার্তা প্রদর্শন করবে।

কিছু ফর্মে আমাদের নিয়ন্ত্রণ স্থাপন করা এবং তারপরে তাদের থেকে একটি উপাদান তৈরি করা সুবিধাজনক হবে। স্ট্যান্ডার্ড ডেলফি প্যাকেজে এমন কোন বিশেষজ্ঞ নেই। অতএব, আপনাকে নিজেই উপাদানগুলি তৈরি করতে হবে এবং সেগুলিকে প্যানেলে রাখতে হবে। TCustomPanel কনস্ট্রাক্টরে - TButton, TEdit এবং TListBox - নিয়ন্ত্রণগুলি তৈরি করা যুক্তিসঙ্গত, যার জন্য স্পষ্টতই এটি পুনরায় লেখার প্রয়োজন। আপাতত, 100x100 বর্গক্ষেত্রে কন্ট্রোল রাখি। তাদের স্থানাঙ্কগুলিও কনস্ট্রাক্টরে নির্ধারণ করা দরকার। এটা মনে রাখা উচিত যে কোন কন্ট্রোল এলিমেন্টের কনস্ট্রাক্টর কাজ করার পরে, এটির এখনও একটি প্যারেন্ট নেই, অর্থাৎ, এটি জানে না যে এটি কোন উইন্ডোর সাথে উপরের বাম কোণের স্থানাঙ্কগুলি পরিমাপ করবে। অভিভাবক নেই এমন একটি শিশু উইন্ডোর স্থানাঙ্ক পরিবর্তন করার প্রচেষ্টা অবিলম্বে একটি ব্যতিক্রম নিক্ষেপ করবে৷ অতএব, কন্ট্রোলের কনস্ট্রাক্টরকে কল করার পর প্রথম অপারেটরকে এটিকে একটি অভিভাবক হিসেবে বরাদ্দ করতে হবে, যার জন্য আমরা TCustomPanel নির্বাচন করব। আমরা এটিকে তাদের মালিকও করব, এই ক্ষেত্রে ধ্বংসকারীকে পুনরায় লেখার প্রয়োজন হবে না।

সুতরাং, ব্যবহার বিভাগে আমরা StdCtrls মডিউল যোগ করি, যেখানে TEdit, TButton এবং TListBox ক্লাসের বিবরণ রয়েছে এবং ব্যক্তিগত বিভাগে আমরা তিনটি ভেরিয়েবল সংজ্ঞায়িত করি:

ব্যক্তিগত ফেডিট:টিইডিট; FListBox: TListBox; FButton:TButton;

পাবলিক বিভাগে আমরা বাধ্যতামূলক ওভাররাইড নির্দেশের সাথে কনস্ট্রাক্টর হেডার ঘোষণা করি:

কনস্ট্রাক্টর ক্রিয়েট (AOwner:TCcomponent); অগ্রাহ্য করা;

আমরা বাস্তবায়ন বিভাগে কনস্ট্রাক্টর বাস্তবায়ন করি:

কনস্ট্রাক্টর TListAdd.Create(AOwner:TCcomponent); শুরু উত্তরাধিকারসূত্রে তৈরি করুন(AOwner); FButton:=TButton.Create(Self); FButton.Parent:=Self; FButton.Left:=5; FButton.Top:=5; FButton.Width:=40; FButton.Height:=25; FEdit:=TEdit.Create(Self); FEdit.Parent:=Self; FEdit.Left:=50; FEdit.Top:=5; FEdit.Width:=45; ফেডিট।উচ্চতা:=25; FListBox:=TListBox.Create(Self); FListBox.Parent:=Self; FListBox.Left:=5; FListBox.Top:=35; FListBox.Width:=90; FListBox.Height:=60; শেষ;

এটি আবারও জোর দেওয়া উচিত যে এই ক্ষেত্রে ধ্বংসকারীকে পুনরায় লেখার প্রয়োজন নেই: প্যানেলটি সমস্ত নিয়ন্ত্রণের মালিক এবং যখন এটির ধ্বংসকারীকে বলা হয়, তখন নিয়ন্ত্রণ ধ্বংসকারীকে স্বয়ংক্রিয়ভাবে বলা হবে।

প্যাকেজ এডিটর ব্যবহার করে কম্পোনেন্ট পুনরায় কম্পাইল করার পরে, কম্পোনেন্টের পরিবর্তনগুলি ইতিমধ্যেই দৃশ্যত, বিকাশের পর্যায়ে দেখা যায়।

কম্পোনেন্ট স্কেল করার সময় কন্ট্রোলের অপর্যাপ্ত আচরণ আপনার চোখে ধরা পড়ে এমন প্রথম ত্রুটি। এর মাত্রা পরিবর্তন করার সময়, উপাদানগুলির মাত্রা এবং অবস্থান পরিবর্তন হয় না। উপরন্তু, উপাদানটি ছোট করা যেতে পারে যাতে তিনটি নিয়ন্ত্রণ এতে ফিট হবে না। এবং অবশেষে, একটি সাধারণ মাউস ক্লিকের মাধ্যমে উপাদান প্যালেট থেকে একটি ফর্মের উপর একটি উপাদান ইনস্টল করার সময়, এর মাত্রাগুলিও কাঙ্খিত হতে অনেক কিছু ছেড়ে দেয়।

প্রথমে, আসুন কম্পোনেন্টগুলির ডিফল্ট মাপগুলি সংশোধন করি, অর্থাৎ, যেগুলি স্বয়ংক্রিয়ভাবে নির্ধারিত হয় যখন আপনি উপাদান প্যালেটে ক্লিক করেন এবং তারপর ফর্মটিতে ক্লিক করেন। এটি করার জন্য, আপনাকে কেবল কনস্ট্রাক্টরে নতুন প্যানেলের মাত্রা নির্দিষ্ট করতে হবে:

প্রস্থ:=100; উচ্চতা:=100;

তারপরে স্কেলিং করার সময় আপনাকে উপাদানটির আচরণ উন্নত করতে হবে। এটি করার জন্য, আপনাকে একটি বার্তা পেতে হবে যে মাত্রা পরিবর্তিত হয়েছে। যখন একটি নিয়ন্ত্রণের আকার পরিবর্তন হয়, সিস্টেম এটিতে একটি WM_SIZE বার্তা পাঠায়। এই বার্তাটি অবশ্যই আটকাতে হবে। এটি করার জন্য, ব্যক্তিগত বিভাগে আমরা বার্তা ইন্টারসেপ্টরের শিরোনামটি বর্ণনা করি:

পদ্ধতি WMSize(var বার্তা:Tmessage); WM_SIZE বার্তা;

এবং বাস্তবায়ন বিভাগে আমরা এর হ্যান্ডলার বাস্তবায়ন করি:

পদ্ধতি TListAdd.WMSize(var Message:TMessage); উত্তরাধিকারসূত্রে প্রাপ্ত; যদি প্রস্থ<100 then Width:=100; if Height<100 then Height:=100; FEdit.Width:=Width-55; FListBox.Width:=Width-10; FListBox.Height:=Height-40; end;

প্রথম বিবৃতিটি হল ডিফল্ট WM_SIZE হ্যান্ডলারের কাছে একটি কল (উত্তরাধিকারসূত্রে পাওয়া)। এটি কল করার পরে, প্রস্থ এবং উচ্চতা বৈশিষ্ট্যগুলি প্যানেলের নতুন প্রস্থ এবং উচ্চতা ধারণ করবে। এর পরে, উপাদানটির সর্বনিম্ন মাত্রা নির্ধারণ করা হয়, এই ক্ষেত্রে 100x100। যদি অনুভূমিক বা উল্লম্ব আকার ন্যূনতম থেকে কম হয়, তাহলে এটি সর্বনিম্ন মান নির্ধারণ করা হয়। তারপর নিয়ন্ত্রণগুলিকে স্কেল করা হয় যাতে তারা কিছু ইন্ডেন্টেশন দিয়ে পুরো প্যানেলটি পূরণ করে। প্যাকেজ এডিটরের মাধ্যমে কম্পোনেন্ট কম্পাইল করে, আপনি ইতিমধ্যেই ডেভেলপমেন্ট স্টেজে লক্ষ্য করতে পারেন যে প্যানেলের কন্ট্রোলগুলি স্কেল করার সময় সঠিকভাবে আচরণ করে এবং এটিও যে কম্পোনেন্টের আকার 100x100 এর কম করা যাবে না।

এখন পুরো প্রকল্পটি চালানোর জন্য এটি কার্যকর হবে, একটি এক-লাইন পাঠ্য সম্পাদকে ডেটা প্রবেশ করার চেষ্টা করুন এবং বোতামটি ক্লিক করুন। এই ক্ষেত্রে, তালিকায় কিছুই যোগ করা হয় না। এবং আশ্চর্যের বিষয় নয়, আমাদের উপাদানের কোথাও এটি নির্দিষ্ট করা নেই যে বোতাম টিপলে কী করা উচিত। একটি বোতামের ক্লিকের সাথে যুক্ত একটি ইভেন্ট হ্যান্ডলার তৈরি করার জন্য, আপনি TbuttonBeep উপাদানটি লেখার সময় এগিয়ে যেতে পারেন, অর্থাৎ, একটি নতুন শ্রেণী নির্ধারণ করুন - TButton-এর একটি বংশধর এবং ক্লিক পদ্ধতিটি পুনরায় লিখুন। যাইহোক, একটি নতুন ক্লাস সংজ্ঞায়িত করার জন্য সিস্টেম রিসোর্স প্রয়োজন (ভার্চুয়াল পদ্ধতি গুন করা হয়)। যদি আমরা ফর্মে উপাদানটিকে চিহ্নিত করি এবং অবজেক্ট ইন্সপেক্টরের দিকে তাকাই, আমরা দেখতে পাব যে TlistAdd উপাদানটি অনক্লিক বোতামের জন্য কোনো ইভেন্ট হ্যান্ডলার সহ কয়েকটি বৈশিষ্ট্য এবং কোনো ইভেন্ট প্রকাশ করে না। অতএব, আমরা গত অধ্যায়ে যা প্রত্যাখ্যান করেছি একটি ভুল পদ্ধতি হিসাবে, OnClick বোতাম হ্যান্ডলারকে পুনরায় সংজ্ঞায়িত করে, এই ক্ষেত্রে প্রযোজ্য, যেহেতু প্রোগ্রামার অবজেক্ট ইন্সপেক্টরে একটি নতুন হ্যান্ডলার বরাদ্দ করতে পারে না। সুতরাং, ব্যক্তিগত বিভাগে আমরা নতুন পদ্ধতির শিরোনামটি বর্ণনা করি:

পদ্ধতি BtClick(প্রেরক:TObject);

TListAdd কনস্ট্রাক্টর বাস্তবায়নে, আমরা এই হ্যান্ডলারটিকে FButton.OnClick ইভেন্ট হ্যান্ডলারে বরাদ্দ করি:

FButton.OnClick:=BtClick;

অবশেষে, আসুন BtClick পদ্ধতিটি বাস্তবায়ন করি:

পদ্ধতি TListAdd.BtClick(প্রেরক:TObject); শুরু করুন যদি দৈর্ঘ্য(FEdit.Text)>0 তারপর শুরু করুন FListBox.Items.Add(FEdit.Text); FEdit.Text:=""; FEdit.SetFocus; শেষ; শেষ;

প্রথমত, এক-লাইন সম্পাদক খালি কিনা তা পরীক্ষা করা যাক: আমরা তালিকায় খালি লাইন যোগ করব না। তারপরে আমরা সম্পাদকের বিষয়বস্তুগুলিকে তালিকায় স্থানান্তর করি (FListBox.Items.Add(FEdit.Text);) এবং পরবর্তী মান প্রবেশের জন্য সম্পাদককে প্রস্তুত করি - যথা, আমরা এটিকে পাঠ্য থেকে পরিষ্কার করি (যা ইতিমধ্যে তালিকায় স্থানান্তরিত হয়েছে) ) এবং এতে ইনপুট ফোকাস স্থানান্তর করুন। এখন, অ্যাপ্লিকেশনটি কম্পাইল এবং চালানোর পরে, আপনি নিশ্চিত করতে পারেন যে এটি সঠিকভাবে কাজ করে - যখন আপনি বোতাম টিপুন, তখন সম্পাদকের বিষয়বস্তু তালিকায় স্থানান্তরিত হয়।

বৈশিষ্ট্য এবং পদ্ধতি যোগ করা

আপনি যদি TListAdd কম্পোনেন্টের পাশে TPanel কম্পোনেন্ট রাখেন এবং অবজেক্ট ইন্সপেক্টরে যা দেখানো হয় তার তুলনা করেন, আপনি লক্ষ্য করবেন যে প্যানেলের জন্য মোটামুটি বড় সংখ্যক বৈশিষ্ট্য এবং ঘটনা উন্মোচিত হয়েছে, যখন TListAdd এর জন্য শুধুমাত্র কয়েকটি বৈশিষ্ট্য উন্মুক্ত করা হয়েছে। এদিকে, TCustomPanel ক্লাস উভয় উপাদানের পূর্বপুরুষ। কারণটি বোঝার জন্য, আসুন ExtCtrls.pas মডিউলটি খুলি এবং TCustomPanel এবং TPanel ক্লাসের মধ্যে পার্থক্য দেখি। এটি লক্ষ করা যেতে পারে যে প্যানেলের কার্যকারিতা প্রদান করে এমন সমস্ত পদ্ধতি এবং ভেরিয়েবলগুলি TCustomPanel ক্লাস স্তরে সংজ্ঞায়িত করা হয়েছে। এটি এমন বৈশিষ্ট্যগুলিকেও সংজ্ঞায়িত করে যা তারপরে TPanel-এর জন্য অবজেক্ট ইন্সপেক্টরে প্রদর্শিত হয়, শুধুমাত্র এই বৈশিষ্ট্যগুলি সুরক্ষিত বিভাগে সংজ্ঞায়িত করা হয়। TPanel শ্রেণীর বাস্তবায়ন অত্যন্ত সহজ: TCustomPanel একটি পূর্বপুরুষ হিসাবে সংজ্ঞায়িত করা হয়, এবং এই শ্রেণীর বৈশিষ্ট্য ঘোষণা করা হয়, কিন্তু প্রকাশিত বিভাগে। TcustomPanel ক্লাসের বৈশিষ্ট্য এবং পদ্ধতিগুলি অবজেক্ট ইন্সপেক্টরে প্রদর্শিত হওয়ার জন্য, যেমন বৈশিষ্ট্যগুলি ঘোষণা করার জন্য TListAdd ক্লাসে কী করা দরকার তা স্পষ্ট হয়ে যায়। TListAdd ক্লাসের প্রকাশিত বিভাগে আমরা লিখি:

সম্পত্তি সারিবদ্ধ; সম্পত্তি OnMouseDown;

একটি সম্পত্তি ঘোষণা করার সময়, আপনাকে এর ধরন বা রেফারেন্স ভেরিয়েবল বা সম্পত্তি পড়ার বা লেখার পদ্ধতি নির্দিষ্ট করতে হবে না। অবজেক্ট ইন্সপেক্টরে প্যাকেজ এডিটরের মাধ্যমে কম্পোনেন্ট কম্পাইল করার পর, আপনি অ্যালাইন প্রোপার্টি এবং OnMouseDown ইভেন্টের চেহারা পর্যবেক্ষণ করতে পারেন। সুতরাং, TCustom... ক্লাসের বংশধরদের জন্য, প্রোগ্রামারের কাছে কোন বৈশিষ্ট্য এবং ঘটনাগুলি অবজেক্ট ইন্সপেক্টরে প্রদর্শিত হবে এবং কোনটি নয় তা বেছে নেওয়ার সুযোগ রয়েছে৷ এই কারণেই TCustom... ক্লাসগুলিকে উপাদান তৈরির জন্য পূর্বপুরুষ হিসাবে ব্যবহার করার সুপারিশ করা হয়।

এখন আসুন দেখুন কিভাবে আপনি একটি নতুন সম্পত্তি প্রবর্তন করতে পারেন (আমরা উপরে যা করেছি তা হল বিদ্যমান সম্পত্তির পুনরায় ঘোষণা)। বোতামের পাঠ্য অবজেক্ট ইন্সপেক্টরে প্রদর্শনের জন্য একটি উপযুক্ত সম্পত্তি হিসাবে ব্যবহার করা যেতে পারে: TListAdd উপাদান ব্যবহার করে প্রোগ্রামারকে ডিজাইনের সময় পাঠ্য পরিবর্তন করতে দিন। একটি ঘোষণা ব্যবহার করে একটি নতুন সম্পত্তি (আসুন এটিকে BtCaption বলি) প্রবর্তনের চেষ্টা করা হচ্ছে:

প্রপার্টি BtCaption:স্ট্রিং পড়ুন FButton.Caption লিখুন FButton.Caption;

কম্পোনেন্ট কম্পাইল করার চেষ্টা করার সময় একটি ত্রুটি দেখা দেয়। অতএব, আমরা ব্যক্তিগত বিভাগে দুটি পদ্ধতির শিরোনাম সংজ্ঞায়িত করি:

ফাংশন GetBtCaption:string; পদ্ধতি SetBtCaption(const Value:string);

প্রকাশিত বিভাগে আমরা BtCaption সম্পত্তি ঘোষণা করি:

প্রপার্টি BtCaption:স্ট্রিং রিড GetBtCaption লিখুন SetBtCaption;

অবশেষে, আমরা বাস্তবায়ন বিভাগে দুটি ঘোষিত পদ্ধতি বাস্তবায়ন করি:

ফাংশন TListAdd.GetBtCaption:string; শুরু ফলাফল:=FButton.Caption; শেষ; পদ্ধতি TListAdd.SetBtCaption(const Value:string); start FButton. ক্যাপশন:=মান; শেষ;

প্যাকেজ সম্পাদক ব্যবহার করে একটি উপাদান কম্পাইল করার পরে, অবজেক্ট ইন্সপেক্টরে একটি নতুন সম্পত্তি উপস্থিত হয়। এই সম্পত্তির মান পরিবর্তন সরাসরি উন্নয়ন পর্যায়ে প্রতিফলিত হয়.

এখন একটি নতুন ঘটনা সংজ্ঞায়িত করা যাক. এই ক্ষেত্রে, একটি ইভেন্ট তৈরি করা যুক্তিসঙ্গত হবে যা এই উপাদানটি ব্যবহার করে প্রোগ্রামারকে তালিকায় সম্পাদকের বিষয়বস্তু যুক্ত করার আগে পাঠ্য বিশ্লেষণ করতে এবং তালিকায় পাঠ্য যোগ করার অনুমতি বা অক্ষম করার অনুমতি দেয়। অতএব, এই পদ্ধতিতে অবশ্যই একটি প্যারামিটার হিসাবে সম্পাদকের পাঠ্যের বর্তমান মান থাকতে হবে এবং এটি একটি বুলিয়ান ভেরিয়েবলের উপর নির্ভর করে, যা প্রোগ্রামার সত্য বা মিথ্যা মান নির্ধারণ করতে পারে। উপরন্তু, একটি কম্পোনেন্টের যেকোন ইভেন্ট হ্যান্ডলারকে অবশ্যই প্রেরক প্যারামিটারের উপর নির্ভর করতে হবে, যেখানে কম্পোনেন্ট যেটি এটিকে কল করে সেটি নিজেই একটি রেফারেন্স পাস করে। এটি প্রয়োজনীয় কারণ ডেলফি ডেভেলপমেন্ট এনভায়রনমেন্টে একই ইভেন্ট হ্যান্ডলারকে বিভিন্ন কম্পোনেন্ট থেকে কল করা যেতে পারে এবং প্রোগ্রামার অবশ্যই বিশ্লেষণ করতে সক্ষম হবেন যে কোন উপাদানটিকে হ্যান্ডলার বলা হয়। সুতরাং, ইন্টারফেস বিভাগে শব্দ প্রকারের পরে, TListAdd সংজ্ঞায়িত করার আগে, আমরা একটি নতুন পদ্ধতির ধরণ সংজ্ঞায়িত করি:

অবজেক্টের TFilterEvent=procedure(Sender:TObject; const EditText:string; var CanAdd:boolean) টাইপ করুন;

FOnFilter:TFilterEvent;

এবং প্রকাশিত বিভাগে আমরা এই ধরনের একটি সম্পত্তি সংজ্ঞায়িত করি:

প্রপার্টি অনফিল্টার:TFilterEvent পড়ুন FOnFilter লিখুন FOnFilter;

একটি নতুন সম্পত্তি সংজ্ঞায়িত করার সময়, আমরা FOnFilter ভেরিয়েবলকে উল্লেখ করি, এবং পদ্ধতিগুলিকে নয় - এখানে সেগুলির প্রয়োজন নেই৷ এখন, যদি আপনি প্যাকেজ সম্পাদক ব্যবহার করে উপাদানটি কম্পাইল করেন, তাহলে আপনি অবজেক্ট ইন্সপেক্টরে অনফিল্টার ইভেন্টটি উপস্থিত দেখতে পাবেন। যাইহোক, যদি আমরা এটিতে একটি হ্যান্ডলারকে বরাদ্দ করি এবং বাস্তবায়নের জন্য প্রকল্পটি চালাই তবে এটি বলা যাবে না। এর কারণ হল আমরা আমাদের কম্পোনেন্টের কোথাও এটিকে ডাকিনি। OnFilter ইভেন্ট কল করার একটি ভাল জায়গা হল FButton-এর জন্য OnClick ইভেন্ট হ্যান্ডলারে, যা ইতিমধ্যেই বাস্তবায়িত হয়েছে। অতএব, আমরা পূর্বে সংজ্ঞায়িত BtClick পদ্ধতির বাস্তবায়ন কোড পরিবর্তন করব:

পদ্ধতি TListAdd.BtClick(প্রেরক:TObject); var CanAdd:বুলিয়ান; শুরু করুন যদি দৈর্ঘ্য(FEdit.Text)>0 তারপর শুরু করতে পারেন যোগ করুন:=True; যদি অ্যাসাইন করা হয়(FOnFilter) তারপর FOnFilter(Self,FEdit.Text,CanAdd); যদি Add করতে পারেন তাহলে FListBox.Items.Add(FEdit.Text) শুরু করুন; FEdit.Text:=""; FEdit.SetFocus; শেষ অন্য বীপ; শেষ; শেষ;

সুতরাং, উপরের কোড স্নিপেটে, বুলিয়ান ভেরিয়েবল CanAdd সংজ্ঞায়িত করা হয়েছে। কোড লেখার সময়, সচেতন থাকুন যে প্রোগ্রামার একটি OnFilter ইভেন্ট হ্যান্ডলার তৈরি করতে পারে না। অতএব, আমরা CanAdd ভেরিয়েবলের ডিফল্ট মান True-তে সেট করেছি - তালিকায় সমস্ত সারি যোগ করুন। এর পরে, FonFilter কল করার আগে, আপনার প্রোগ্রামার একটি ইভেন্ট হ্যান্ডলার তৈরি করেছে কিনা তা পরীক্ষা করা উচিত। এটি অ্যাসাইন করা পদ্ধতিতে কল করে অর্জন করা হয়, যা একটি বুলিয়ান মান প্রদান করে। একটি পয়েন্টারের জন্য, নির্ধারিত পদ্ধতিতে কল করা P চেক করার সমতুল্য<>শূন্য একটি অবজেক্ট পদ্ধতির জন্য আমরা FOnFilter চেক ব্যবহার করতে পারি না<>nil, যেহেতু অবজেক্ট পদ্ধতি দুটি ঠিকানা দ্বারা চিহ্নিত করা হয় এবং এই ধরনের একটি চেক কম্পাইলার দ্বারা অনুমোদিত হবে না। কিন্তু অ্যাসাইনড মেথড কল করলে ইভেন্ট হ্যান্ডলার তৈরি হয়েছে কিনা তা পুরোপুরি চেক করে। উপরের কোডটি একেবারেই আদর্শ উপায়একটি উপাদান থেকে একটি ইভেন্ট হ্যান্ডলার কল.

যা অবশিষ্ট থাকে তা হল ইভেন্ট হ্যান্ডলার পরীক্ষা করা। ফর্মে দুটি TListAdd উপাদান রাখি, একটির জন্য আমরা শুধুমাত্র পূর্ণসংখ্যা যোগ করার অনুমতি দেব এবং অন্যটির জন্য - শুধুমাত্র বড় ইংরেজি অক্ষর দিয়ে শুরু হওয়া শব্দগুলি। তদনুসারে, অনফিল্টার ইভেন্ট হ্যান্ডলারদের জন্য কোডটি এইরকম দেখাবে:

পদ্ধতি TForm1.ListAdd1Filter(প্রেরক: TObject; const EditText: String; var CanAdd: Boolean); var I,N:পূর্ণসংখ্যা; শুরু Val(EditText,N,I); যোগ করতে পারেন:=I=0; শেষ; পদ্ধতি TForm1.ListAdd2Filter(প্রেরক: TObject; const EditText: String; var CanAdd: Boolean); start CanAdd:=False; যদি দৈর্ঘ্য(EditText)>0 তাহলে Add Can:=(EditText>="A") এবং (EditText)<="Z"); end;

কোডটি বোঝা সহজ, একমাত্র সতর্কতা হল ListAdd2Filter ইভেন্ট হ্যান্ডলারে পাঠ্যের প্রথম অক্ষর পরীক্ষা করার আগে এটি পরীক্ষা করে যে পাঠ্যটি একটি খালি স্ট্রিং নয়। এই ধরনের একটি পরীক্ষা করা বাধ্যতামূলক: অবজেক্ট প্যাসকেলের স্ট্রিংগুলি হল অবজেক্ট, এবং একটি খালি স্ট্রিং একটি শূন্য পয়েন্টারের সাথে মিলে যায়। আপনি যদি একটি খালি স্ট্রিং এর প্রথম অক্ষর চেক করার চেষ্টা করেন, তাহলে অ্যাপ্লিকেশনটি শূন্যকে ডিরেফারেন্স করার চেষ্টা করবে, যা একটি ব্যতিক্রম নিক্ষেপ করবে। এই ক্ষেত্রে, এটি একটি সমস্যা নয়: TListAdd উপাদান থেকে FOnFilter ইভেন্ট হ্যান্ডলারকে কল করার আগে, স্ট্রিংটি অ-শূন্য দৈর্ঘ্যের জন্য পরীক্ষা করা হয়। যাইহোক, যে উপাদানগুলির সোর্স কোড আপনার কাছে উপলব্ধ নয়, এই ধরনের যাচাইকরণ বাধ্যতামূলক!

অবজেক্ট ইন্সপেক্টরে বৈশিষ্ট্য লুকানো

ধরুন আপনি একটি ডেটা অ্যাক্সেস উপাদান তৈরি করছেন, উদাহরণস্বরূপ, TTable ক্লাসের একজন বংশধর। ধরা যাক এই উপাদানটি ডাটাবেসে উপলব্ধ টেবিলের তালিকা বিশ্লেষণ করে এবং কিছু মানদণ্ডের উপর ভিত্তি করে (উদাহরণস্বরূপ, একটি নির্দিষ্ট ধরণের এবং একটি নির্দিষ্ট নামের ক্ষেত্রের উপস্থিতি), একটি কাজের জন্য নির্বাচিত হয়। কম্পোনেন্টের স্বাভাবিক ক্রিয়াকলাপের জন্য, এই টেবিলের নামটি TableName বৈশিষ্ট্যে লিখতে হবে। কিন্তু অবজেক্ট ইন্সপেক্টরে এই সম্পত্তি দৃশ্যমান! এই উপাদানটি ব্যবহার করে একজন প্রোগ্রামার বিকাশের সময় এর মান পরিবর্তন করতে পারে, যা সম্ভবত উপাদানটিকে অকার্যকর করে তুলবে। এবং তিনি ঠিক হবে! যদি কোন বৈশিষ্ট্য বা ঘটনা পরিবর্তন করা না যায় তবে সেগুলি লুকানো উচিত।

আমরা TListAdd কম্পোনেন্টে কাজ চালিয়ে যাব এবং মডেল টাস্ক হিসেবে অবজেক্ট ইন্সপেক্টর থেকে কার্সার প্রপার্টি সরিয়ে দেব। এই বৈশিষ্ট্যটি TControl ক্লাসের প্রকাশিত বিভাগে সংজ্ঞায়িত করা হয়েছে এবং কম্পোনেন্ট ডেভেলপমেন্টের একেবারে শুরু থেকেই TListAdd-এর জন্য অবজেক্ট ইন্সপেক্টরে প্রদর্শিত হয়। এর উপর ভিত্তি করে, আপনি সুরক্ষিত বিভাগে এই সম্পত্তিটি ওভাররাইড করার চেষ্টা করতে পারেন। কম্পাইলার এই ধরনের একটি ওভাররাইডের অনুমতি দেবে, কিন্তু এটি পছন্দসই ফলাফলের দিকে নিয়ে যাবে না: কার্সার বৈশিষ্ট্যটি অবজেক্ট ইন্সপেক্টরের মধ্যে থাকবে যেমনটি ছিল... যে কোনো সম্পত্তি, একবার প্রকাশিত বিভাগে সংজ্ঞায়িত করা হলে, সর্বদা অবজেক্টে প্রদর্শিত হবে এই শ্রেণীর সমস্ত বংশধরদের জন্য পরিদর্শক।

অবজেক্ট ইন্সপেক্টর থেকে একটি সম্পত্তি লুকানোর জন্য, আমরা ডেলফি কম্পাইলারের দুটি বৈশিষ্ট্য ব্যবহার করি, যথা:

  1. একটি বিদ্যমান সম্পত্তি হিসাবে একই নামের সাথে একটি নতুন সম্পত্তি ঘোষণা করার সময়, পূর্বে সংজ্ঞায়িত সম্পত্তি "ছায়াযুক্ত"।
  2. যে বৈশিষ্ট্যগুলি শুধুমাত্র-পঠন বা শুধুমাত্র লেখার অ্যাক্সেস রয়েছে সেগুলি অবজেক্ট ইন্সপেক্টরে উপস্থিত হয় না, এমনকি যদি সেগুলি প্রকাশিত বিভাগে ঘোষণা করা হয়।

আপনি কার্সার সম্পত্তি লুকানোর কাজ শুরু করার আগে, ফর্ম থেকে TListAdd উপাদানগুলি সরিয়ে ফেলা একটি ভাল ধারণা, অন্যথায় ফর্ম রিসোর্স পড়ার সময় একটি ব্যতিক্রম ঘটতে পারে। সুতরাং, ব্যক্তিগত বিভাগে আমরা ভেরিয়েবল FDummy:integer ঘোষণা করি (ভেরিয়েবলের নাম এবং প্রকার যেকোনও হতে পারে) এবং প্রকাশিত বিভাগে আমরা একটি নতুন সম্পত্তি সংজ্ঞায়িত করি:

প্রপার্টি কার্সার: পূর্ণসংখ্যা পড়ুন FDummy;

নতুন প্রপার্টিটিকে অবশ্যই কার্সার বলা হবে, এর ধরন অবশ্যই উপরে সংজ্ঞায়িত ভেরিয়েবলের প্রকারের সাথে মিলতে হবে, সম্পত্তিটি শুধুমাত্র পঠন বা লিখতে হবে। প্যাকেজ এডিটর ব্যবহার করে কম্পোনেন্ট কম্পাইল করার পর, আপনাকে আবার ফর্মে TListAdd কম্পোনেন্ট স্থাপন করতে হবে। আপনি দেখতে পারেন যে কার্সার সম্পত্তিটি অবজেক্ট ইন্সপেক্টরে আর দৃশ্যমান নয়।

এখন কাজটা একটু জটিল করা যাক। ধরুন আপনি কার্সারটিকে তীর হিসাবে নয়, একটি ঘন্টাঘড়ি (crHourGlass) হিসাবে দেখানো চান। বৈশিষ্ট্যের ডিফল্ট মান পরিবর্তন করতে, নতুন মান অবশ্যই কনস্ট্রাক্টরের একটি ভেরিয়েবলে বরাদ্দ করতে হবে। কনস্ট্রাক্টরে কার্সারে একটি নতুন মান বরাদ্দ করার চেষ্টা করার সময়

কার্সার:=crHourGlass;

ডেলফি কম্পাইলার একটি ডায়াগনস্টিক বার্তা জারি করবে যে একটি নতুন মান শুধুমাত্র পঠনযোগ্য ভেরিয়েবলে বরাদ্দ করা যাবে না। আপনি যদি একটি নতুন "শুধুমাত্র লেখা" বৈশিষ্ট্য তৈরি করেন, তাহলে কম্পাইলার একটি ভিন্ন ডায়াগনস্টিক বার্তা জারি করবে - বেমানান ডেটা প্রকার সম্পর্কে। আপনি যদি ভেরিয়েবল FDummy:TCursor ঘোষণা করেন এবং এটি শুধুমাত্র লিখতে পারেন, কম্পাইলার এই অ্যাসাইনমেন্টের অনুমতি দেবে, কিন্তু কার্সারের চেহারা পরিবর্তন হবে না: এটি এখনও একটি তীর হবে।

এই সমস্যার একটি তুচ্ছ সমাধান হল TCustomPanel-এর একটি ডিসেন্ড্যান্ট শ্রেণী ঘোষণা করা, যার কনস্ট্রাক্টরে আপনাকে কার্সার ভেরিয়েবলে একটি নতুন মান বরাদ্দ করতে হবে এবং এটি থেকে আমাদের TListAdd উপাদান তৈরি করতে হবে। এই সমাধান দুটি অসুবিধা আছে:

  1. এটি সম্পদ-নিবিড় - ভার্চুয়াল পদ্ধতি গুন করে।
  2. আমরা এই উপাদানটি ব্যবহার করবে এমন প্রোগ্রামার থেকে অবজেক্ট ইন্সপেক্টরে সম্পত্তি লুকিয়ে রেখেছি। আমরা এই সম্পত্তি নিয়ে কাজ করতে চাই।

অতএব, এই সমস্যার সমাধান এইরকম দেখায়: TListAdd কনস্ট্রাক্টরে আমরা অপারেটর ঘোষণা করি:

উত্তরাধিকারসূত্রে প্রাপ্ত কার্সার:=crHourGlass;

এবং এটাই! এটি কার্সার পরিবর্তন করার জন্য যথেষ্ট।

পূর্বে, আমরা উত্তরাধিকারসূত্রে প্রাপ্ত ফাংশন শব্দটি শুধুমাত্র পূর্বপুরুষ পদ্ধতিকে কল করার জন্য ব্যবহার করতাম। এই নির্মাণ আপনাকে পূর্বপুরুষ শ্রেণীর একটি রেফারেন্স হিসাবে উত্তরাধিকারসূত্রের অর্থ আরও ভালভাবে বুঝতে দেয়। আপনি উভয় বৈশিষ্ট্য এবং পদ্ধতি অ্যাক্সেস করতে পারেন. একটি সম্পত্তি অ্যাক্সেস করার সময়, আপনি এটি পড়তে পারেন বা এটিতে একটি নতুন মান নির্ধারণ করতে পারেন; এই ক্ষেত্রে, উত্তরাধিকার সূত্রে প্রাপ্ত সহায়ক শব্দটি অ্যাসাইনমেন্ট চিহ্নের বাম দিকে প্রদর্শিত হবে। একইভাবে, আপনি লুকানো পূর্বপুরুষ পদ্ধতি কল করতে পারেন। পূর্বপুরুষ শ্রেণির চেয়ে উচ্চতর স্তরের কল নিষিদ্ধ - নির্মাণ

ইনহেরিটেড ইনহেরিটেড কার্সার:=crHourGlass;

কম্পাইল হবে না।

এই মুহুর্তে আমরা এই প্রকল্পটি সম্পূর্ণ বিবেচনা করব। নতুন উপাদানে, আমরা বার্তাটি আটকেছি, বৈশিষ্ট্যগুলি ঘোষণা করেছি, নতুন বৈশিষ্ট্য এবং ইভেন্টগুলি যুক্ত করেছি এবং পূর্বে ঘোষিত সম্পত্তি লুকিয়েছি। এই সমস্ত পদ্ধতি উপাদান তৈরি করতে ব্যবহৃত হয়। নীচে আমরা আরেকটি আকর্ষণীয় পদ্ধতি দেখব।

উপাদান তৈরি করার জন্য হুক পদ্ধতি ব্যবহার করা

এটি আগে উল্লেখ করা হয়েছিল যে প্রতিটি TWinControl শিশুর একটি পদ্ধতি রয়েছে যা বার্তাগুলি গ্রহণ করে এবং প্রক্রিয়া করে। যদি উইন্ডো হ্যান্ডেল (HWND) এর একটি রেফারেন্স থাকে তবে আপনি এই পদ্ধতির ঠিকানা নির্ধারণ করতে পারেন এবং আরও গুরুত্বপূর্ণভাবে, এই ঠিকানাটিকে ওভাররাইড করতে পারেন এবং এইভাবে প্রাপ্ত বার্তাগুলিকে আপনার নিজের উপায়ে প্রক্রিয়া করতে পারেন। একটি নিয়ম হিসাবে, কেউ সমস্ত বার্তার জন্য সম্পূর্ণ হ্যান্ডলার লেখে না; পুরানো ডিফল্ট পদ্ধতি প্রায়ই বলা হয়. এই ক্ষেত্রে, নতুন পদ্ধতিটি একটি ফিল্টার হিসাবে ব্যবহৃত হয়: যখন একটি ইভেন্ট আসে, কোডটি কার্যকর করা হয়। প্রকৃতপক্ষে, এটি টুইনকন্ট্রোলে একটি "গুপ্তচর": একটি বার্তা এলে আমাদের জানানো হয় এবং কিছু কোড কার্যকর করা যেতে পারে। যদি হুক পদ্ধতিটি সঠিকভাবে প্রয়োগ করা হয়, TWinControl যথারীতি কাজ করতে থাকে, অজান্তে যে এটি অন্য কারো সাথে তার বার্তাগুলি ভাগ করছে।

হুক পদ্ধতি নিম্নরূপ সংজ্ঞায়িত করা হয়:

বস্তুর পদ্ধতি(var Message:TMessage);

এটি TMessage টাইপের একটি পরিবর্তনশীলের উপর নির্ভর করে, যা বার্তা সম্পর্কে সমস্ত তথ্য ধারণ করে। কিন্তু এই পদ্ধতি সংজ্ঞায়িত করা যথেষ্ট নয়। এটি প্রতিটি TWinControl এর জন্য অনুলিপি করা আবশ্যক যার সাথে এটি সংযুক্ত করা হবে। এটি WinAPI পদ্ধতি মেকঅবজেক্ট ইনস্ট্যান্স কল করে অর্জন করা হয়। এই পদ্ধতিটি একটি বস্তুর পদ্ধতিকে একটি প্যারামিটার হিসাবে নেয়, মেমরিতে এটির একটি অনুলিপি তৈরি করে এবং নতুন পদ্ধতির ঠিকানা প্রদান করে। এটা স্পষ্ট যে এটি সিস্টেমের সম্পদ সংরক্ষণ করে যা সিস্টেমে ফেরত দিতে হবে। FreeObjectInstance পদ্ধতিতে কল করে এটি অর্জন করা হয়।

আরেকটি গুরুত্বপূর্ণ শর্ত: TWinControl ধ্বংস করার আগে, পুরানো বার্তা প্রক্রিয়াকরণ পদ্ধতির সাথে যোগাযোগ পুনরুদ্ধার করতে হবে, অন্যথায় সংস্থানগুলি সিস্টেমে ফেরত দেওয়া হবে না। এর মানে হল যে আপনাকে পুরানো পদ্ধতির পয়েন্টারটি মনে রাখতে হবে, যা GWL_WNDPROC প্যারামিটার সহ Win API GetWindowLong পদ্ধতিতে কল করে পাওয়া যাবে। এই পয়েন্টারটি TWinControl এর ডিফল্ট ইভেন্ট হ্যান্ডলারদের কল করতেও ব্যবহার করা হবে। বিপরীত পদ্ধতি, SetWindowLong, একটি হুক পদ্ধতি সেট করতে ব্যবহৃত হয়।

সুতরাং, পরবর্তী অনুশীলনের জন্য সমস্যাটি তৈরি করা যাক। ধরা যাক আমরা এমন একটি উপাদান তৈরি করতে চাই যা অন্যান্য উপাদান তৈরি করবে - TWinControl-এর বংশধর - মাউস বোতাম টিপলে বিপ হবে। এটা স্পষ্ট যে এই উপাদানটি অ্যাপ্লিকেশন কার্যকর করার সময় দেখানো উচিত নয়, তাই আমরা TCcomponentকে এর পূর্বপুরুষ শ্রেণী হিসাবে নির্বাচন করব। আসুন ক্লাসের নামটিকে TBeepWnd হিসাবে সংজ্ঞায়িত করি। ব্যক্তিগত বিভাগে আমরা তিনটি ভেরিয়েবল সংজ্ঞায়িত করি:

FoldProc,FNewProc:পয়েন্টার; FControl: TWinControl;

নামগুলি থেকে এটি স্পষ্ট যে আমরা FOldProc ভেরিয়েবলের পুরানো পদ্ধতির লিঙ্কটি মনে রাখব, নতুন পদ্ধতির লিঙ্কটি (MakeObjectInstance পদ্ধতি কার্যকর করার পরে) FNewProc ভেরিয়েবলে সংরক্ষণ করা হবে। এবং এফকন্ট্রোল ভেরিয়েবলে আমরা কন্ট্রোল এলিমেন্টের একটি লিঙ্ক সংরক্ষণ করব যেখানে হুক পদ্ধতিটি বর্তমানে "হ্যাং" রয়েছে। আসুন একই বিভাগে তিনটি পদ্ধতি সংজ্ঞায়িত করি:

পদ্ধতি HookProc(var Message:TMessage); পদ্ধতি হুকউইন্ডো(W:TWinControl); পদ্ধতি UnhookWindow;

এবং বাস্তবায়ন বিভাগে আমরা সেগুলি বাস্তবায়ন করি:

পদ্ধতি TBeepWnd.HookProc(var Message:TMessage); begin case Message.WM_LBUTTONDOWN-এর বার্তা:শুরু (আমাদের কাজ) বিপ; Message.Result:=CallWindowProc(FOldProc, FControl.Handle, Message.Msg, Message.WParam, Message.lParam); শেষ; WM_DESTROY:শুরু করুন (যখন উইন্ডোটি ধ্বংস করার জন্য, হুক সরান) বার্তা। ফলাফল:=কল উইন্ডোপ্রোক(FOldProc, FControl.Handle, Message.Msg, Message.WParam, Message.lParam); আনহুক উইন্ডো; শেষ; (কল ডিফল্ট হ্যান্ডলার) অন্যথায় Message.Result:=CallWindowProc(FOldProc, FControl.Handle, Message.Msg, Message.WParam, Message.lParam); শেষ; শেষ;

হুক পদ্ধতিতে, একটি বার্তা আটকানো হয়, যার একটি প্রতিক্রিয়া ঘটে - WM_LBUTTONDOWN। উপরন্তু, যেকোনো হুক পদ্ধতি অবশ্যই WM_DESTROY বার্তা পরিচালনা করবে। এটি ধ্বংস হওয়ার আগে উইন্ডোতে পাঠানো শেষ বার্তা। আমাদের প্রতিক্রিয়া হল নীচে বর্ণিত UnhookWindow পদ্ধতিতে কল করে পূর্ববর্তী পদ্ধতি পুনরুদ্ধার করা। অবশেষে, CallWindowProc পদ্ধতি ব্যবহার করে ডিফল্ট বার্তা হ্যান্ডলারদের ডাকা হয়। ডিফল্ট ইভেন্ট হ্যান্ডলার ভুলে যাওয়া ইভেন্ট হ্যান্ডলারে উত্তরাধিকারসূত্রে পাওয়া ভুলে যাওয়ার সমান; 80% ক্ষেত্রে এটি ভুল অ্যাপ্লিকেশন আচরণের দিকে নিয়ে যায়। কোনো অবস্থাতেই মেসেজ ভেরিয়েবলের ফলাফল ক্ষেত্রে CallWindowProc পদ্ধতিতে কল করার ফলাফল বরাদ্দ করতে ভুলবেন না! এই ক্ষেত্রে কোড কাজ করবে না!

পদ্ধতি TBeepWnd.HookWindow(W:TWinControl); কম্পোনেন্টস্টেট-এ csDesigning করা হলে শুরু করুন (ডিজাইন বা রান-টাইমে কম্পোনেন্ট কিনা তা পরীক্ষা করা হচ্ছে) FControl:=W; প্রস্থান; শেষ; যদি FCcontrol<>nil তারপর UnhookWindow; (আগে ইনস্টল করা থাকলে হুক সরান) যদি W<>nil তারপর শুরু করুন FOldProc:=pointer(GetWindowLong(W.Handle,GWL_WNDPROC)); (পুরানো পদ্ধতির ঠিকানা নির্ধারণ করে) FNewProc:=MakeObjectInstance(HookProc); (মেমোরিতে কপি তৈরি করুন) SetWindowLong(W.Handle,GWL_WNDPROC,Integer(FNewProc)); (নতুন পদ্ধতি সেট করুন) শেষ; Fcontrol:=W; (নিয়ন্ত্রণে স্টোর রেফারেন্স) শেষ;

এই পদ্ধতিটি একটি নতুন বার্তা পরিচালনার রুটিন সেট আপ করতে ব্যবহৃত হয়। প্রথমত, এটি পরীক্ষা করে যে উপাদানটি কোন পর্যায়ে রয়েছে: বিকাশ পর্যায়ে বা কার্যকর করার পর্যায়ে। যদি কম্পোনেন্টটি ডেভেলপমেন্ট পর্যায়ে থাকে, অর্থাৎ csDesigning পতাকা ComponentState প্রপার্টিতে সেট করা থাকে, তাহলে হুক পদ্ধতি ইনস্টল না করেই কম্পোনেন্টের একটি লিঙ্ক সংরক্ষিত হয়। ডেলফি উন্নয়ন পরিবেশে একটি হুক পদ্ধতি ইনস্টল করা এড়াতে এটি করা হয়। যদি এই পদ্ধতিটি পূর্বে অন্য নিয়ন্ত্রণে সেট করা থাকে, তবে এটি UnhookWindow পদ্ধতিতে কল করে সরানো হয়। এর পরে, পুরানো পদ্ধতির ঠিকানাটি মনে রাখা হয় (GetWindowLong), একটি অনুলিপি নতুন পদ্ধতির স্মৃতিতে তৈরি করা হয় (MakeObjectInstance) এবং নতুন পদ্ধতির ঠিকানা সেট করা হয় (SetWindowLong)। পূর্ণসংখ্যা থেকে পয়েন্টার পর্যন্ত টাইপ কাস্টিং ব্যবহার করা হয়, এবং এর বিপরীতে - বলা হয় পদ্ধতিগুলির জন্য যথেষ্ট উপযুক্ত নয় এমন ভেরিয়েবলের প্রয়োজন (বা রিটার্ন)। অবশেষে, নিয়ন্ত্রণের রেফারেন্সটি FCcontrol ভেরিয়েবলে সংরক্ষণ করা হয়, যা আমরা ব্যক্তিগত বিভাগে সংজ্ঞায়িত করেছি।

পদ্ধতি TBeepWnd.UnhookWindow; শুরু করুন যদি (FControl=nil) বা (FOldProc=nil) বা (FNewProc=nil) তারপর প্রস্থান করুন; (কোন হুক ইনস্টল করা হয়নি) SetWindowLong(FControl.Handle,GWL_WNDPROC,Integer(FOldProc)); (পুরানো উইন্ডো পদ্ধতি সেট করুন) FreeObjectInstance(FNewProc); (ফ্রি রিসোর্স) এফকন্ট্রোল: = শূন্য; (ইনিশিয়েট ভেরিয়েবল) FOldProc:=nil; FNewProc:=nil; শেষ;

এই পদ্ধতিটি পুরানো ইভেন্ট হ্যান্ডলারকে পুনরুদ্ধার করে। এটিকে HookProc পদ্ধতি থেকে বলা হয় এবং কম্পোনেন্টের ডেস্ট্রাক্টর থেকেও কল করা আবশ্যক - উইন্ডোটি ধ্বংস হয়ে গেলে এবং এই উপাদানটি ধ্বংস হয়ে গেলে উভয়ই হুককে অপসারণ করতে হবে। পুরানো পদ্ধতির ঠিকানা সহ SetWindowLong পদ্ধতিটি পুরানো বার্তা হ্যান্ডলারকে পুনরুদ্ধার করে। এর পরে, আপনাকে FreeObjectInstance পদ্ধতিতে কল করে সিস্টেমে সংস্থানগুলি ফিরিয়ে দিতে হবে।

সুতরাং, হুক পদ্ধতির সাথে কাজ করার প্রাথমিক পদ্ধতিগুলি সংজ্ঞায়িত করা হয়েছে। এখন আপনাকে ধ্বংসকারীকে পুনরায় লিখতে হবে যাতে এই উপাদানটি ধ্বংস হয়ে গেলে হুক পদ্ধতিটি সরানো হয়:

ধ্বংসকারী TBeepWnd.Destroy; UnhookWindow শুরু করুন; উত্তরাধিকারসূত্রে প্রাপ্ত ধ্বংস; শেষ;

এবং অবশেষে, প্রকাশিত বিভাগে আমরা একটি সম্পত্তি সংজ্ঞায়িত করি যা অবজেক্ট ইন্সপেক্টরে প্রদর্শিত হবে:

সম্পত্তি নিয়ন্ত্রণ: TWinControl পড়ুন FCcontrol লিখুন HookWindow;

একটি নতুন উপাদান ইনস্টল করার জন্য, আমরা একটি পূর্বে সংজ্ঞায়িত পদ্ধতি উল্লেখ করি, যা, অ্যাপ্লিকেশনটি চলাকালীন, অবিলম্বে উপাদানটিতে একটি হুক পদ্ধতি "হ্যাং" করবে, যা বোতাম টিপলে বীপ হবে। মনে রাখবেন যে বিপ অপারেটরের পরিবর্তে, আপনি যেকোনো এক্সিকিউটেবল কোড লিখতে পারেন।

উপাদানটি বেশ সহজভাবে পরীক্ষা করা হয়: এটি একটি ফর্মের উপর স্থাপন করা হয় যার উপর কয়েকটি TWinControl বংশধর উপাদান স্থাপন করা হয়। ব্যাকগ্রাউন্ডে TBeepWnd উপাদান নির্বাচন করার পর, অবজেক্ট ইন্সপেক্টরের কন্ট্রোল ফিল্ডে মাউস ক্লিক করলে ফর্মে সংজ্ঞায়িত সমস্ত TWinControl সমন্বিত একটি তালিকা প্রসারিত হয়। আপনার তাদের মধ্যে একটি নির্বাচন করা উচিত এবং অ্যাপ্লিকেশনটি চালু করা উচিত। আপনি নির্বাচিত উপাদানের বাম মাউস বোতামে ক্লিক করলে, এটি একটি চিৎকার নির্গত করে।

সম্পত্তি সম্পাদক এবং উপাদান সম্পাদক

পূর্ববর্তী বিভাগগুলিতে আচ্ছাদিত সমস্ত কিছু অ্যাপ্লিকেশন কোড তৈরির সাথে সম্পর্কিত যা ব্যবহারকারীদের মধ্যে বিতরণ করা হবে। যাইহোক, ডেলফি উন্নয়ন পরিবেশ আপনাকে নিজেকে পরিবর্তন করতে দেয়। এটির জন্য একটি বিশেষ ভাষার জ্ঞানের প্রয়োজন হয় না, যেহেতু উন্নয়নের পরিবেশ পরিবর্তন করার সমস্ত পদ্ধতি ডেলফিতে লেখা হয়। এখানে এই পদ্ধতিগুলি, যথা সম্পত্তি সম্পাদক এবং উপাদান সম্পাদক, আংশিকভাবে বিবেচনা করা হয় - উপাদানগুলির সাথে কাজ করার জন্য সরঞ্জাম তৈরির ক্ষেত্রে। এই বিভাগের সামগ্রীগুলি পড়ার সময়, আপনার স্পষ্টভাবে বোঝা উচিত যে আপনার অ্যাপ্লিকেশনের সাথে কাজ করা শেষ ব্যবহারকারী কখনই সম্পত্তি সম্পাদক বা উপাদান সম্পাদক দেখতে পাবেন না - এগুলি প্রোগ্রামারদের জন্য তৈরি করা হয়েছে এবং শুধুমাত্র ডেলফি উন্নয়ন পরিবেশে কাজ করে৷

সম্পত্তি সম্পাদক

অ্যাপ্লিকেশন বিকাশের সময়, অবজেক্ট ইন্সপেক্টরে বৈশিষ্ট্যগুলি প্রদর্শিত হয়। অনুগ্রহ করে নোট করুন যে অবজেক্ট ইন্সপেক্টরে বৈশিষ্ট্য ভিন্নভাবে সম্পাদিত হয়। কিছু বৈশিষ্ট্য (প্রস্থ, ক্যাপশন) শুধুমাত্র একটি নতুন পাঠ্য মান বরাদ্দ করা যেতে পারে। কার্সার ধরনের একটি বৈশিষ্ট্য একটি ড্রপ-ডাউন তালিকা প্রদান করে যা আপনি একটি মান নির্বাচন করতে ক্লিক করতে পারেন। TFont টাইপের একটি বৈশিষ্ট্যের বাম দিকে একটি "+" চিহ্ন রয়েছে; আপনি যখন এটিতে ক্লিক করেন, এটি প্রসারিত হয়, আপনাকে পৃথক ক্ষেত্রগুলিকে সংশোধন করার অনুমতি দেয়। এছাড়াও, ডানদিকে তিনটি বিন্দু (উপবৃত্তাকার বোতাম) সহ একটি বোতাম রয়েছে, যখন ক্লিক করা হয়, সম্পত্তি সম্পাদক ডায়ালগ উপস্থিত হয়।

উপরের প্রতিটি বৈশিষ্ট্যের নিজস্ব সম্পাদক রয়েছে এবং ডেলফি উন্নয়ন পরিবেশের একটি বড় সুবিধা হল আপনার নিজস্ব সম্পত্তি সম্পাদক তৈরি করার ক্ষমতা। নতুন সম্পত্তি সম্পাদক বিতরণ করা উপাদানগুলির মধ্যে বেশ সাধারণ। তবে তাদের অবশ্যই সতর্কতার সাথে আচরণ করা উচিত: প্রাথমিকভাবে একটি কম্পিউটারে পরীক্ষা চালান যেখানে প্রয়োজনে আপনি ডেলফি পুনরায় ইনস্টল করতে পারেন। একটি নিয়ম হিসাবে, তারা যোগ্য প্রোগ্রামারদের দ্বারা তৈরি করা হয় এবং কোড সম্পর্কে কোন অভিযোগ নেই, তবে তারা প্রায়ই বিতরণ করা সম্পত্তি সম্পাদকের মধ্যে কোনো DLL অন্তর্ভুক্ত করতে ভুলে যায়। এই জাতীয় সম্পাদক ইনস্টল করার পরে, আমরা অনেকগুলি বৈশিষ্ট্য পাই যা সম্পাদনা করা যায় না - পুরানো সম্পাদকটি অবরুদ্ধ, এবং নতুনটি কাজ করে না ...

একটি নতুন সম্পত্তি সম্পাদক তৈরি করার আগে, এটি করা মূল্যবান কিনা সে সম্পর্কে চিন্তা করা বোধগম্য - আপনি সম্ভবত মানসম্পাদকদের মধ্যে একটি উপযুক্ত খুঁজে পেতে পারেন। যদি আপনাকে একটি প্রপার্টি এডিটর তৈরি করতে হয়, তাহলে আপনাকে অবশ্যই নিয়মটি অনুসরণ করতে হবে: আপনার স্ট্যান্ডার্ড ডেটা টাইপের (পূর্ণসংখ্যা, স্ট্রিং, ইত্যাদি) জন্য সম্পাদক তৈরি করা এড়ানো উচিত। অন্যান্য প্রোগ্রামাররা স্ট্যান্ডার্ড এডিটরদের সাথে অভ্যস্ত, এবং তারা আপনার পছন্দ নাও করতে পারে। অতএব, আপনাকে বিনয়ী হতে হবে এবং আপনার ক্লাসের জন্য সম্পাদক নিবন্ধন করতে হবে, এবং TCcomponent ক্লাসের জন্য নয়। যদি প্রোগ্রামাররা আপনার সম্পত্তি সম্পাদক পছন্দ করে, তবে তাদের বেশিরভাগই নিবন্ধন পরিবর্তন করতে সক্ষম হবে যাতে সম্পাদক সমস্ত উপাদানের জন্য কাজ করে। আমরা নীচে একজন সম্পাদক নিবন্ধনের সমস্যা নিয়ে আলোচনা করব।

সুতরাং, আসুন একটি মডেল সমস্যা তৈরি করি, যার বাস্তবায়নের জন্য এটি একটি সম্পত্তি সম্পাদক বাস্তবায়ন করা প্রয়োজন হবে। ধরুন কিছু উপাদানের সম্পত্তি আছে - সপ্তাহের দিন। নীতিগতভাবে, সপ্তাহের দিন প্রবেশ করতে, আপনি একটি ড্রপ-ডাউন তালিকা সহ একটি আদর্শ সম্পাদক ব্যবহার করতে পারেন। যাইহোক, আমরা চাই যে বিকাশ পর্যায়ে প্রোগ্রামার সপ্তাহের দিন প্রবেশ করতে সক্ষম হোক, হয় তার ক্রমিক নম্বর (1 - সোমবার, 2 - মঙ্গলবার, ইত্যাদি), অথবা জাতীয় বা ইংরেজি ভাষায় পাঠ্য উল্লেখ করে। পাঠ্য প্রবেশ করার সময়, বড় হাতের অক্ষর এবং ছোট হাতের অক্ষর মিশ্রিত করার অনুমতি দেওয়া হয়।

প্রথমত, আপনাকে এমন একটি উপাদান তৈরি করতে হবে যা সপ্তাহের দিন সংরক্ষণ করবে। কম্পোনেন্ট/নতুন কম্পোনেন্ট কমান্ড কল করে একটি নতুন কম্পোনেন্ট তৈরি করি। TCcomponent কে পূর্বপুরুষ শ্রেণী হিসেবে নির্বাচন করা যাক এবং নতুন ক্লাসটিকে TDayStore নাম দিন। এর পরে, প্যালেটে উপাদানটি ইনস্টল করুন। এখন আমাদের সিদ্ধান্ত নেওয়া দরকার যে সপ্তাহের দিনটি কী আকারে সংরক্ষণ করা যায়। এটা স্পষ্ট যে দ্ব্যর্থহীন শনাক্তকরণ এবং সম্পদ সংরক্ষণের জন্য এটি বৈধ রেঞ্জ 1-7 সহ একটি পূর্ণসংখ্যা হিসাবে সংরক্ষণ করা উচিত। যাইহোক, যদি আমরা একটি সম্পত্তি সম্পাদক তৈরি করতে যাচ্ছি, তাহলে আমাদের বিদ্যমান প্রকারের জন্য নতুন সম্পাদক তৈরি না করার নিয়মটি মনে রাখা উচিত। অতএব, আমরা একটি নতুন প্রকার সংজ্ঞায়িত করব - TDayWeek, এবং এটির সাথে সমস্ত ক্রিয়াকলাপ পূর্ণসংখ্যার মতোই সঞ্চালিত হবে। আসুন FDay ভেরিয়েবলটিকে কম্পোনেন্টের ব্যক্তিগত বিভাগে সংজ্ঞায়িত করি। যেহেতু ডিফল্ট কনস্ট্রাক্টর নির্বাহ করা হয় তখন এই ভেরিয়েবলটি 0 তে আরম্ভ করা হবে এবং এই সংখ্যাটি অনুমোদিত মানগুলির বাইরে, কনস্ট্রাক্টরটিকে অবশ্যই পুনরায় লিখতে হবে। অবশেষে, অবজেক্ট ইন্সপেক্টরে এটি প্রদর্শনের জন্য প্রকাশিত বিভাগে ডে উইক সম্পত্তি সংজ্ঞায়িত করা যাক। চূড়ান্ত উপাদান এই মত দেখায়:

টাইপ করুন TDayWeek=টাইপ পূর্ণসংখ্যা; TDayStore = class(TCcomponent) ব্যক্তিগত (ব্যক্তিগত ঘোষণা) FDay:TDayWeek; সুরক্ষিত ( সুরক্ষিত ঘোষণা ) পাবলিক ( পাবলিক ঘোষণা ) কনস্ট্রাক্টর ক্রিয়েট (AOwner:TCcomponent); অগ্রাহ্য করা; প্রকাশিত (প্রকাশিত ঘোষণা) সম্পত্তি DayWeek:TDayWeek FDay লিখুন FDay; শেষ; ... বাস্তবায়ন কন্সট্রাকটর TDayStore.Create(AOwner:TCcomponent); শুরু উত্তরাধিকারসূত্রে তৈরি করুন(মালিক); FDay:=1; শেষ;

এটি একটি নতুন ধরনের সংজ্ঞা বিরল নির্মাণ মনোযোগ দিতে মূল্যবান

TDdayWeek=টাইপ পূর্ণসংখ্যা;

এইভাবে, একটি নতুন ডেটা টাইপ চালু করা হয়েছে, যার আকার পূর্ণসংখ্যার প্রকারের মতোই রয়েছে; এই ডেটা টাইপের সমস্ত ক্রিয়াকলাপ পূর্ণসংখ্যার মতোই করা হয়। এই ক্রিয়াকলাপের বিষয় হল একটি নতুন ডেটা টাইপ ঘোষণা করা যাতে আমাদের সম্পত্তি সম্পাদক এটিতে বিশেষভাবে প্রয়োগ করা যায় এবং অন্যান্য ডেটা প্রকারগুলিকে প্রভাবিত না করে।

এখন TDayWeek সম্পত্তির জন্য একটি সম্পাদক তৈরি করা যাক। এটি করার জন্য, বিদ্যমান প্রকল্পে একটি নতুন ফর্ম যোগ করুন, এটিকে কিছু উপযুক্ত নামে মনে রাখুন (DayPropE.pas) এবং এটিকে প্রকল্প থেকে বাদ দিন। এর পরে, আমরা একটি পৃথক ফাইল হিসাবে ফর্মটি খুলব এবং এতে সম্পত্তি সম্পাদক প্রয়োগ করব। প্রথম পর্যায়ে আমাদের ফর্মের প্রয়োজন হবে না, তবে পরে আমরা এটি নিয়ে একটি সংলাপ বাস্তবায়ন করব।

প্রপার্টি এডিটর তৈরির মডিউলটিকে DsgnIntf.pas (ডিজাইন ইন্টারফেস) বলা হয়, এটি বেস ক্লাস TPropertyEditor এবং ডিসেন্ড্যান্ট ক্লাসগুলিকে সংজ্ঞায়িত করে যা স্ট্যান্ডার্ড বৈশিষ্ট্যগুলি সম্পাদনা করার উদ্দেশ্যে - TINtegerProperty, TFloatProperty, TStringProperty, ইত্যাদি। সম্পত্তি সম্পাদকদের পরিচালনার পদ্ধতি নিম্নরূপ:

  1. RegisterPropertyEditor পদ্ধতিতে কল করে এটি ডেলফি উন্নয়ন পরিবেশে নিবন্ধিত হয়। এই পদ্ধতিটি নিম্নলিখিত মানগুলিকে পরামিতি হিসাবে গ্রহণ করে:

    ক) সম্পাদনা করার জন্য বৈশিষ্ট্যের ধরন সম্পর্কে তথ্য যা এই সম্পাদকের উদ্দেশ্যে করা হয়েছে৷ এই তথ্যের কারণে, আমাদের একটি নতুন ধরনের TDayWeek সংজ্ঞায়িত করতে হয়েছিল;

    b) এই সম্পাদক প্রযোজ্য উপাদান সম্পর্কে তথ্য. সম্পাদককে কেবলমাত্র নির্দিষ্ট উপাদানের জন্য নয়, তার সমস্ত বংশধরদের জন্যও ডাকা হবে। আপনি যদি এটি TCcomponent-এ সেট করেন, তাহলে সম্পাদককে যেকোনো উপাদানের জন্য ডাকা হবে;

    গ) সম্পত্তির নাম যার জন্য এই সম্পাদক ব্যবহার করা হয়৷ যদি নাম একটি খালি স্ট্রিং হয়, উপরের দুটি ফিল্টার ব্যবহার করা হয়;

  2. GetValue পদ্ধতি বলা হয় যখন একটি সম্পত্তির বর্তমান মান উপাদান থেকে পড়তে হবে। যেকোনো সম্পত্তির জন্য, এই পদ্ধতিটি একটি স্ট্রিং প্রদান করে যা অবজেক্ট ইন্সপেক্টরে স্থাপন করা হয়।
  3. SetValue পদ্ধতি বলা হয় যখন প্রোগ্রামার অবজেক্ট ইন্সপেক্টরে একটি নতুন সম্পত্তি মান প্রবেশ করে। একটি নতুন স্ট্রিং একটি প্যারামিটার হিসাবে পাস করা হয়। পদ্ধতিতে, এটিকে অবশ্যই বিশ্লেষণ করে সম্পাদনা করা সম্পত্তির প্রকারে রূপান্তর করতে হবে।

GetValue এবং SetValue পদ্ধতিগুলি ভার্চুয়াল; যখন সেগুলি পুনরায় লেখা হয়, তখন নতুন সম্পত্তি সম্পাদক তৈরি করা হয়। তাই এখন আমরা একটি নতুন সম্পত্তি সম্পাদক তৈরি করা শুরু করতে পারি।

আসুন DayPropE.pas মডিউলের ব্যবহার বিভাগে DsgnIntf ​​মডিউলটি উল্লেখ করি এবং ইন্টারফেস বিভাগে একটি নতুন ক্লাস সংজ্ঞায়িত করি:

টাইপ করুন TDWPropED=class(TpropertyEditor) পাবলিক ফাংশন GetValue:string; অগ্রাহ্য করা; পদ্ধতি SetValue(const Value:string); অগ্রাহ্য করা; শেষ;

বাস্তবায়ন বিভাগ এই উভয় পদ্ধতি বাস্তবায়ন করা উচিত. এই ক্ষেত্রে, আমাদের অতিরিক্ত সপ্তাহের দিনের নামের একটি তালিকা প্রয়োজন - সমস্যাটির প্রাথমিক প্রণয়নে প্রোগ্রামার সপ্তাহের দিন প্রবেশ করতে সক্ষম হওয়া প্রয়োজন:

Const DayWeek: array of string = ("সোমবার", "মঙ্গলবার", "বুধবার", "বৃহস্পতিবার", "শুক্রবার", "শনিবার", "রবিবার"); DayWeekEn: array of string = ("সোমবার", "মঙ্গলবার", "বুধবার", "বৃহস্পতিবার", "শুক্রবার", "শনিবার", "রবিবার");

বিষয়ে প্রকাশনা