مجموعه نكات دلفي - قسمت اول

CenoByte

Member
سلام دوستان خسته نباشيد .ازاين هفته روزي يك نكته دلفي ميخواهم براتون بنويسم...
و در هر قسمت 50 نكته خواهيم د اشت :

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

نکته شماره : 1
انتخاب فرمی که سطح آن بطور کامل از کامپوننت ها پوشیده شده باشد
به سادگی فرم را با گرفتن کلید Shift کلیک کنید .(Shift + Click )

نکته شماره : 2
جابجایی کامپوننت ها به اندازه یک پیکسل بدون ماوس
پس از انتخاب کامپوننت میتوان با استفاده از کلید Ctrl و کلید های حرکتی این کار را انجام داد.


نکته شماره : 3
تغییر اندازه کامپوننت ها به اندازه یک پیکسل بدون ماوس
پس از انتخاب کامپوننت میتوان با استفاده از کلید Shift و کلید های حرکتی این کار را انجام داد.
 

CenoByte

Member
نکته شماره 4:
اضافه کردن گزینه های اضافی به منوی سیستم:

کد:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure OnMessageHandler(var Msg: TMsg; var Handled: Boolean);

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
  SC_MyMenuItem1 = WM_USER + $101;
  SC_MyMenuItem2 = WM_USER + $102;


procedure TForm1.FormCreate(Sender: TObject);

                     var
  hSysMenu: THandle;
begin
  // Get Systemmenu Handle
  hSysMenu := GetSystemMenu(Application.Handle, False);
  // Add own menu items

  AppendMenu(hSysMenu, MF_SEPARATOR, 0, #0);
  AppendMenu(hSysMenu, MF_STRING, SC_MyMenuItem1, '& 1 گزينه');
  AppendMenu(hSysMenu, MF_STRING or MF_CHECKED , SC_MyMenuItem2, '&گزينه 2');
  // Assign a own OnMessage event handler
   Application.OnMessage := OnMessageHandler;

end;
     procedure TForm1.OnMessageHandler;
begin
  if Msg.message = WM_SYSCOMMAND then
  begin
    case Msg.wParam of
      // Which item selected?

      SC_MyMenuItem1:
        begin
          ShowMessage('گزينه 1');
          Handled := True;
        end;
      SC_MyMenuItem2:
        begin
          ShowMessage('گزينه 2');
          Handled := True;
        end;
    end;
  end;
    end;
end.

اينم تصويري از بكار گيري اين نكته...
menu.JPG
 

CenoByte

Member
نكته شماره 5 :
عوض كردن كليد TAB و Enter
يكي از ويژگي برنامه هاي تحت ويندوز راحتي كار با صفحه كليد ميباشد.
برنامه هايي كه در آنها فيلدهاي بسياري بايد توسط كاربر پر شود بهتر است براي پيمايش بين كامپوننت ها از كليد Enter بجاي Tab استفاده شود ...( مثل برنامه هاي تحت داس فاكس پرو :lol: )
کد:
// Up in your Public declarations in your Main form
procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);

// and then inside your main form's create event, 
// add this line so that all messages
// get sent through your own message handler
Application.OnMessage := Self.MsgHandler;

// then create create this procedure in your main form 
// so that if the windows message is 
// a keydown and it is a RETURN key and the focused 
// control is a DBEdit control (add whatever
// other controls here so that you can control how 
// the ENTER key is handled depending on 
// the type of focused control).  You may also want 
// to add a global variable that enables you
// to turn on/off the "ENTER = TAB" functionality.  
// Some people LIKE the true Windows interface, 
// while others (usually people coming from the DOS 
// world, LIKE the ENTER key :).
procedure TfrmMain.MsgHandler(var Msg: TMsg; var Handled: Boolean);
var
    ActiveControl: TWinControl;
begin
if (Msg.message = WM_KEYDOWN) AND (Msg.wParam = VK_RETURN) then
   begin
     ActiveControl := Screen.ActiveControl;
     // if the active control inherits from TDBEdit, 
     // then change the key to a TAB. Obviously, if you want
     // the ENTER key to be intercepted while in another 
     // component, just add that component to this IF statement.
     if ActiveControl.InheritsFrom(TDBEdit) then
           Msg.wParam := VK_TAB;

   end;
end;
 

CenoByte

Member
نكته شماره 6 :
چگونه مي شود در شروع يك برنامه صفحه كليد را فارسي كرد؟
ميخواهم در ابتپاي اجراي برنامه كليد هاي شيفت + آلت رو شيبه سازي كنیم تا صفحه كليد را فارسي كنیم.
اگر از ويندوزهاي NT Based استفاده ميكنيد و فارسي تان نصب شده است از اين دستور استفاده كنيد.
کد:
LoadKeyboardLayout('00000429',0); //set to Farsi 
LoadKeyboardLayout('00000409',0); //set to English 
LoadKeyboardLayout('00000401',0); //set to Arabic (in Windows 98/Me)
 

CenoByte

Member
نكته شماره 7 :
حركت دادن فرمهاي بدون Caption با ماوس :

کد:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; 
  Shift: TShiftState; X, Y: Integer); 
begin 
  ReleaseCapture; 
  SendMessage(Form1.Handle, wm_SysCommand,$f012,0); 
end;
 

CenoByte

Member
نكته شماره 8 :
ايجاد سوراخ در فرم :

کد:
procedure TForm1.Button1Click(Sender: TObject); 
var 
     region1, region2 : hrgn; 
begin 
     region1 := CreateRectRgn(0,0,width,height); 
     region2 := CreateEllipticRgn(30,30,200,200); 
     CombineRgn(region1, region1, region2, RGN_DIFF); 
     SetWindowRgn(handle, region1, true); 
end;

اينم يك تصوير از بكار گيري اين نكته :
hole.jpg
 

CenoByte

Member
سلام دوستان خسته نباشيد من مدتي درگير بودم ان شاالله به زودي مجموعه هاي جديدي رو اضافه خواهم كرد.موفق و پيروز باشيد.
 

جدیدترین ارسال ها

بالا