PDA

View Full Version : سوال: آیا راهی برای فهمیدن انتقال فوکوس به برنامه دیگر هست؟



mbshareat
سه شنبه 19 مهر 1390, 20:42 عصر
با سلام
من دو برنامه دارم که همزمان اجرا می کنم در محیط یکی متن کتابی و در محیط دومی متن کتاب شرح آن را نمایش میدهم.
در این دو برنامه کاربر امکان دستکاری متن را دارد.مشکل من این است که من مکان نما را شبیه سازی کرده ام و بسته به تایمر مکان نما را در ListBox در سطر جاری نمایش می دهم یا مخفی می کنم!
(راه دیگری نداشتم چون کارکترهای نمایشی ویندوزی نبودند و ...)
کاربر می تواند برای انتقال از متن به شرح یا بالعکس در برنامه کلیک کند و به آن منتقل شود ولی با وجود چشمک زن بودن مکان نما در هر دو برنامه گاهی گیج می شود که کدام محیط آماده ویرایش است. اگر بتوانم پنجره فعال را که لبه هم ندارد رنگی کنم می توانم مشکل را حل کنم.
اما نمی دانم چطور از دست رفتن فوکوس پنجره را در برنامه متوجه شوم. فکر می کردم OnDeActivate بتواند کمک کند ولی در دلفی 6 که من دارم با فعال کردن ListBox برنامه دیگر این رویداد اتفاق نمی افتد.
آیا کسی راه دیگری سراغ دارد؟

daneshmand1354
سه شنبه 19 مهر 1390, 20:54 عصر
فکر میکنم دستور ActiveControl بتواند به شما کمک کند مثال
if ActiveControl=DBGrid1 then begin
در این مثال هر گاه فوکوس روی DBGRID1 باشد شرط مقدار صحیح را برمیگرداند

یوسف زالی
سه شنبه 19 مهر 1390, 21:19 عصر
سلام.رویداد های OnExit و OnEnter نمی تونه کمکی کنه؟

MohsenB
سه شنبه 19 مهر 1390, 23:11 عصر
سلام

شما باید از رویدادهای کنترل ApplicationEvents استفاده کنید نه از فرم برنامتون .

برای مثال یه پنل رو فرم بزارید و این کدها رو به برنامتون اضافه کنید


procedure TForm1.ApplicationEvents1Activate(Sender: TObject);
begin
Panel1.Color:= clred;
end;

procedure TForm1.ApplicationEvents1Deactivate(Sender: TObject);
begin
Panel1.Color:= clgreen;
end;

موفق باشید

mbshareat
چهارشنبه 20 مهر 1390, 22:04 عصر
سلام و تشکر از همه سروران گرامی
من برنامه خودم و برنامه mspaint ویندوز رو باهم باز کردم و تو برنامه Paint کلیک کردم ولی برنامه متوجه نشد!
جناب daneshmand1354 من با برنامه می تونم دریافت فوکوس رو بفهمم ولی از دست دادنش رو متوجه نمی شم!
جناب yousijoon روش شما کمکی نکرد!
جناب MohsenB متوجه کد شما نشدم تو برنامم هم گذاشتم کار نکرد.اگه درست متوجه شده باشم منظورتون استفاده از کامپوننت ApplicationEvents
هستش که من تو نسخه دلفی خودم (6) تو نوار ابزار استاندارد پیدا نکردم!

MohsenB
پنج شنبه 21 مهر 1390, 02:04 صبح
سلام و تشکر از همه سروران گرامی
جناب MohsenB متوجه کد شما نشدم تو برنامم هم گذاشتم کار نکرد.اگه درست متوجه شده باشم منظورتون استفاده از کامپوننت ApplicationEvents
هستش که من تو نسخه دلفی خودم (6) تو نوار ابزار استاندارد پیدا نکردم!

ممنون

بله خودشه . این کامپوننت در نسخه 7 در سربرگ Additional قرار دارد . آیکون اون یک دایره آبی رنگ هست که سه عدد فلش از اون بیرون اومده .

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


موفق و پیروز باشید .

Felony
پنج شنبه 21 مهر 1390, 06:30 صبح
میتونید Message Handler فرم برنامه رو به صورت زیر Override کنید :

procedure WNDProc(var MSG: TMessage); Override;


procedure TForm1.WNDProc(var MSG: TMessage);
begin
if MSG.Msg = WM_KILLFOCUS then
ShowMessage(Focus Killed');
inherited;
end;

mbshareat
پنج شنبه 21 مهر 1390, 19:16 عصر
سلام و عرض ادب
از همه بزرگواران تشکر می کنم.
آقا ApplicationEvents در نوار ابزار Additional هم نبود!
جناب آقای تاجیک با کمال تعجب روش شما هم جواب نداد!
اگر یک فرم خالی داشته باشیم پیغام به نمایش در می آید ولی وقتی یک ListBox داشته باشیم و یکی از عناصرش رنگی باشد با کلیک در برنامه Paint از پیغام خبری نیست!
آیا راه دیگری سراغ دارید؟

MohsenB
پنج شنبه 21 مهر 1390, 20:24 عصر
سلام

براتون سورس Application Events رو از دلفی 7 گذاشتم . ببینید میتونید اونو نصبش کنید و یا حداقل از روشش استفاده کنید .


موفق باشید

mbshareat
پنج شنبه 21 مهر 1390, 21:51 عصر
سلام خدمت دوستان
جناب MohsenB وقتی داشتم فایلی که گذاشتین رو در شاخه F:\Program Files\Borland\Delphi6\Source\Vcl می گذاشتم متوجه شدم قبلا فایلی با چنین نامی داشتم!
ببخشید من توضیحاتتون رو در مورد شکل آیکن این کامپوننت درست نخوندم و Action رو هم با Application در نام کامپوننتها قاطی کرده بودم.
در هر صورت ممنونم که نسخه جدیدتر رو برام گذاشتین.
فرمایشتون رو امتحان کردم جواب داد.از لطفتون ممنونم.امیدوارم در پناه خدا و امام زمان (عج) موفق و مؤید باشید.