PDA

View Full Version : سوال: خصوصیت WS_EX_NOACTIVATE



Mask
پنج شنبه 23 دی 1389, 20:32 عصر
میشه با اضافه کردن خصوصیت WS_EX_NOACTIVATE به Style فرم اصلی برنامه از تغییر Focus صفحه کلید در هنگام فشردن کلیدها در برنامه جلوگیری کرد
این دستور رو در یکی از پستهای جناب کشاورز خوندم.
چطوری باید پیاده سازیش کرد؟

vcldeveloper
جمعه 24 دی 1389, 00:49 صبح
const
WS_EX_NOACTIVATE = $08000000;

Mask
جمعه 24 دی 1389, 11:57 صبح
ممنون از جوابتون.
این مقدار ثابت رو تعریف کردم. حالا چطوری ازش استفاده کنم؟
و در ضمن بی زحمت کد زیر رو ببینید و اگه محبت کنید و بگید خط به خط که چیکار می کنه؟
ممنونم.

var
Style : Integer;
begin
Style:=GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,(Styl e or WS_EX_TOOLWINDOW)and NOT WS_EX_APPWINDOW);

vcldeveloper
جمعه 24 دی 1389, 13:00 عصر
این مقدار ثابت رو تعریف کردم. حالا چطوری ازش استفاده کنم؟
مثل همون کدی که گذاشتید، باید در SetWindowLong، مقدارش را با Style مربوطه OR کنید.


کد زیر رو ببینید و اگه محبت کنید و بگید خط به خط که چیکار می کنه؟
Style یک پنجره خاص رو تغییر میده. تغییرش هم به این صورت هست که خصوصیت APPWINDOW را از Style پنجره حذف میکنه، و TOOLWINDOW را به Style اضافه میکنه. با این کار، پنجره از حالت عادی تبدیل میشه به یک Tool Window.

Mask
شنبه 25 دی 1389, 11:41 صبح
ممنون
کد زیر رو نوشتم اما بازم وقتی رو باتن کلیک مبکنم برنامم اکتیو میشه.
چه تغییری باید در کدم بدم؟

var
Style : Integer;
begin
Style:=GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle,GWL_EXSTYLE,(Styl e or WS_EX_NOACTIVATE)and NOT WS_EX_APPWINDOW);

Felony
شنبه 25 دی 1389, 12:55 عصر
var
Style : Integer;
begin
Style:=GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Handle, GWL_EXSTYLE, (Style or WS_EX_NOACTIVATE)and NOT WS_EX_APPWINDOW);
end;

Felony
یک شنبه 26 دی 1389, 16:13 عصر
و در ضمن بی زحمت کد زیر رو ببینید و اگه محبت کنید و بگید خط به خط که چیکار می کنه؟



Style:=GetWindowLong(Handle, GWL_EXSTYLE);
تابع GetWindoLong اطلاعاتی در مورد پنجره مورد نظر بهتون میده ، وقتی پارامتر دوم رو با GWL_EXSTYLE مقدار دهی میکنید اطلاعات Extended Window رو بر میگردونه ؛ این اطلاعات در زمان ساخته شدن پنجره بهش داده شدن ( تابع CreateWindowEX ) .



SetWindowLong(Application.Handle,GWL_EXSTYLE,(Styl e or WS_EX_TOOLWINDOW)and NOT WS_EX_APPWINDOW);
این رو هم که آقای کشاورز توضیح دادند ، تابع SetWindowLong خصوصیات یک پنجره رو تغییر میده ، تو کد بالا با پاس دادن GWL_EXSTYLE به عنوان پارامتر دوم به تابع گفتید که قصد تغییر در ساختار Extended Window Style پنجره رو دارید و به مقدار متغییر Style که حاوی مشخصات همون پنجره هست ، EX_TOOLWINDOW رو اضافه کردید و خاصیت WS_EX_APPWINDOW رو ازش حذف کردید .