الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

بعض الحيل الخاصة بقائمة ابدا

مغلق
بدأه romanof في 4 فبراير 2005 · 4 رد · 1,115 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بعض الحيل الخاصة بقائمة ابدا

محاكاة للضغط على لوحة المفاتيح.doc

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#2

السلام عليكم شكرا لك يا اخي الكريم romanof

ولكن نريد أيضا شرح لإستخدام مفاتيح اللوحة

يعني لو ضغطت F1 ينفذ كود معين

أو لو ضغطت على Left arrow ينفذ كود معين

أو ضغطت حرف معين ينفذ كود

ياريت حدا يشرح لنا هذه الفكرة لأني محتاجها لتسهيل اختصارات في برنامجي

وشكرا لكم

واتمنى التوفيق للجميع

#3

شكرا لكم لقد وجدت الأكواد الخاصة ب keydown

VK_BAK

VK_TAB

VK_CLEAR

VK_RETURN

VK_SHIFT

VK_CONTROL

VK_MENU

VK_PAUSE

VK_CAPITAL

VK_ESCAPE

VK_PRIOR

VK_NEXT

VK_END

VK_HOME

VK_LEFT

VK_UP

VK_RIGHT

VK_DOWN

VK_SELECT

VK_SNAPSHOT

VK_INSERT

VK_DELETE

VK_HELP

VK_F1

VK_F2

VK_F3

VK_F4

VK_F5

VK_F6

VK_F7

VK_F8

VK_F9

VK_F10

VK_F11

VK_F12

VK_F13

VK_F14

VK_F15

VK_F16

VK_NUMLOCK

VK_SCROLL

VK_WIN

VK_APPS

#4

romanof:حيل جميلة و رائعة ... :D

aymansoft:تعمل ويندوز في كل

تفاصبلها على نظام الأحداث و الإستجابة لكل حدث على حدة, فهذا النظام هو القلب النابض لويندوز.

ومن أهم الأحداث و أكثرها في التطبيقات :

  • 1-OnkeyPress: .
    procedure OnKeyPress(Sender: TObject; var Key: Char);
    قام المستخدم بالضغط على مفتاح من لوحة المفاتيح.من بارامتراتها:Key و هي من نوع Char تحتوي على كود المفتاح الذي قام بالحدث.
    كل المفاتيح يمكنها إطلاق هذا الحدث ماعدا مفاتيح الدوال F1..F12 ,ومفاتيح التركيب Shift,alt,ctrl.فلو ضغط المستخدم على Shift+q فسوف تحصل في الباراميتر Key على الكود Ascii و هو Q= $51
  • 2-OnkeyDown:
    procedure OnKeyDown(Sender: TObject; var Key: Word;
    Shift: TShiftState);
    قام المستخدم بالضغط على مفتاح من لوحة المفاتيح و حالة المفتاح هي مفتاح مضغوط.ينطلق هذا الحدث عند الضغط مباشرة على مفتاح من اللوحة.و ما يميزها عن الحدث السابق هي أن الباراميتر Key من نوع DWord يسترجع كود المفتاح أثناء ضغطه سواء من المفاتيح الرقمية أو المفاتيح الهجائية وكذلك فاتيح الدوال .لمعرفة الباراميتر المرجع في Key يجب مقارنته مع VirtualKey Codes.
    ويرجع في الباراميتر الثاني وهو الأهم كل مفاتيح التركيب :LeftShift,RightShift,alt,ctrl...,LeftButtonMouse,MidleButtonMouse,RightButtonMouse.
  • 3-OnkeyUp:
    procedure OnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    قام المستخدم بالضغط على مفتاح من لوحة المفاتيح و حالة المفتاح هي الإنتقال من مضغوط إلى مفلت.
    كل ما يل في حدث OnKeyDown ينطبق كذلك على هذا الحدث.
  • 4-OnMouseDown:
    procedure OnMouseDown(Sender: TObject; Button: TMouseButton;
    Shift: TShiftState; X, Y: Integer);
    Button= الزر الذي نقرت عليه من الأزرار الثلاث للفأرة.
    Shift= أزرار التركيب LeftShift,RightShift alt,Leftctrl..
    X,y= إحداثياث البيكسل Pixel الذي نقرت فوقه بالفأرة, وهي إحداثياث نسبية ترحع إلى Control=Sender الذي أطلق الحدث.
  • 5....
    كل حدث مما تبقا لديه تقريبا باراميترات كالتي ذكرناهاو إسم الحدث دائما يدل على نوعه و كيف ينطلق.

VirtualKey: تقوم ويندوز بإعطاء شيفرة أو رقم للوحة مفاتيح إفتراضية. حيث أن المبرمج لا يولي انتباها هل لوحة المفاتيح لوحة Querty أو لوحة Azerty , أو غيرها من العديد من لوحات المفاتيح المنتشرة حسب اللغات.

و هي تضم بالإضافة إلى كل المفاتيح الرقمية أو مفاتيح الدوال أو مفاتيح ألف-رقمية, مجموعة من المقاتيح التحكم و التركيب ك:

Left Shift, Right Shift, Alt,Right Windows key,SCROLL LOCK key, Left Button Mouse,.....

إرجع ألى المساعد Help في ديلفي و ابحث عن VirtualKey Code لتتعرف عليها و على القيم التي تحملها.

بالنسبة للحروف الهجائية فلها نفس كود Ascii.

VK_0 thru VK_9 are the same as ASCII '0' thru '9' ($30 - $39).

VK_A thru VK_Z are the same as ASCII 'A' thru 'Z' ($41 - $5A)

مفاتيح التركيب:و هي المجموعة TShiftState تجد فيها كل المفاتيح التي تسمى ايضا مفاتيح النحكمو هي:

ssShift: The Shift key is held down.

ssAlt: The Alt key is held down.

ssCtrl: The Ctrl key is held down.

ssLeft: The left mouse button is held down.

ssRight: The right mouse button is held down.

ssMiddle: The middle mouse button is held down.

ssDouble: The mouse was double-clicked

مفاتيح الفأرة: و هي ثلاثة مجموعة في TMouseButton:

mbLeft, mbRight, mbMiddle.

الملف المرفق فيه مثال جيد كتطبيق للحدث OnKeyDown.

(h)

keyevents.zip

سأتغيب عن المنتدى وستكون لي زيارات خفيفة بين الحين و الحين

يا صاحب الهم إن الهم منفرج.....................أبشر بخير فإن الفارج الله.

اليأس يقطع أحيانا بصاحبه..........................لا تيأس فإن الكافي الله.

الله يحدث بعد العسر ميسرة.........................لا تفزعن فإن الصانع الله.

إذا بليت فثق بالله وارض به...................فإن الذي يكشف البلوى هو الله.

و الله ما لك غير الله من أحد.......................فحسبك الله في كل لك الله

أخوكم مراد

27_06_06_05_21_41_1151410901logo_adl_wal_ihsan.jpg

#5

هذه هي المشاركه الأولى الموجودة بالملف المرفق من romanof للإستفادة

محااكاة للضغط على لوحة المفاتيح

procedure PostKeyEx32(key: Word; const shift: TShiftState; specialkey: Boolean);
 {************************************************************ 
* Procedure PostKeyEx32 
* 
* Parameters: 
*  key    : virtual keycode of the key to send. For printable 
*           keys this is simply the ANSI code (Ord(character)). 
*  shift  : state of the modifier keys. This is a set, so you 
*           can set several of these keys (shift, control, alt, 
*           mouse buttons) in tandem. The TShiftState type is 
*           declared in the Classes Unit. 
*  specialkey: normally this should be False. Set it to True to 
*           specify a key on the numeric keypad, for example. 
* Description: 
*  Uses keybd_event to manufacture a series of key events matching 
*  the passed parameters. The events go to the control with focus. 
*  Note that for characters key is always the upper-case version of 
*  the character. Sending without any modifier keys will result in 
*  a lower-case character, sending it with [ssShift] will result 
*  in an upper-case character! 
// Code by P. Below 
************************************************************}
 type
   TShiftKeyInfo = record
     shift: Byte;
     vkey: Byte;
   end;
   byteset = set of 0..7;
 const
   shiftkeys: array [1..3] of TShiftKeyInfo =
     ((shift: Ord(ssCtrl); vkey: VK_CONTROL),
     (shift: Ord(ssShift); vkey: VK_SHIFT),
     (shift: Ord(ssAlt); vkey: VK_MENU));
 var
   flag: DWORD;
   bShift: ByteSet absolute shift;
   i: Integer;
 begin
   for i := 1 to 3 do
   begin
     if shiftkeys.shift in bShift then
       keybd_event(shiftkeys.vkey, MapVirtualKey(shiftkeys.vkey, 0), 0, 0);
   end; { For }
   if specialkey then
     flag := KEYEVENTF_EXTENDEDKEY
   else
     flag := 0;

   keybd_event(key, MapvirtualKey(key, 0), flag, 0);
   flag := flag or KEYEVENTF_KEYUP;
   keybd_event(key, MapvirtualKey(key, 0), flag, 0);

   for i := 3 downto 1 do
   begin
     if shiftkeys.shift in bShift then
       keybd_event(shiftkeys.vkey, MapVirtualKey(shiftkeys.vkey, 0),
         KEYEVENTF_KEYUP, 0);
   end; { For }
 end; { PostKeyEx32 }


 // Example: 

procedure TForm1.Button2Click(Sender: TObject);
 begin
   //Pressing the Left Windows Key 
  PostKeyEx32(VK_LWIN, [], False);

   //Pressing the letter D 
  PostKeyEx32(Ord('D'), [], False);

   //Pressing Ctrl-Alt-C 
  PostKeyEx32(Ord('C'), [ssctrl, ssAlt], False);
 end;

دالتين لايقاف الادخال من لوحة المفاتيح والماوس ماعدا

(CTRL+ALT+DEL)

/**********************************************************************/

procedure BlockInput; external 'user32.dll';
procedure Block;
asm
  push 1
  call BlockInput
end;

procedure UnBlock;
asm
  push 0
  call BlockInput
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
   Block;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  unBlock;
end;

/**********************************************************************/

اضافة مستند الى المستندات في قائمة ابدا

uses
  ShlOBJ;
...

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
begin
  s := 'E:Delphi.RTF'; //اسم الملف و مكانه
  SHAddToRecentDocs(SHARD_PATH, pChar(s));
end;

تغيير حجم و مكان زر قائمة ابدا

MoveWindow(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil),
                 300,0 , 80,22 , true);
//              //0, 0, 100, 35, true);المقاييس الطبيعية تقريبا

دالة لاظهار إخفاء الزر ابدا

var  visi :Boolean;

procedure TForm1.Button1Click(Sender: TObject);
var
  Tray, Child : hWnd;
  C : array[0..127] of Char;
  S : string;
begin
  Tray := FindWindow('Shell_TrayWnd', nil);
  Child := GetWindow(Tray, GW_CHILD);
  while Child <> 0 do
  begin
    if GetClassName(Child, C, SizeOf(C)) > 0 then
    begin
      S := StrPAS(C);
      if UpperCase(S) = 'BUTTON' then
      begin
        if Visi then
          ShowWindow(Child, 1)
        else
          ShowWindow(Child, 0);
      end;
    end;
    Child := GetWindow(Child, GW_HWNDNEXT);
  end;
visi:=not visi;
end;

انشاء مجلد في قائمة ابدا في البرامج

Uses
   ShlObj, ActiveX;

 procedure FreePidl(pidl: PItemIDList);
 var
   allocator: IMalloc;
 begin
   if Succeeded(SHGetMalloc(allocator)) then
   begin
     allocator.Free(pidl);
     {$IFDEF VER100}
     allocator.Release;
     {$ENDIF}
   end;
 end;

 function CreateFolder(aFolderName: string; aLocation: Integer): Boolean;
 var
   pIdl: PItemIDList;
   hPath: PChar;
 begin
   Result := False;
   if SUCCEEDED(SHGetSpecialFolderLocation(0, aLocation, pidl)) then
   begin
     hPath := StrAlloc(MAX_PATH);
     SHGetPathFromIDList(pIdl, hPath);
     SetLastError(0);
     CreateDirectory(PChar(hPath + '\\' + aFolderName), nil);
     if (GetLastError = 0) or (GetLastError = ERROR_ALREADY_EXISTS) then
       Result := True;
     FreePIDL(pIdl);
     StrDispose(hPath);
   end;
 end;


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   CreateFolder('MyProgramgroup', CSIDL_PROGRAMS);
 end;

تغيير خلفية سطح المكتب

uses Registry, WinProcs;

procedure SetWallpaper(sWallpaperBMPPath: string; bTile: boolean);
var

  reg: TRegIniFile;
begin
  //     Изменяем ключи реестра
  //     HKEY_CURRENT_USER
  //     Control Panel\Desktop
  //     TileWallpaper (REG_SZ)
  //     Wallpaper (REG_SZ)

  reg := TRegIniFile.Create('Control Panel\Desktop');
  with reg do
  begin
    WriteString('', 'Wallpaper',
      sWallpaperBMPPath);
    if (bTile) then
    begin
      WriteString('', 'TileWallpaper', '1');
    end
    else
    begin
      WriteString('', 'TileWallpaper', '0');
    end;
  end;
  reg.Free;
  // Оповещаем всех о том, что мы изменили системные настройки
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, nil,

    {Эта строка - продолжение предыдущей} SPIF_SENDWININICHANGE);
end;



procedure TForm1.Button1Click(Sender: TObject);

begin

SetWallpaper('c:\winnt\winnt.bmp', False);

end;

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…