شنبه، مرداد ۲۶، ۱۳۸۷

ساختن فرم فرزند MDI تک نمونه‌ای در دات نت

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

۱. چگونه ببینیم فرم فرزند باز است یا خیر

فرم والد خصیصه‌ای دارد به نام MdiChildren که آرایه‌ای است از Form ها. برای این که ببینیم فرمی قبلا باز بوده در برنامه یا خیر باید این آرایه را جستجو کنیم. برای این منظور تابعی نوشتم به نام IsChildFormLoaded که نوع فرم مورد نظر را بگیرد و به دلایلی که بعدا توضیح داده خواهد شد اشاره‌گری به فرم فرزند، چنان‌چه یافت شود برمی‌گرداند.

C#
  01:   
  02:   
  03:   
  04:   
  05:   
  06:   
  07:   
  08:   
  09:   
  10:   
  11:   
  12:   
  13:   
private bool IsChildFormLoaded(Type formType, out Form frmChild)
{
    frmChild = null;
    foreach (Form frm in this.MdiChildren)
    {
        if (frm.GetType().Name == formType.Name)
        {
            frmChild = frm;
            return true;
        }
    }
    return false;
}

۲. چگونه فرم فرزند را نمایش دهیم

در حالت عادی برای نمایش یک فرم به عنوان فرزند یک فرم والد MDI چند خط زیر کافیست

C#
  1:   
  2:   
  3:   
SomeFormType frm = new SomeFormType();
frm.MdiParent = this;
frm.Show();

اما این چند خط مقصود مورد نظر ما را برآورده نمی‌کنند. برای این منظور ابتدا باید با تابعی که قبلا معرفی شد، وجود فرم بررسی شود و اگر وجود نداشت ایجاد شود و اگر وجود داشت صرفا فعال شود. برای این منظور تابع ShowOrActivateMDIChildForm به صورت زیر تعریف می‌شود:

C#
  01:   
  02:   
  03:   
  04:   
  05:   
  06:   
  07:   
  08:   
  09:   
  10:   
  11:   
  12:   
  13:   
  14:   
  15:   
  16:   
private void ShowOrActivateMDIChildForm(Type formType)
{
    Form frmChild;
    if (IsChildFormLoaded(formType, out frmChild))
    {
        frmChild.Activate();
        if (frmChild.WindowState == FormWindowState.Minimized)
            frmChild.WindowState = FormWindowState.Normal;
    }
    else
    {
        Form frm = (Form)formType.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, nullnullnew object[0]);
        frm.MdiParent = this;
        frm.Show();
    }
}

خط ۱۲ صرفا یک شی از نوع فرم مورد نظر می‌سازد. علت ظاهر غیرعادی آن این است که ما در این تابع اطلاعی از فرم نداریم بجز شی‌ءای از نوع Type برای فرم مورد نظر. وظیفه‌ی این خط فراخوانی سازنده‌ی کلاس مرتبط با آن نوع و برگرداندن شی‌ء ساخته شده از این طریق می‌باشد.

در انتها فرض کنید پس از انتخاب منویی به نام mnuShowCustomers ما قصد داریم فرمی که اسم کلاسش FormCustomers است را به همین طریق فعال بکنیم:

C#
  1:   
  2:   
  3:   
  4:   
private void mnuShowCustomers_Click(object sender, EventArgs e)
{
    ShowOrActivateMDIChildForm(typeof(FormCustomers));
}

پ.ن.:

۱. MDI مخفف Multiple Document Interface می‌باشد و به مدلی گفته می‌شود که در آن یک پنجره والد است و مابقی پنجره‌های برنامه فرزند آن پنجره‌ی والد خواهند بود و داخل مرزهای آن نمایش داده می‌شوند. در این مدل نوار منو و نوار ابزار بین والد و فرزندان به اشتراک گذاشته می‌شود. برای نمونه محیط برنامه نویسی ویژوال استودیو و برنامه‌های مایکروسافت آفیس چنینند.

 

جمعه، مرداد ۱۸، ۱۳۸۷

آرزوی پاک

پرواز دسته‌جمعی مرغابیان شاد،
بر پرنیان آبی روشن،
در صبحِ تابناکِ طلایی.

آه،
ای آرزوی پاکِ رهایی.

فریدون مشیری

پ.ن.
۱. به نظرم آمد عکس اول بیشتر با توصیف ابتدای شعر جور در می‌آید و عکس دوم بیشتر با ... رهایی.
۲. دوست داشتم انتهای شعر را به قالب زیر می‌نوشتم:

آاااااااااه،
ای آرزویِ
            پاکِ
                 رهایی.

]و مقدار زیادی سکوت[

یکشنبه، مرداد ۱۳، ۱۳۸۷

چگونه بوت لودر سیستم‌عامل خود را ترمیم کنیم

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

ترمیم بوت لودر ویندوز XP

با دیسک نصب ویندوز بالا بیایید، وارد setup شوید و گزینه‌ی repair را انتخاب کنید. در کنسولی که باز می‌شود (recovery console) دستورات زیر را وارد کنید:

  1:   
  2:   
FixMBR
FixBoot

دستور FixMBR کل Master Boot Record را پاک می‌کند و با مقادیر اولیه در BIOS دوباره پر می‌کند. بنابراین با این دستور تمامی بوت‌لودرهایی که قبلا نصب شده بودند از بین می‌روند.

دستور FixBoot موجب نصب بوت‌لودر ویندوز (NTLDR) می‌شود. بنابراین ترتیب استفاده از این دو دستور مهم است.

ترمیم بوت‌لودر ویندوز Vista

با دیسک نصب ویندوز بالا بیایید، وارد setup شوید و گزینه‌ی repair را انتخاب کنید، در پنجره‌ی جدید آخرین گزینه را انتخاب کنید تا برنامه یک کنسول در اختیار شما قرار دهد. سپس دستور زیر را وارد کنید:

  1:   
BootRec.exe /FixMbr /FixBoot

توجه کنید که دستوراتی که در مورد ویندوز XP گفته شد، در Vista دیگر وجود ندارند.

ترمیم بوت‌لودر Grub در لینوکس

برای این مرحله باید یک محیط لینوکسی بالا بیاورید و پارتیشنی که /boot لینوکس معیوب در آن قرار دارد را در جایی mount کنید. برای انجام این کار چند راه وجود دارد. اکثر دیسک‌های نصب کننده‌ی لینوکس گزینه‌ی repair دارند که با انتخاب آن وارد یک محیط لینوکسی می‌شوید که خودش پارتیشن‌های لینوکس معیوب را mount کرده است. راه دیگر استفاده از دیسک‌های لینوکس Live هست.

فرض کنید پارتیشن root لینوکس (یا /boot چنان‌چه پارتیشن‌اش جدا باشد) را mount کرده باشیم در /mnt/oldlinux . با دستور زیر root را به مسیر ذکر شده تغییر می‌دهیم:

  1:   
  2:   
  3:   
[sudo] chroot /mnt/oldlinux
# use sudo in debian based linuxes
# use su -c  or  su -  in red-hat based linuxes if needed

سپس دستورات زیر را اجرا می‌کنیم:

  1:   
  2:   
  3:   
  4:   
  5:   
  6:   
  7:   
  8:   
  9:   
[sudo] grub
# opens a grub shell
find /boot/grub/stage1
# returns the partition location in the form of (hd?, ?)
root (hd??)
# replace question marks with the exact values returend by the previous statement
setup (hd0)
# installs the Master Boot Record
quit

در دستورات بالا عباراتی که بعد از علامت #‌ می‌آیند توضیح هستند.

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

 

شنبه، مرداد ۰۵، ۱۳۸۷

رَندی پاش

من تا کنون «رَندی پاش» را نمی‌شناختم، تا این که در روز گذشته متوجه شدم بسیاری از وبلاگ‌های دنیا (بخصوص وبلاگ‌های کامپیوتری) از او صحبت می‌کنند و از سخنرانی معروفش در دانشگاه «کارنِگی ملون» آمریکا که در هجدهم سپتامبر ۲۰۰۷ انجام شده بود. عنوان سخنرانی‌اش این بود: «واقعا به رویاهای کودکی‌تان برسید» یا «آخرین سخنرانی». چون که حجم فیلم سخنرانی زیاد بود (۲۲۰ مگابایت) دودل بودم که آن را دانلود کنم یا نه. الآن، بعد از دیدن سخنرانی، بسیار خوشحالم که دانلودش کردم و آن را از خوش‌اقبالی‌های زندگی‌ام می‌دانم. این سخنرانی یک تراژدی پر از شور زندگی است. خیلی کم پیش آمده بود از ته دل بگویم به کسی حسودیم شده، اما من به «رندی پاش» حسودیم شد.

«رندی پاش»، در ابتدای سخنانش جهت اطلاع کسانی که او را نمی‌شناختند، چند عکس از اسکن بدن خود را نشان می‌دهد و توضیح می‌دهد که تقریبا ۱۰ غده در کبدش دارد، و پزشکان گفته‌اند تنها ۳ تا ۶ ماه به خوبی سالم خواهد بود؛ با این حال در حال حاضر از سلامتی و وضع جسمانی خوبی برخوردار است؛ خیلی بهتر از بسیاری از حضار.

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

در انتهای سخنرانی او رو به جمعیت کرد و گفت: «این سخنرانی برای شما نبود، بلکه برای فرزندانم بود.» انگار که این حرف‌ها نوعی وصیت برای فرزندانش باشد.

در بیست و پنجم جولای ۲۰۰۸ (یک روز قبل از تاریخ این پست)، «رندی پاش» در سن ۴۷ سالگی، در خانه‌ی خودش و در کنار همسر و سه فرزندش در گذشت.

لینک‌ها:
صفحه‌ی «آخرین سخنرانی»
«آخرین سخنرانی» در یوتیوب (حجم بالای فیلم، یک دیوار آجری است)
متن «آخرین سخنرانی»
«رندی پاش» در ویکیپدیا

گفتاورد:

دیوارهای آجری بی‌دلیل آن‌جا نیستند. دیوارهای آجری برای عقب نگه داشتن ما نیستند؛ دیوارهای آجری آن‌جا هستند تا به ما این امکان را بدهند تا بفهمیم به چه شدت چیزی را می‌خواهیم. دیوارهای آجری آن‌جا هستند تا کسانی را عقب نگه دارند که به اندازه‌ی کافی آن چیز را نمی‌خواهند. آن‌جا هستند تا جلوی آن «دیگران» را بگیرند!

سه‌شنبه، مرداد ۰۱، ۱۳۸۷

خودت را ببخش

با الهام از این پست وبلاگ سپهر...

داشتم فکر می‌کردم به این که چرا از بعضی‌ها بدم می‌آید یا ذهنیت خوبی نسبت بهشان ندارم. احتمالا باید به من بدی‌ای، ظلمی، چیزی کرده باشند؛ الکی که نمی‌شود. اما در مورد خیلی‌هایشان هر چه فکر می‌کنم این قسمت ظلم را پیدا نمی‌کنم.

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

شنبه، تیر ۲۲، ۱۳۸۷

جوان و پیر کدام است؟

زمان نمی‌گذرد، عمر ره نمی‌سپُرَد!
صدای ساعت شمّاطه، بانگ تکرار است.
نه شنبه هست و نه جمعه!
                                     نه پار و پیرار است!
جوان و پیر کدام است؟ زود و دیر کدام؟

اگر هنوز جوان مانده‌ای به آن معناست،
که عشق را به زوایای جان صلا زده‌ای.
ملال پیری اگر می‌کُشد تو را، پیداست؛
که زیر سیلی تکرار،
                           دست و پا زده‌ای!

زمان نمی‌گذرد.
صدای ساعت شمّاطه بانگ تکرار است.
خوشا به حال کسی،
که لحظه لحظه‌اش، از بانگِ عشق سرشار است.

فریدون مشیری

دوشنبه، تیر ۱۷، ۱۳۸۷

ذهن‌های ویروسی و ویروس‌های ذهنی

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

مثلا یکی از انواع ویروس‌ها افکار خودآیند منفی هستند، که این‌جا می‌توان با آن‌ها آشنا شد. به نظر می‌آید نام‌شان واضح باشد، افکار منفی‌ای که به طور غیر ارادی و اتوماتیک به ذهن خطور می‌کنند. خیلی از «بایدها» و «نبایدها»، خیلی از تعمیم‌ها و سیاه و سفید دیدن‌ها جزو آن‌ها هستند. شاید مثال‌هایی که در متن زده ملموس نباشد، یا از حقایق زندگی امروزی ما دور باشد؛ اما دسته‌بندی‌ها اون‌قدر واضح هستند که ما خود بتوانیم مثال‌‌های خوبی بزنیم.

خودم برای شروع نیاز دارم با «تعمیم» مبارزه کنم. از استفاده نکردن از قیدهای «هیچ» و «همه» و «همیشه» و «هرگز». می‌خواهم صفر و یک نبینم بلکه همه‌چیز را بین صفر و یک ببینم. در مورد یک واقعه‌ی بد، به طور کامل مقصر نیستم، و به طور کامل بی‌گناه نیز نیستم. اطرافیانم صد در صد بد نیستند و صد در صد فرشته هم نیستند؛ چیزی مابین این دو. هر چه که باشند، همواره می‌توان از آن‌ها آموخت.

 

گفتاورد:

تمامی تعمیم‌ها نادرست‌اند، به انضمام همین تعمیم.

مارک تواین

جمعه، تیر ۰۷، ۱۳۸۷

انتظاری غیر از این داشتی؟

درست بعد از یک واقعه‌ی بد، یا یک نتیجه‌ی افتضاح، یا در حین یک زندگی کسالت‌آور که هر لحظه‌اش روح و جسمت را فرسوده‌تر می‌کند؛ و درست قبل از کولی‌بازی و ایراد گرفتن از زمین و زمان و سازنده‌اش، و انداختن تمام تقصیرها گردن ژن، محیط و اتفاقات تصادفی زندگی؛ یک سوال از خودت بپرس و منصفانه جواب بده. واقعا؛ با کارهایی که کردی، و کارهایی که می‌توانستی بکنی و نکردی، و آن طرز فکر، انتظار نتیجه‌ای غیر از این داشتی؟

دوشنبه، تیر ۰۳، ۱۳۸۷

دوگانه باوری

دانستن و ندانستن، آگاه بودن از حقیقت مطلق و در عین حال گفتن دروغ‌های ساخته شده،‌ داشتن دو عقیده‌ی متضاد در یک زمان و آگاهی از این امر که با هم در تضادند و باور داشتن به هر دوی آن‌ها، به کار گرفتن منطق علیه منطق، نقض کردن اخلاق و در عین حال ایمان داشتن به آن، باور داشتن به این که دموکراسی محال است و «حزب» پاسدار دموکراسی است، فراموش کردن، فراموشی هر آن‌چه لازم است، پس آن‌گاه دوباره بازگرداندن آن به حافظه در لحظه‌ای که مورد نیاز است و سپس فراموش کردن آن به فوریت، و بالاتر از همه،‌ منطبق ساختن همان روند به خود روند – چشمه‌ی اصلی بازی همین بود: آگاهانه القای ناآگاهی کردن و آن‌گاه، بار دیگر، ناآگاه شدن از عمل هیپنوتیزمی که به کار برده بودی. حتی فهمیدن واژه‌ی «دوگانه باوری» متضمن به کارگرفتن «دوگانه باوری» بود.

۱۹۸۴ – جورج اورول – ترجمه‌ی صالح حسینی

جمعه، خرداد ۳۱، ۱۳۸۷

مرگ زیبا

از قیلم «گاهی به آسمان نگاه کن» - کمال تبریزی