راستش کلی دنبال منبع این نوشته گشتم اما اینقدر جاهای مختلف بدون ذکر منبع اصلی نوشته رو منتشر کرده بودند که نتونستم متوجه بشم منبع اصلی کدومه!! به هر حال از نویسنده عذر میخوام که این مطلب رو بدون ذکر منبع منتشر کردم |
سالها پیش آنقدر از فشارهای پروژه و دشوار بودن تولید نرم افزار در ایران خسته شده بودم که با یکی از دوستان هم دانشگاهی تصمیم گرفتیم یک شغل شرافتمندانه انتخاب کنیم! این بود که مشاغل مختلف را علمی، بررسی کردیم و آخر از همه تصمیم گرفتیم یک میوه فروشی باز کنیم! چرا؟ به هزار و پانزده دلیل! 15 دلیلش را می نویسم، هزارتای بقیه اش را خودتان خواهید دانست:
1- عدم وجود گارانتی: بعد از فروش نرم افزار باید آن را گارنتی کنی. برخلاف بسیاری از مشاغل که شما بابت گارانتی پول اضافه می گیرد و نزد خود نگه می دارید، در نرم افزار بر عکس عمل می شود و این کارفرمای شماست که از شما تضمین (درصدی از قرارداد، چک تضمین، سفته و یا ضمانت نامه بانکی یا همه مواد) می گیرد. در حالیکه میوه فروشی گارانتی ندارد، جنس فروخته شده پس گرفته نمی شود.
2- بازه کوتاه زمان فروش: یک پروژه نرم افزاری ماهها طول می کشد و باعث فرسایش نیروی کار می شود در حالیکه در میوه فروشی، صبح زود بار میوه و سبزی می آوری، حداکثر تا ظهر سبزی ها تمام می شود، میوه ها هم، بسته به محیط شما، در مدت زمان کوتاهی فروش می روند و شما بازهم بار جدیدی می آورید.
3- تغییر نیاز ندارید: رایج است که نیازهای مشتری تازه زمانی آشکار می شود که شما نرم افزار را فروخته اید و مشتری متوقع است که در چارچوب همان قرارداد تغییرات اعمال شود، حتی اگر ماهیت تغییر کند. اما در میوه فروشی، خریدار که از مغازه خارج شد شما دیگر مسؤولیتی ندارید، اگر تصمیمش عوض شد، شما نگران نیستید، یک کالای جدید به وی می فروشید.
۴- عدم محصول ارجاعی: در نرم افزار اگر محصول شما کار نکرد و یا قدیمی شد مشتری یا ارجاع می دهد و یا دیگر سراغش نمی آید، در میوه فروشی شما میوه سالم را به مردم به قیمت گران، میوه نیمه خراب را ارزان تر به مردم کم درآمد تر و احتمالا میوه کاملا خراب را به آبمیوه فروشی ها و نمی دانم لواشک سازی ها می فروشید!
۵-واسطه گری به جای تولید: در میوه فروشی شما محلی برای عرضه کالای دیگران هستید، معمولا افزایش قیمت بین میدان میوه و تره بار با مغازه شما چند برابراست . اما در نرم افزار شما تولید می کنید و دردسر های آن را دارید تازه در انتها و پس از کسر انواع مالیات و بیمه هزینه تولید را در بیاورید خیلی هنر کرده اید!
۶-مدیریت نیروی انسانی، خیر!: شما در شرکت نرم افزاری با نیروی لوس و نازک نارنجی کارشناس سروکار دارید که کافی است یک کم ناراحت شود، هوس کانادا به سرش می زند، اما در میوه فروشی یکی دو کارگر از برادران افغانی می گیرید، مثل ساعت برای شما کار می کنند و غر که نمی زنند هیچ با همه سختی ها هم می سازند.
۷-فصلی بودن کار، تعطیل: در تولید و فروش نرم افزار شما وابسته به زمان هستید، برای مثال دولتی ها معمولا در ماه های خاصی خرید بیشتری می کنند، یا در فروردین و اردیبهشت شما با افت فروش مواجه می شوید، اما در میوه فروشی هر فصلی میوه خودش را دارد و شما آن را می آورید، هر میوه ای هم طرفدار خاص خودش را دارد و شما تقریبا در همه سال فروش خود را یکنواخت خواهید داشت. شب عید ها هم که جای خودش را دارد و شما پوست خلایق را حسابی خواهید کند.
۸- بازار دائمی: نرم افزاریها مانند یک کارگر ساختمانی هستند، باید ساختمانی ساخته شود تا به آنان نیاز باشد، وقتی بودجه IT کشور صفر شود که نمی توان پروژه ای تعریف کرد که نرم افزاری روی آن کار کند، چون هنوز از دیدگاه اغلب تصمیم گیرندگان ما، نرم افزار یک کار تشریفاتی است. اما میوه فروشی نیاز روز مردم است، همه هر روز خرید خودشان را دارد، وضع مردم بد هم بشود باز هم مهمانی می آید که شما وادار شوید حتما میوه خوب بخرید.
۹-درهم است: در نرم افزار شما قاصر هستید از اینکه به یک مشتری بفهمانید نرم افزار با نرم افزار متفاوت است. چون با یک چیز انتزاعی طرف است، بین نرم افزاری حسابداری 5 هزارتومانی با حسابداری 10 میلیون تومانی فرقی قائل نیست. در حالیکه در میوه فروشی ، مشتری تفاوت سیب با سیب را در می یابد و اگر دنبال کیفیت خوب است پولش را هم می پردازد.
۱۰- شما فقط میوه را می فروشید: در نرم افزار وقتی شما نرم افزاری عرضه می کنید، داستان عرضه خدمات پس از فروش شروع می شود، آموزش کاربران بعضا واقعا تعطیل! تبدیل اطلاعات و انتقال آنها از سیستم قدیمی به جدید، عرضه سخت افزار، نگرانی از کارکردن نرم افزار روی هر نوع سخت افزار آشغالی که مشتری به شما می دهد و ... اما در میوه فروشی، شما فقط میوه را می فروشید اینکه هندوانه را چطور می خورند، گیلاس را چطور؟ اینکه آیا مشتری ظرف مناسبی برای نگهداری میوه دارد و یا خیر نیز به شما ربطی ندارد.
۱۱- یک بار برای همیشه، هرگز: نرم افزار را که می فروشید مشتری توقع دارد این نرم افزار مادام العمر باشد برایش ، به سادگی حاضر نیست قرارداد پشتیبانی و ارتقاء نرم افزار ببندد، اما همه می دانیم که یک میوه را برای همه سال نمی توان نگه داشت، خورده می شود بالاخره! باید میوه جدیدی خرید!
۱۲- باگ: خرابی میوه نگرانی ندارد، روشهای نگهداری میوه معلوم است و اگر شما یک کم تجربه پیدا کنید می توانید به سادگی آن را نگهداری کنید، اما در نرم افزار آنقدر مشکلات متعدد و متفاوت پیش می آید که شما گیج می شوید که این خطا از کجاست و راه حلش چطور است؟ مناطق بحرانی ، آنقدر خطایابی را سخت می کنند که شما نیاز به فاز مجزایی برای آن پیدا می کنید و هزینه زیادی برای هر خطا می پردازید، تازه تضمینی وجود ندارد که همه خطا ها را پیدا کرده باشید و روز تحویل به مشتری، جلوی چشم وی، آنقدر سیستم خطا می دهد که شما آب می شوید و زمین می روید.
۱۳-آن که خربزه می خورد پای لرزش می نشیند: شما مسؤول نحوه استفاده مشتری از میوه نیستید، مهم نیست برایتان که در عزا بخورند یا در عروسی، مهم نیست که به طرف نمی سازد یا می سازد. اما در نرم افزار، کافی است از نرم افزار شما سوء استفاده شود، نمی دانم چرا یقه شما را می گیرند که چرا از طریق نرم افزار شما به ما آسیب وارد شد، چرا هک شد، چرا ....؟
1۴-دوره بازپرداخت سریع: در میوه فروشی به محض فروش میوه پولتان را می گیرید، اما در نرم افزار تازه پروژه را که تحویل دادید و صورتجلسه کردید، باید بدوید به دنبال پولتان، آنقدر این پول دادن دیر و تکه تکه می شود که به نوش داروی پس از مرگ سهراب می ماند، به شکلی که بعضی وقت ها بی خیال پولتان می شوید.
1۵- تنوع مشتری: شما در یک شرکت نرم افزاری با طیف خاصی از مشتری سروکار دارید، یا دولتی یا خصوصی یا آموزشی یا ... اما در میوه فروشی شما قیدی برای مشتری ندارید، زن و مرد، کوچک و بزرگ، دارا و ندار، پیر و جوان، شهری و روستایی ،... همه به نوعی مشتری شما هستند، آنهم مشتری دائمی که از همه چیز می گذرد الا از خوردن!
1۶- کپی رایت: در میوه فروشی نمی توانید یک میوه را بخرید و تکثیر کنید، در نرم افزار می توانید، خوب هم می توانید. اگر تولید کننده ناراحت هم شد مهم نیست، چون یا قانون کافی نداریم و یا آنقدر این قضیه پیچیده است که شما بی خیال می شوید.
برای تصمیم گرفتن کافی نیست!؟
نمی دانم چرا با وجود همه این استدلال های منطقی، میوه فروش نشدم. آرزو می کنم حداقل یک نفر این مطلب را بخواند و به راه راست هدایت شود! دست از مهندسی نرم شدن بردارد و به قول بچه ها یک کار آ«شرافتمندانهآ» پیدا کند. امیدوارم...
شرکت بریتیش تله کام یا همان BT لیستی از احمقانه ترین سوالاتی را که کاربران کامپیوتری یا اینترنتی این شرکت ارتباطی از مشاوران آنها پرسیدهاند منتشر کرد. به نوشته پایگاه اینترنتی روزنامه مترو برخی از این سوالات آنقدر خنده دار است که حتی خود سوال کنندگان پس از فهمیدن اشتباه خود به احمقانه بودن آن اعتراف کردهاند. لیست احمقانه ترین سوالات IT که از مشاوران شرکت BT انگلستان پرسیده شده به شرح زیر است:
....................
مرکز : چه برنامه آنتی ویروسی استفاده می کنید؟
مشتری : Netscape
مرکز : اون برنامه آنتی ویروس نیست.
مشتری : اوه، ببخشید... Internet Explorer
....................
مشتری : من یک مشکل بزرگ دارم. یکی از دوستام یک Screensaver روی کامپیوترم گذاشته، ولی هربار که ماوس رو حرکت میدم، غیب میشه!
....................
یک مشتری نمیتونه به اینترنت وصل بشه...
مرکز : شما مطمئنید رمز درست رو به کار بردید؟
مشتری : بله مطمئنم. من دیدم همکارم این کار رو کرد.
مرکز : میشه به من بگید رمز عبور چی بود؟
مشتری : پنج تا ستاره.
....................
مشتری : من توی پرینت گرفتن با رنگ قرمز مشکل دارم...
مرکز : آیا شما پرینتر رنگی دارید؟
مشتری : نه.
....................
مرکز : روی آیکن My Computer در سمت چپ صفحه کلیک کن.
مشتری : سمت چپ شما یا سمت چپ من؟
....................
مرکز : رمز عبور شما حرف کوچک a مثل apple، و حرف بزرگ V مثل Victor، و عدد 7 هست.
مشتری : اون 7 هم با حروف بزرگه؟
....................
مرکز : چه کمکی از من برمیاد؟
مشتری : من دارم اولین ایمیلم رو مینویسم.
مرکز : خوب، و چه مشکلی وجود داره؟
مشتری : خوب، من حرف a رو دارم، اما چطوری دورش دایره بذارم؟
....................
مشتری : سلام، من «سلین» هستم. نمی تونم دیسکتم رو دربیارم
مرکز : سعی کردین دکمه رو فشار بدین؟
مشتری : آره ولی اون واقعاً گیر کرده
مرکز : این خوب نیست، من یک یادداشت آماده میکنم...
مشتری : نه... صبر کن... من هنوز نذاشتمش تو درایو... هنوز روی میزمه.. ببخشید...
....................
کاربر: کامپیوتر می گوید هر کلیدی را (any keys) فشار دهید اما من میتوانم دکمه any را روی کیبوردم پیدا کنم.
....................
کاربر: من نمیتوانم کانالهای تلویزیون را با مانیتورم عوض کنم.
....................
کاربر: من با یک نفر در اینترنت آشنا شدم میتوانید شماره تلفن او را برای من پیدا کنید.
....................
کاربر: اینترنت من کار نمیکند؟
مشاور: مودم را وصل کردهاید، همه سیمهای کامپیوتر را چک کردهاید؟
کاربر: نه الان فقط مانیتور جلوی من است هنوز کامپیوتر و مودم را از جعبه در نیاوردهام!
....................
کاربر: پسر 14 ساله من برای کامپیوتر رمز گذاشته و حالا من نمی توانم وارد آن شوم.
مشاور: رمز آن را فراموش کرده؟
کاربر: نه آن را به من نمیگوید چون با من لَج کرده!
....................
مشاور: لطفا روی My Computer ،کلیک کنید.
کاربر: من فقط کامپیوتر خودم را دارم کامپیوتر شما پیش من نیست.
....................
مشاور: مشکل شما به خاطر نرم افزار اسپای ویری است که روی دستگاهتان نصب شده(اسپای در انگلیسی به معنی جاسوس است)
کاربر: اسپای!؟ ببینم یعنی او می تواند از داخل مانیتور وقتی لباس عوض میکنم من را ببیند؟
....................
کاربر: ماوس پد من سیم ندارد!
مشاور: من فکر کنم متوجه منظور شما نشدم. ماوس پد شما قرار نیست سیمی داشته باشد.
کاربر: پس چگونه می تواند ماوس را پیدا کند؟ یعنی وایرلس است؟
....................
مرکز مشاوره: چه نوع کامپیوتری دارید؟
مشتری: یک کامپیوتر سفید...
....................
مرکز : روز خوش، چه کمکی از من برمیاد؟
مشتری : سلام... من نمی تونم پرینت کنم.
مرکز : میشه لطفاً روی Start کلیک کنید و...
مشتری : گوش کن رفیق؛ برای من اصطلاحات فنی نیار! من بیل گیتس نیستم، لعنتی!
....................
مشتری : سلام، عصرتون بخیر، من مارتا هستم، نمی تونم پرینت بگیرم. هر دفعه سعی می کنم میگه : «نمی تونم پرینتر رو پیدا کنم» من حتی پرینتر رو بلند کردم و جلوی مانیتور گذاشتم ، اماکامپیوتر هنوز میگه نمیتونه پیداش کنه...
....................
مرکز : الآن روی مانیتورتون چیه خانوم؟
مشتری : یه خرس Teddy که دوستم از سوپرمارکت برام خریده!
....................
مرکز : الآن F8 رو بزنین.
مشتری : کار نمی کنه.
مرکز : دقیقاً چه کار کردین؟
مشتری : من کلید F رو 8 بار فشار دادم همونطور که بهم گفتید، ولی هیچ اتفاقی نمی افته...
....................
مشتری : کیبورد من دیگه کار نمیکنه.
مرکز : مطمئنید که به کامپیوترتون وصله؟
مشتری : نه، من نمی تونم پشت کامپیوتر برم.
مرکز : کیبوردتون رو بردارید و 10 قدم به عقب برید.
مشتری : باشه.
مرکز : کیبورد با شما اومد؟
مشتری : بله
مرکز : این یعنی کیبورد وصل نیست. کیبورد دیگهای اونجا نیست؟
مشتری : چرا، یکی دیگه اینجا هست. اوه... اون یکی کار می کنه!
در اینجا یکسری از دستورات sql گذاشتم که در کدنویسی کاربردهای زیادی دارند و من تنها نمونه ای از انها رو اوردم . help نرم افزار sql server اطلاعات بیشتری را در اختیار شما قرار میدهد . به امید انکه مورد استفاده دوستان قرار گیرد .
یافتن نام Instance فعال
SELECT CONVERT(char(20), SERVERPROPERTY('servername')) as Instance Name
یافتن نام سیستم
SELECT CONVERT(char(20), SERVERPROPERTY('MachineName') ) as serverName
SERVERPROPERTY دارای پارامترهای زیادی است که با تغییر ان می توان اطلاعات زیادی به دست اورد .
یافتن نام database
برای پیدا کردن نام database از این دستور می توانید استفاده کنید که ارگمانهای زیادی دارد . information_schema این دستور کاربردهای بیشتری دارد که با جستجوی بیشتر اطلاعات بیشتری پیدا میکنید .
SELECT table_catalog'tablecatalog' FROM information_schema.columns WHERE table_name = 'نام جدول'
یافتن نام فیلدها ، نوع ، سایز و...
SELECT column_name 'Column Name',
data_type 'Data Type',
CHARacter_maximum_length 'Maximum Length'
FROM information_schema.columns
WHERE table_name = 'نام جدول'
فارسی کردن فیلدها
برای این کار می توان از قسمت توضیحات که در زمان طراحی برای هر فیلد وجود دارد استفاده کرد . در این حالت نام فیلدها را به همراه فیلد توضیحات برای شما می اورد .
select a.value,b.name from sysproperties a full Join syscolumns b
on )a.smallid=b.colid) and ( a.id=b.id ) where
b.id in (Select id from sysobjects where name ='نام جدول'(
یافتن refrence های یک جدول
اگر یک جدول به چنیدین جدول دیگر ارتباط داشته باشد برای فهمیدن این موضوع از دستور زیر استفاده کنید .
select * from sysobjects where parent_obj in )select id from sysobjects where name='نام جدول'(
select * from sysreferences where Constid=' ای دی نتیجه قبل را قرار میدهیم در اینجا ' --constid in refrences = id into sysobjects
select * from sysobjects where id=' rkeyid نتیجه قبل را گذاشت در اینجا باید '
برقراری ارتباط بین دو instance
برای این کار در خود sql در قسمت security بر روی Linked Server کلیک راست کرده و گزینه New Linked Server را میزنیم در سربرگ General در مکان Linked Server نام سروری را که می خواهیم به ان متصل شویم را وارد میکنیم و از قسمت Server Type باید Sql Server را انتخاب کنیم و در سربرگ security قسمت Be Made using this security contex را انتخاب و در قسمت Remote login کلمه sa و در قسمت With password کلمه عبور خود را وارد کنید این کار را در هر دو instance انجام دهید . این عمل را با کد زیر نیز می توانید انجام دهید به جای instance name نام instance خود را بگذارید .
USE master
GO
EXEC sp_addlinkedserver
'instance name',
N'SQL Server'
GO
و یا به صورت
USE master
GO
EXEC sp_addlinkedserver
'instance name'
,
'',
'MSDASQL',
NULL,
NULL,
'DRIVER
={SQL Server};SERVER
=MyServer;UID
=sa;PWD
=;'
GO
حالا ازinstance که در ان قرار دارید به instance دیگری که لینک شده اید دسترسی دارید به عنوان مثال :
select * from[instance name].database name .dbo.table name
select * from [server\Test].Anbar.dbo.test2
براقراری ارتباط با اراکل
USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
@server = 'LONDON Mktg',
@srvproduct = 'Oracle',
@provider = 'MSDAORA',
@datasrc = 'MyServer'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
'LONDON Mktg',
'Oracle',
'MSDAORA',
'MyServer'
GO
روشهای شناسایی بیومتریک از روی انگشت، چهره یا عنبیه چشم، راه موثری برای تامین امنیت دستگاههای کامپیوترهای سرویس دهنده است. در این سلسله مقالات با هم برتری و کاستیها و همچنین چگونگی کارکرد روشهای بیومتریک را میبینیم.
اگر نظر کارشناسان را بپذیریم باید بگوییم که دوران ورود به سیستمهای کامپیوتری از طریق وارد کردن گذر واژههای ساخته شده از حروف و ارقام از راه صفحه کلید به سر آمده. در آینده از برخی ویژگیهای بدن که تغییر نمیکنند مانند اثر انگشت، چهره، چشم، صدا یا دستخط برای شناسایی کاربر و تعیین صلاحیت او برای کار با سیستمهای کامپیوتری استفاده خواهد شد. هدف از این کار بالاتر بردن امنیت سیستمها و جلوگیری از دسترسی کاربران غیر مجاز است. اما از این روشها نه تنها برای تامین امنیت سیستمهای کامپیوتری بلکه برای افزایش ایمنی شرکتها و مکانها نیز استفاده میشود. روشهای کنونی تشخیص هویت مبتنی بر کارتهای شناسایی دیگر مناسب نیست و بسیار نامطمئن است. از این گذشته این روشها هم نیروی انسانی و هم زمان زیادی میطلبد این کاستیها را میتوان با کمک روشهای تشخیص هویت بر طرف کرد. چون این روشها نه تنها درستی دادهها را بررسی میکنند بلکه میبینند آیا این شخص صاحب واقعی این مشخصات است یا نه.
این روشها نه تنها درستی دادهها را بررسی میکنند بلکه میبینند آیا این شخص صاحب واقعی این مشخصات است یا نه.
به این ترتیب سیستمهای بیومتریک با ارائه کار کرد بهتر، هزینههای بالاتر خود را جبران میکنند. در این مقاله به طور مفصل با روشهای بیومتری جاری آشنا شده و به جزئیات آنها پی میبرید.
در دلفی اگر می خواهید در TreeView گره ها راست به چپ نمایش داده شوند از کد زیر استففاده کنید .
const
WS_EX_NOINHERITLAYOUT = $00100000; // Disable inheritence of mirroring by children
WS_EX_LAYOUTRTL = $00400000; // Right to left mirroring
procedure SetWinControlBiDi(Control: TWinControl);
var
ExStyle: Longint;
begin
ExStyle := GetWindowLong(Control.Handle, GWL_EXSTYLE);
SetWindowLong(Control.Handle, GWL_EXSTYLE, ExStyle or WS_EX_RTLREADING or WS_EX_RIGHT
or WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT );
end;
ودر رویداد FormShow کد زیر را بنویسید .
SetWinControlBiDi(TreeView);
TreeView.Refresh;
موفق باشید
استفاده از DLL و کدهای داخل آن بهترین راه حل برای برنامه شما می باشدچرا که در آینده اگر قصد تغییراتی در برنامه خود را داشته باشید می توانید با ویرایش این DLL آن تغییرات را اعمال کنید.با ساخت دستورات و عملکردهای گوناگون در DLL می توانید سورس کد راحت تر و منظم تری در برنامه اصلی خود داشته باشید. یکی دیگر از مزایای DLL قابلیت Update نرم افزار می باشد. به طور مثال فرض کنید برنامه شما از یک DLL برای دستورات خود استفاده می کند. اگر در آینده نیاز به تغییراتی در آن داشته باشید ، می توانید DLL خود را تغییر دهید و از کاربران بخواهید تا به جای تغییر دادن کل برنامه شما ، فقط DLL مربوطه را تغییر دهند تا برنامه شما عملکرد جدیدی داشته باشد. ضمناْ به یاد داشته باشید DLL نوشته شده در هر زبانی قابل استفاده در زبانهای برنامه نویسی دیگر نیز می باشند .پس به خاطر داشته باشید استفاده از DLL ها مزایای فراوانی را به شما در برنامه نویسی می دهد.
ایجاد Dll
ابتدا از منوی File گزینه New و سپس Other را انتخاب نمایید. زینه DLL Wizard را انتخای کرده و OK را فشار دهید. اکنون فرمی باز شده که حاوی یک سری توضیحات می باشد. این فایل رابا نام MyDll.dpr ذخیره کنید. از منوی File گزینه New و سپس Unit را انتخاب نمایید . اکنون این فایل را با نام Msg.pas در همان شاخه ای که فایل قبلی خود را با نام MyDll.dpr قرار دادید ، ذخیره نمایید.
حال کدهای خود را در unit ایجاد شده وارد کنید . در انتهای نام پروسیژر از کلمه stdcall استفاده می کنیم به این منظور که در تما زبان های برنامه نویسی قابل استفاده باشد .
unit MsgDll;
interface
uses SysUtils;
procedure ShowMessage (var textmsg:string);stdcall;
implementation
uses Msg;
procedure ShowMessage (var textmsg:string);stdcall;
begin
Msg:=TMsg.create(nil);
Msg.show;
end;
end.
زمانی که کدهای خود را نوشتید . پروسیژرهایی که در برنامه های دیگر قرار است فراخوانی شوند را باید تعریف کنیم برای این کار به صفحه اصلی خود MyDll رفته و قبل از begin با دستور Exports نام پروسیژر خود را تعریف کنید مانند زیر :
exports
ShowMessage;
فراخوانی dll در دلفی
باید در بالای برنامه قبل از implementation پروسیژر مورد نیاز در dll را تعریف کنید که این کار با دستور زیر است.
Procedure ShowMessage(textMsg:String); StdCall;
external 'MsgDLL.dll';
نکته 1
در dll ها نمی توان یک فرم را به راحتی با دستور show ,showmodal نشان داد و باید فرم مورد نظر را create کرد . این کار را با دستور زیر انجام می دهیم . Msg نام فرم است .
Msg:= Msg.create(nil);
Msg.ShowModal;
نکته2
برای ارسال یک فرم یا Application و یا Screen به dll باید حتما از کلمه Var در تعریف پروسیژر استفاده کنید .
نکته 3
در دلفی 7 برای ارسال مقدار از نوع رشته ای باید نوع ان را widestring در نظر گرفت
نکته 4
در دلفی 7 با استفاده از یونیت sharemem برای ارسال صحیح اطلاعات میتوان استفاده کرد
کامپوننت های دلفی یکی از فایل ها با پسوند زیر هستند که در اینجا هر کدام را جداگانه توضیح می دهیم .
نحوه نصب کامپوننتهای با پسوند bpl ، .dpk ، .pas ، .ocx و .dll
ادامه مطلب ...با کد زیر شما می توانید نوع سیستم عامل خود را تشخیص دهید .
RegDBSetDefaultRoot (HKEY_LOCAL_MACHINE);
RegDBGetKeyValueEx ("\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\", "ProductName", nvType, svNumValue,nvSize) ;
راه حلی که من استفاده کردم نوشتن اسکریپتی برای تغییر در رجیستری ویندوز است . که در مسیر HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLS erver\Client\ConnectTo
تمام الیاس های تعریف شده قرار دارد . حال برای اضافه کردن یک الیاس جدید کافی است که کد زیر را بنویسید :
RegDBSetDefaultRoot( HKEY_LOCAL_MACHINE );
RegDBSetKeyValueEx ( "Software\\Microsoft\\MSSQLServer\\Client\\ConnectTo\\"
,str_name_system_server+"\\"+str_instansename1, REGDB_STRING, "DBNMPNTW,\\"+"\\data\\pipe\\MSSQL$"+str_instansename1+"\\sql\\query", -1 );
که str_instansename1 نام instance و str_name_system_server نام سرور است .
با RegDBSetDefaultRoot نام ریشه را مشخص می کنیم . RegDBSetKeyValueEx مقادیر خود را برای اضافه کردن مشخص می کنیم . که مسیر ، نام ، نوع ، مقدار و سایز را می دهیم . که با تغییر در کد می توانید هر مقادری را به رجیستری اضافه کنید .
اگر بخواهید با کلیک بر روی فرم صفحه خود را minimize کنید Procedure های زیر را بالای برنامه خود قرار دهید
procedure Tform1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := WS_EX_APPWINDOW;
end;
{I have tried with and with out the following procedure}
procedure Tform1.WMSyscommand(var Message: TWmSysCommand);
begin
case (Message.CmdType and $FFF0) of
SC_MINIMIZE:
begin
ShowWindow(Handle, SW_MINIMIZE);
Message.Result := 0;
end;
SC_RESTORE:
begin
ShowWindow(Handle, SW_RESTORE);
Message.Result := 0;
end;
else
inherited;
end;
برای ایجاد یک xml به طور خیلی ساده می توانید از کد زیر استفاده کنید .که به طور دلخواه برای ایجاد هر گره مقادیر خود را بین </> <> تعریف می کنید .
procedure tform1.createxml();
var
DXML:TXMLDocument;
begin
DXML:=TXMLDocument.Create(Self);
DXML.Active:=true;
DXML.XML.Text:='<?xml version="1.0" encoding="windows-1256" ?> '+
'<Ask>'+
'<systemname>'+ systemname +'</systemname>'+
' <hostname>'+ hostname+'</hostname>'+
' <Date>'+ datetostr(now)+' </Date>'+
'</Ask>';
FileName_xml:= 'options.xml';
DXML.XML.SaveToFile(ExtractFilePath(Application.ExeName)+FileName_xml);
end;
شاید شما در installshield به مقداری که کاربر وارد می کند نیاز داشته باشید که برای این کار باید یک متغیر سراسری تعریف کنید . برای تعریف یک متغیر سراسری که بتوان از آن در تمام توابع و دیالوگ ها استفاده کرد مراحل زیر را طی کنید .
در Behavior and logic گزینه installscript را انتخاب کنید حالا در سمت راست سه شاخه می بینید files , function و properties بر رو ی properties راست کلیک و add new property را کلیک کنید . در قسمت property name نام متغیر را وارد کنید . در قسمت data type نوع آن را مشخص کنید و در Local Variable Name نامی را که در حین کدنویسی به آن نیاز دارید را تایپ کنید . در Default Value هم مقدار پیش فرض خود را قرار دهید . بر روی ok کلیک کنید . خواهید دید که نام متغیر به لیست properties شما اضافه خواهد شد . اگر اضافه نشد باید آن را تعریف کنید برای این کار کد زیر ررا با نام متغیر خود در بالای فرم تعریف کنید در اینجا متغیری با نام sale از نوع number تعریف شده است .
property(get,put) NUMBER sale();
NUMBER m_sale
و پنج تابع زیر هم اضافه خواهد شد .
function InitProperties()
begin
m_nsale = 0;
end;
function ReadProperties(PropertyBag)
begin
ReadNumberProperty(PropertyBag, "sale", m_nsale);
end;
function WriteProperties(PropertyBag)
begin
WriteNumberProperty(PropertyBag, "sale", m_nsale);
end;
function NUMBER get_sale()
begin
return m_nsale;
end;
function void put_sale(newVal)
begin
m_nsale = newVal;
end;
حال هر جا که احتیاج داشتید با فراخوانی متغیر خود (m_sale) می توانید از آن استفاده کنید .
افراد زیادی برای ساخت یک برنامه نصب از installshield استفاده می کنند . مزیت این نرم افزار نسبت به بقیه پشتیبانی قوی نسبت به بانک ها ی اطلاعاتی است اما نسبت به پشتیبانی فارسی کمی دچار مشکل می شویم . درباره این نرم افزار و نحوه کار کردن با آن در سایت های مختلف به صورت تکراری بیان شده است که من آنها را بیان نمی کنم . در اینجا چگونه فارسی کردن مراحل setup را یاد می گیریم . که کمترجایی عنوان شده است .
روش اول :
در زمان ایجاد پروژه جدید گزینه Basic MSI Project را انتخاب کنید در این صورت امکانات شما کمتر است . اما برای انجام یک پروژه کوچک مناسب است . در این محیط دست شما برای کدنویسی باز نیست . در نسخه 10.5 و 2008 این نرم افزار از منوی tools\add new language می توانید زبان فارسی را به برنامه خود اضافه کنید (البته شاید در نسخه های دیگر آن هم این گزینه باشد اما من در نسخه2009 پیدا نکردم اما در نسخه کامل آن زبان فارسی و یا عربی به لیس زبان ها یآن اضافه شده است و شما کافی است فارسی را نتخاب کنید) . حال اگر به لیست زبان های خود در Installation Localization نگاه کنید خواهید دید که زبان فارسی اضافه شده است . در Installation Designer قسمت User Interface بر روی Dialog کلیک کنید . اگر روی هر دیالوگ کلیک کنید خواهید دید که زبان فارسی در آنجا وجو دارد که با انتخاب هر آیتم و تغییر متن خصوصیت text به فارسی می توانید تمام پنجره های خود را فارسی کنید .
یک روش دیگر استفاده از تصاویر با پسوند BMP است که این عمل هم تنها در حالت Basic MSI Project درست عمل می کند . اما مزیت این روش این است که می توانید فرم های خود را به صورت دلخواه طراحی کنید برای تغییر زمینه دکمه ها هم باید خصوصیت Control Style آن را به Bitmap و یا Icon تغییر دهید .
روش دوم :
در زمان ایجاد پروژه بر روی Installscript Project کلیک کنید . در اینجا دیگر قادر نیستید در طراحی فارسی تایپ کنید اما با کد نویسی این امکان برای شما وجو دارد . در قسمت Installation Designer بر روی Behavior and Logic گزینه Installscript را انتخاب کنید . حال با توجه به دیالوگ هایی که مورد نیاز دارید و در حین نصب استفاده می کنید که بیشتر این دیالوگ ها خود در صورت عبور از تمامی مراحل در اینجا قرار میگیرند و با تغییر دو لیست باکس بالای صفحه می توانید رویدادهای را که می خواهید اتفاق افتند را انتخاب کنید . حالا هرجاییی که متنی قرار گرفته است را با متن فارسی خود جایگزین کنید . که در زیر کد دیالوگ welcom را به عنوان نمونه قرار داده ام . که به جای متن فارسی قبلا szTitle و szMsg وجود داشته است .
Dlg_SdWelcome:
szTitle = "";
szMsg = "";
//{{IS_SCRIPT_TAG(Dlg_SdWelcome)
nResult = SdWelcome("به برنامه نصب خوش آمدید" ,"نرم افزار بر روی سیستم شما نصب خواهد شد " );
//}}IS_SCRIPT_TAG(Dlg_SdWelcome)
if (nResult = BACK) goto Dlg_Start;
با کمی جستجو در این زمینه می توانید اطلاعات خیلی خوبی به دست بیاورید من به طور مختصر کدهای این برنامه را قرار دادم که با ایده گرفتن از آن و یا جستجو بیشتر نتایج بهتری به دست بیاورید . این برنامه کوچک قادر است فایل های روی host را دانلود کنید و نرمافزار خود را به روز کنید با دیگر object های آن مثل plogin می توانید اتصال به اینترنت را هم چک کنید و ... .
شی های مورد نیاز : IdLogEvent1 و IdAntiFreeze1 وIdFTP1 و DirectoryListBox و ProgressBar1 و... .
با استفاده از 4 فیلد متنی آدرس host و نام کاربری و کلمه عبور و آدرس فایل بر روی host را دریافت می کنیم . در دکمه connect کد زیر را می نویسیم .
.
.
شاید تا به حال پیش آمده که نرم افزاری بزرگ نوشته باشید و بعد بخواهید آن را به روز کنید . ( مانند به روز رسانی آنتی ویروس ها ) . من در این جا یک روال ساده را مرحله به مرحله بیان می کنم و بعد خود شما می توانید آن را تکمیل کنید .
برای این کار روش های زیادی وجود دارد که در این جا یک روش خیلی ساده گفته می شود که با توجه به کاربرد آن باید جای مراحل تغییر کند . (مثلا اول زمان آخرین دسترسی به فایل چک شود و بعد اتصال به اینترنت ) آدرس فایل های به روزرسانی را از روی فایل xml در host بخواند و آنها را دانلود و به روز کند و یا فایل xml را روی سیستم کاربر کپی کند و بعد آن را بخواند و با یک progressbar زمان به روزرسانی را نشان دهد. این تنها یک برنامه ساده است که شاید به شما که در اول کار هستید کمک کند .