View Full Version : سوال: نوشتن در برنامه ای که چندین ادیت داره
Mask
پنج شنبه 30 دی 1389, 15:32 عصر
با سلام
میخام توسط برنامه خودم . در برنامه دیگه ای بنویسم.
مشگل چیه؟
برنامه ای که میخام درش بنویسم چندین ادیت داره و من میخام هرکدوم که کاربر الان در حال نوشتن در اون هست رو ادیت کنم.
ممنون.
مهران رسا
جمعه 01 بهمن 1389, 13:02 عصر
اینجا :
http://barnamenevis.org/showthread.php?254803-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-Y!-AutoAnswer-%D8%B3%D9%88%D8%B1%D8%B3-%DA%A9%D8%AF (http://barnamenevis.org/showthread.php?254803-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-Y%21-AutoAnswer-%D8%B3%D9%88%D8%B1%D8%B3-%DA%A9%D8%AF)
یه سری بزن !
Mask
یک شنبه 03 بهمن 1389, 11:45 صبح
ممنون.دوست عزیز . اما در این برنامه چون فقط یک ادیت هست. شما به هموت ادیت مقدار میدید.
مشکل تشخیص نام کنترل اکتیوه.
Mask
شنبه 09 بهمن 1389, 13:35 عصر
دوستان نظری ندارند؟
Felony
شنبه 09 بهمن 1389, 15:57 عصر
دوستان نظری ندارند؟
بلاخره شد :
function GetFocused: THandle;
var
ActiveWHandle: THandle;
FThreadID : DWORD;
begin
ActiveWHandle := GetForegroundWindow;
FThreadID := GetWindowThreadProcessID(ActiveWHandle, nil) ;
if AttachThreadInput(GetCurrentThreadID, FThreadID, True) then
try
Result := GetFocus;
finally
AttachThreadInput(GetCurrentThreadID, FThreadID, False) ;
end;
end;
تابعی که نوشتم هندل کنترل فعال در سطح سیستم عامل رو برمیگردونه .
Mask
شنبه 09 بهمن 1389, 16:25 عصر
ممنون.حالا تستش میکنم.
منظورت از بلاخره شد: چیه؟
منظورت از در سطح سیستم عامل چیه؟
Felony
شنبه 09 بهمن 1389, 17:21 عصر
منظورت از بلاخره شد: چیه؟
منظور اینکه 20 دقیقه ای باهاش ور رفتم تا درست شد .
منظورت از در سطح سیستم عامل چیه؟
این که واضحه !
یعنی داخل هر جایی که باشی هندل کنترل فعال رو بهت میده !
Mask
شنبه 09 بهمن 1389, 17:33 عصر
ممنون حاجی.
برنامه درست کار میکنه.
اما مشکل اینجاست که دبل کلیک از کار میوفته؟
نمونه زیر رو ببینید.
فایل project2 یه نمونه برنامه با چندتا ادیته.
Felony
شنبه 09 بهمن 1389, 19:08 عصر
ممنون حاجی.
برنامه درست کار میکنه.
اما مشکل اینجاست که دبل کلیک از کار میوفته؟
نمونه زیر رو ببینید.
فایل project2 یه نمونه برنامه با چندتا ادیته.
تو MSDN ذکر شده که پارامترهای تابع AttachThreadInput نباید جزء System Thread ها باشه ، اون مشکلی که شما گفتی فقط برای میز کار پیش میاد چون System Thread هست ، پس باید بررسی کنید اگر کنترل جاری میزکار بود روند Input Processing رو به Thread برنامه خودمون الحاق نکنه :
function GetFocused: THandle;
var
ThreadID, DesktopID: DWORD;
begin
DesktopID:= GetWindowThreadProcessID(GetDesktopWindow, nil);
ThreadID := GetWindowThreadProcessID(GetForegroundWindow, nil);
if (AttachThreadInput(GetCurrentThreadID, ThreadID, True)) and (ThreadID <> DesktopID) then
try
Result := GetFocus;
finally
AttachThreadInput(GetCurrentThreadID, ThreadID, False);
end;
end;
Mask
شنبه 09 بهمن 1389, 23:55 عصر
حاجی ممنون.
واقعا وقت گزاشتی و زحمت کشیدی.
اما بازم همون مشکل هست.
هم در داخل windows explorer و هم روی دسکتاپ ، دبل کلیک از کار میوفته.
لطفا کد جدید رو در برنامه ای که به عنوان نمونه گزاشتم قرار بدهید . تا نتیجه رو دقیقا ببینید.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.