توجه توجه توجه : 1
از اینکه قست کپی برداری از برنامه را دارید متشکرم . ولی این کار
عواقب سنگینی در
بر خواهد داشت.برای کسب اجازه لینک زیر را
در لیست خود اظافه کنید .
http://freefard.blogfa.com
از اینکه نتوانستم به قولم وفا کنم معذرت می خواهم ...ولی سعی می کنم در اولین فرصت ادامه دهم ....دوستدار و شاگرد شما فریفرد
اول عذر من را بدليل نوشتن چند ماه وبلاگ پذيرا باشد . به علت داشتن كنكور نتوانستم مطلب بنويسم .
مطوئن باشيد بعد از كنكور شروع به نوشتن مطالب زيبا و جديد خواهم كرد
دوستدار همه شما برنامه نويسان FREEFARD
1-سعي كنيد كدها را ساده بنويسيد.اين كار باعث سادگي در خواندن كدها و فهميدن آنها مي شود. از نام هاي با معنا براي متغيير ها و ثابت ها استفاده كنيد.براي مثال: sName,sMessage براي متغيير هاي String iCounter براي متغيير هاي Integer. براي ثابت ها از حروف بزرگ استفاده كنيد.sWARNING براي ثابتهاي String . براي كامپوننت ها (Visual Component Librarry) از اسمهاي پيش فرض استفاده نكنيد. مثل : Edit1,Combo1,Button1. براي كامژوننت ها به اينگونه عمل كنيد مثلا براي دكمه اي button براي جستجو داريم اين نام را انتخاب مي كنيم: BtnSearch
. 2- گذاشتن رهنمود {+O$} يا {Optimization On$} در ابتداي برنامه. با گذاشتن اين رهنمود كامپايلر دلفي موثرتر عمل مي كند. البته بعضي اوقات Debugging (اشكال زدايي) سخت تر انجام مي شود(با فعال بودن اين قسمت): ... شما نميتوانيد يك نقطه BreakPoint روي دستورات بگذاريد
3-ممكن است شما بخواهيد كامپايل كنيد برنامه خود را با پكيچ Run-Time Package. اين كار ميتواند بگيرد فضاي زيادي وقتي كه شما استفاده مي كنيد در برنامه از libraries يكسان. متاسفانه وقتي برنامه خود را ارائه مي دهيد شما نياز به ارائه DLL هاي استفاده در برنامه نيز مي باشيد.
4-هيچ وقت همه فرم ها را در شروع برنامه نسازيد(create) .(اين امر به صورت پيش فرض انجام مي گيرد). براي اينكه اين كار باعث كند شدن لود برنامه مي شود و احتياج به حافظه زياد مي شود. به جاي اين كار به صورت ديناميك فرم ها را خلق كنيد. نكته: براي اينكه فرم ها به صورت خود كار درست نشوند به منو Project رفته گزينه Option را انتخاب كرده وسپس در همان تب اول فرم هايي را كه نمي خواهيد به صورت خود كار درست شوند را به راست منتقل كنيد.
5- به جاي اينكه خودتون به نوشتن توابع سيستمي كنيداستفاده كنيد از توابع API .(در مواقعي كه تابع هاي يكسان وجود دارد). معمولا اين توابع سريعتر عمل مي كنند.
6- وقتي كه برنامه شما داراي عكس مي باشد ابتدا سعي كنيد عكس خود را بهينه كنيد .
وقتي استفاده مي كنيد از فايلهاي bmp مطمئن شويد كه آن عكس در انداره مورد نظر مي باشد و نيازي به قيچي خوردن نيست.
وقتي كه استفاده مي كنيد از فايلهاي GIF آنها را با بهبود بخشيدن به Color Palete با ابزار هاي خاص(در محيط هاي گرافيكي) بهينه سازيد.
وقتي استفاده مي كنيد از فايلهاي JPEG بهتر است از Image Compresion استفاده كنيد.
بهتر است عكس هاي JPEG خود را كه داراي 256 رنگ يا كمتر از 256 رنگ هستند به GIF تبديل كنيد.
7- وقتي مي خواهيد تنها از يك يا دو تابع يا پروسيجر از يك يونيت استفاده كنيد .
تنها همان توابعي كه مي خواهيد را در برنامه خود كپي كنيد و آن يونيت را به يوزز Usesخود اضافه نكنيد.
8-به جاي اينكه از كدها در برنامه خود استفده بهتر است از كامپوننت هاي غير بصري استفاده كنيد.
براي اينكه به كد مورد نظر براحتي مي توانيد دسترسي پيدا كنيد(در كامپوننت هاي).
-اگر در برنامه خود از توابع time-critical(حلقه هاي كه در برنامه شما مهم به نظر مي رسد) استفاده مي كنيد بايد خيلي دقت كنيد.
چيزي كه سريع به نظر مي رسد در كامپيوتر شما ممكن است در كامپيوترهاي ديگر به همان سرعت نباشد. اينجا شما بايد از كد هاي كوچك و قابل اجرا و همچنين سريع است استفاده كنيد
پيشنهاد مي شود از كد هاي اسمبلر(اسمبلي ) استفاده كنيد.
10-تقريبا همه برنامه ها در محاسبات ابتدايي به يك گونه ميباشند .
ساده كردن فرمولها يتان براي سريع تر كردن توابع مي باشد كه يكي از معمولي ترين راه ها براي بهينه كردن برنامه هاست.
منابع: freefard,http://delphi.about.com/,A.Rivaz

procedure TForm1.FormCreate(Sender: TObject);
const
strCLOSE = 'ÎÑæÌ';
strmin='ßãíäå';
strMax='ÈíÔíäå';
strmov='ÌÇÈÌÇíí';
strRes='ÈÇÒÔÊ Èå ÍÇáÊ ÞÈá';
strsiz='ÇäÏÇÒå';
var
SysMenu : HMenu;
MenuItemInfo : TMenuItemInfo;
begin
SysMenu := GetSystemMenu(Handle, FALSE);
FillChar(MenuItemInfo,SizeOf(TMenuItemInfo), #0);
MenuItemInfo.cbSize := SizeOf(TMenuItemInfo);
MenuItemInfo.fMask := MIIM_TYPE or MIIM_ID or MIIM_STATE;
MenuItemInfo.fType := MFT_STRING;
MenuItemInfo.wId := SC_CLOSE;
MenuItemInfo.dwTypeData := strCLOSE;
MenuItemInfo.cch := Length(strCLOSE);
SetMenuItemInfo(SysMenu, SC_CLOSE, FALSE, MenuItemInfo);
MenuItemInfo.wId := SC_MINIMIZE;
MenuItemInfo.dwTypeData := strmin;
MenuItemInfo.cch := Length(strmin);
SetMenuItemInfo(SysMenu, SC_MINIMIZE, FALSE, MenuItemInfo);
MenuItemInfo.wId := SC_MAXIMIZE;
MenuItemInfo.dwTypeData := strMax;
MenuItemInfo.cch := Length(strMax);
SetMenuItemInfo(SysMenu, SC_MAXIMIZE, FALSE, MenuItemInfo);
MenuItemInfo.wId := SC_MOVE;
MenuItemInfo.dwTypeData := strmov;
MenuItemInfo.cch := Length(strmov);
SetMenuItemInfo(SysMenu, SC_MOVE, FALSE, MenuItemInfo);
MenuItemInfo.wId := SC_SIZE;
MenuItemInfo.dwTypeData := strsiz;
MenuItemInfo.cch := Length(strsiz);
SetMenuItemInfo(SysMenu, SC_SIZE, FALSE, MenuItemInfo);
MenuItemInfo.wId := SC_RESTORE;
MenuItemInfo.dwTypeData := strRes;
MenuItemInfo.cch := Length(strRes);
SetMenuItemInfo(SysMenu, SC_RESTORE, FALSE, MenuItemInfo);
end;
برنامه برا ي دانلود آماده است.
DawnLoad
اينم سورس كامل برنامه:
البته قبل از كپي كردن سورس يك پاپ آپ منو و دو تا colorDialog و يك ImageList1 و یک label1, دو تا Button روي فرم قرار دهيد
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ImgList, ActnMan, ActnColorMaps, StdCtrls;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
N11: TMenuItem;
N21: TMenuItem;
N31: TMenuItem;
N41: TMenuItem;
N51: TMenuItem;
N61: TMenuItem;
N81: TMenuItem;
Edit1: TEdit;
Button1: TButton;
ColorDialog1: TColorDialog;
Button2: TButton;
ColorDialog2: TColorDialog;
Label1: TLabel;
ImageList1: TImageList;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Label1Click(Sender: TObject);
private
procedure MenuAdvancedDrawItem(Sender: TObject; ACanvas: TCanvas; ARect: TRect; State: TOwnerDrawState);
procedure MenuItemClick(Sender : TObject);
procedure DrawItemText(X: integer;ACanvas: TCanvas;ARect: TRect;Text: string);
procedure DrawBar(ACanvas: TCanvas);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses ShellApi;
procedure TForm1.DrawBar(ACanvas: TCanvas);
var
lf : TLogFont;
tf : TFont;
begin
with ACanvas do begin
Brush.Color :=ColorDialog1.Color;
FillRect(Rect(0,0,20,150));
Font.Name := 'Tahoma';
Font.Color := ColorDialog2.Color;
tf := TFont.Create;
try
tf.Assign(Font);
GetObject(tf.Handle, sizeof(lf), @lf);
lf.lfEscapement := 900;
lf.lfHeight := Font.Height - 2;
tf.Handle := CreateFontIndirect(lf);
Font.Assign(tf);
finally
tf.Free;
end;
TextOut(2, 105,Edit1.Text);
end;
end; (*Draw bar*)
procedure TForm1.DrawItemText(
X: integer;
ACanvas: TCanvas;
ARect: TRect;
Text: string);
begin
ARect.Left := X;
DrawText(ACanvas.Handle, PChar(Text), -1, ARect, DT_LEFT or DT_VCENTER or DT_SINGLELINE or DT_NOCLIP);
end; (*DrawItemText*)
procedure TForm1.FormCreate(Sender: TObject);
var
item : TMenuItem;
SysMenu : HMenu;
i : integer;
begin
ColorDialog1.Color:=clGray;
ColorDialog2.Color:=clYellow;
//assign custom drawing proceure
for i := 0 to -1 + PopupMenu1.Items.Count do
begin
if PopupMenu1.Items[i].Caption <> '-' then //not for separators
begin
PopupMenu1.Items[i].OnAdvancedDrawItem := MenuAdvancedDrawItem;
end;
end;
SysMenu := GetSystemMenu(Handle, FALSE);
end;
procedure TForm1.MenuItemClick(Sender: TObject);
begin
end;
procedure TForm1.MenuAdvancedDrawItem(
Sender: TObject;
ACanvas: TCanvas;
ARect: TRect;
State: TOwnerDrawState);
var
menuItem : TMenuItem;
begin
menuItem := TMenuItem(Sender);
ARect.Left := 20;
ACanvas.FillRect(ARect);
//draw text
DrawItemText(45,ACanvas,ARect,menuItem.Caption);
//draw bitmap
ImageList1.Draw(ACanvas,24,ARect.Top + 2,menuItem.ImageIndex);
if PopupMenu1.Items.IndexOf(menuItem) = -1 + PopupMenu1.Items.Count then
begin
//when all the menu items are drawn we draw the 'delphi.about.com' bar
DrawBar(ACanvas);
end;
end; (*MenuAdvancedDrawItem*)
procedure TForm1.Button1Click(Sender: TObject);
begin
ColorDialog1.Execute;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ColorDialog2.Execute;
end;
procedure TForm1.Label1Click(Sender: TObject);
begin
ShellExecute(Handle, 'open', 'http://freefard.blogfa.com',nil,nil, SW_SHOWNORMAL);
end;
end.