__سرزمين دلفي__ 

خانه
آرشيو

پست الكترونيك


سعید ابریشمی


نویسندگان
سعید ابریشمی
 

آرشیو من
اسفند ۸٢
تیر ۸٢
اسفند ۸۱
 

لینک دوستان
  اخبار وبلاگ ها
ليست وبلاگ ها
قالب وبلاگ
دوست یابی


آمار وبلاگ :

  RSS 2.0  

temp-designer

 

 

چهارشنبه ۱٤ اسفند ،۱۳۸۱

راهزني در ويندوز!

 << FindWindow >>

تا حالا سعي كردم هر چي كه مي گم از Win32 API باشه تا مختص دلفي نباشه. اينبار هم اينكار رو ادامه مي دم. دستور FindWindow از جمله دستوراتي است كه بوسيله ي آن مي توان يك پنجره ي ويندوز را توسط عنوان (Caption) آن شناسايي كرد.
شكل كلي آن بصورت زير است:


FindWindow : HWND
LPCTSTR lpClassName ,{ pointer to class name}
LPCTSTR lpWindowName {pointer to window name}


بعنوان مثال دستور زير, هندل صفحه ي اكولايزر WinAmp را بر مي گرداند. (اگر برنامه ي فوق در حال اجرا باشد):


FindWindow('Winamp EQ','Winamp Equalizer');



هندل(Handle): يك عدد طبيعي (Cardinal) است كه ويندوز به هر برنامه, اجزاهاي برنامه و ... اختصاص مي دهد. در واقع مي توان گفت شماره سريال هر شيئي است كه در ويندوز در حال اجرا است.
با استفاده از اين قابليت مي توان دستورهايي اجرا كرد كه با گرفتن هندل, مي توانند موقعيت يك شيئ, عنوان و .... را بدست آورند يا تغيير دهند.
مثل نمايش password مربوط به dialup Networking كه حالا ديگه همه بلدن!
**************
مي بخشين كه يكم دير به دير update مي كنم. اما خوب دوست دارم يه چيزي بنويسم كه به درد بخوره. (شايد هم نخوره!)

تا درودي ديگر, بدرود.

سعید ابریشمی

پيام هاي ديگران ()




جمعه ٩ اسفند ،۱۳۸۱

چگونه از روشن بودن Capslock مطلع شويم؟

 چگونه از روشن بودن Capslock مطلع شويم؟

در برنامه هاي مختلف پردازش كلمه, هرگاه يكي از كليدهاي Capslock يا Insert زده مي شود, معمولاً وضعيت اين كليدها نشان داده ميشود. يعني (Capslock(on/off و Insert/Overwrite مشخص ميشوند. براي اين منظور تابع GetKeyState وجود دارد. (مربوط به خود دلفي نيست. مال WinAPI است. يعني منحصر به دلفي نيست. در C و VB هم مي توان استفاده كرد.) اين تابع با گرفتن كدِ اسكي (ASCII) كليد مربوطه در صفحه كليد, روشن خاموشي آن را نشان خواهد داد. براي كليدهاي معمولي نيز بالا يا پائين بودن را برمي گرداند.
براي Capslock:
مقدار برگشتي اين تابع روشن يا خاموش بودن چراغ CapsLock روي صفحه كليد است:
روشن و خاموشي با بيت كم ارزشترين تعيين مي شود. فشردن كليد و رها كردن با پر ارزش ترين بيت :
00000001 در مبناي دو: حروف بزرگ روشن است و كليد رها شده است.(مبناي ده: 1)
10000001 در مبناي دو: حروف بزرگ روشن است و كليد هنوز رها نشده است.(مبناي ده: 127)
00000000 در مبناي دو: حروف بزرگ روشن نيست و كليد رها شده است.(مبناي ده: 0)
10000000 در مبناي دو: حروف بزرگ روشن نيست و كليد هنوز رها شده است.(مبناي ده: 128)

اگر بخواهيم فقط روشن و خاموشي را چك كنيم, بايد با «1» عمل منطقي AND را انجام دهيم.
بعنوان مثال كارهاي زير را انجام دهيد:(بعد از ايجاد برنامه)
چهار Label روي فرم قرار دهيد. مقدار Name براي هر Label را به چهار نام زير تغيير دهيد:
CapsLockLabel و NumLockLabel و ScrollLockLabel و InsLabel
حال بر روي قسمت خالي فرم كليك كرده و مقدار Keypreview را True كنيد. (با اين كار اجازه مي دهيم كه اگر بر روي هر كدام از اجزاي فرم, كليدي فشار داده شده باشد, رويدادِ OnKeyPress را اجرا كند.)

حال بر روي Object Inspector صفحه ي Events را انتخاب كنيد. بر روي اين صفحه جلوي OnKeyPress دابل كليك كنيد.
در صفحه اي باز شده عبارات زير را تايپ كنيد:(يا از همين جا كپي كنيد!)

CapsLockLabel.Enabled:=GetKeyState(VK_CAPITAL) and 1 = 1;
NumLockLabel.Enabled:=GetKeyState(VK_NUMLOCK) and 1 = 1;
ScrollLockLabel.Enabled :=GetKeyState(VK_SCROLL) and 1 = 1;
InsLabel.Enabled:=GetKeyState(VK_INSERT) and 1 = 1;


حالا غذاي شما آماده ست! مي تونين اونو توي فر بذارين (compile كنين) بعد از اين پختين ش, حالا مي تونين اونو بخورين! (اجرا كنين)
اميدوارم كه از غذاي امروز كمال استفاده رو ببرين و پدر كاربر بيپاره رو در نيارين. يك بار ديگه مواد لازم رو خدمتتون مي گم, يادداشت كنين:
- Windows API يك قواره! Linux نمي شه, اصرار نكنين! شايد Lindows بشه.
- Delphi 7 يك وجب! (هفت رو واسه كلاس گذاشتن نوشتم. حتي دلفي 3 هم مي شه)
- Ram,hard,... به مقدار لازم.
خوب! كدبانوهاي عزيز! تا برنامه ي بعد, شما رو به خدا مي سپرم.

سعید ابریشمی

پيام هاي ديگران ()




سه‌شنبه ٦ اسفند ،۱۳۸۱

پنجرهايي به شكل دلخواه

 اگه از دست پنجره (window) هاي مستطيلي خسته شدين(مثل من!) مي تونين روال زير رو پيش بگيرين:

پس از ايجاد برنامه, يك جزء تصوير (TImage) روي فرم قرار دهيد.
فرم را جفت كليك كنيد تا روتين مربوط به FormCreat باز بشه. پروسيجر زير را «قبل» از FormCreat بنويسيد:

procedure TForm1.WMNCHitTest(var Message : TWMNCHitTest);
begin
inherited;
if Message.Result = htClient then Message.Result := htCaption;
end;


روتين مربوط به FormCreat را بصورت زير تغيير دهيد:



procedure TForm1.FormCreate(Sender: TObject);
var TransparentColor : TColor;
X,Y, dX, dY : integer;
Points : array[0..10000] of TPoint;
Vertex : array[0..5000] of Integer;
CountVertex : integer;
BeginPoligon : Boolean;
P : TPoint;
Region : HRGN;
Incr : Integer;
begin
L:=50;
TForm(Sender).BorderStyle := bsNone;
dY := Height - ClientHeight;
CountVertex := -1;
Incr := 1;
with Image1,Canvas do begin
dX := Left;
inc(dY,Top);
TransparentColor := Pixels[0,0];
Y := 0;
while Y < Height do begin
X := 0;
BeginPoligon := False;
while X < Width do begin
if (not BeginPoligon) and (Pixels[X,Y] <> TransparentColor) then begin
BeginPoligon := True;
P := Point(X + dX,Y + dY);
end;
if BeginPoligon and (Pixels[X,Y] = TransparentColor) then begin
BeginPoligon := False;
inc(CountVertex);
Vertex[CountVertex] := 4;
Points[CountVertex * 4] := P;
Points[CountVertex * 4 + 1] := Point(X + dX, Y + dY);
Points[CountVertex * 4 + 2] := Point(X + dX, Y + Incr + dY);
Points[CountVertex * 4 + 3] := Point(P.X, P.Y + Incr);
end;
inc(X,Incr);
end;
inc(Y,Incr);
end;
end;
Region := CreatePolyPolygonRgn(Points, Vertex, CountVertex, WINDING);
SetWindowRgn(TForm(Sender).Handle, Region, True);
end;



والسلام! كار تمومه. حالا يه تصوير (من باشم سياه و سفيد مي ذارم) در Image1 بار كنيد. توجه داشته باشيد كه پيكسل بالا سمت چپ هر رنگي داشته باشد, بعنوان رنگ زمينه انتخاب شده و شفاف خواهد شد (Transprant) يعني اگه همه ي تصويرتون مثلاً آبي باشه اما پيكسل اون گوشه زرد باشد, رنگ زرد ها بعنوان زمينه محسوب خواهند شد.
تصوير باز شده بايد bitmap باشد تا قابل پردازش باشد.
مثلا مي تونين از paint مال ويندوز استفاده كنين. يعني برين يه بيضي (توپر- توخالي- غير منظم-منظم و...) اونجا بكشين و save كنين. بياين تو Image1 باز كنين. حالا اگه برنامه رو اجرا كنين يه پنجره ي بيضي شكل دارين!
تبريك مي گم! از دست اين پنجره هاي مزخرف خلاص شدين. اونم فقط بدست دستور زير:

SetWindowRgn(TForm(Sender).Handle, Region, True);



اگر پيشنهادي دارين, خوشحال مي شم اگه مطلع بشم.

سعید ابریشمی

پيام هاي ديگران ()




دوشنبه ٥ اسفند ،۱۳۸۱

سلام!

 سلام!
منظر باشید.



درسته حرفه اي نيستم اما هرچي از دستم بر بياد كوتاهي نمي كنم. اميدوارم شما هم كمك كنيد.
سعي مي كنم در مورد دلفي و نرم افزارهاي مرتبط با اون اطلاعاتي ارائه بدم.


اميدوارم به دردتون بخوره.
با تشكر

سعید ابریشمی

پيام هاي ديگران ()




 

 

[ خانه| آرشيو | پست الكترونيك ]