برنامه نویس

به وبلاگ خودتان خوش آمدید.

برنامه نویس

به وبلاگ خودتان خوش آمدید.

sort clientdataset در دلفی

کد زیر عمل مرتب سازی بر روی کلاینت دیتاست را انجام میدهد . ( نظر یادتون نشه )  

 

 procedure SortClientDataset(Column: TDBGridColumnItem;grid:tdbadvgrid;ClientDataSet:TClientDataSet);
var
 andstr:string;
 i:integer;
begin
try
  andstr:='';
  if (trim(Column.FieldName ) ='') then exit;
  if (grid.DataSource.DataSet.FieldByName(Column.FieldName ).FieldKind<>fkData ) then exit;


  if (grid.DataSource.DataSet.ClassNameIs ('TClientDataSet')=true) then
  begin
    if ClientDataSet.IndexName='' then
      andstr:=''
    else
      andstr:=';';
  ClientDataSet.AddIndex(Column.FieldName,Column.FieldName,[ixCaseInsensitive]);
  ClientDataSet.AddIndex(Column.FieldName+' DESC',Column.FieldName,[ixCaseInsensitive,ixDescending]);
//مرتب سازی به صورت صعودی
   if  KeyDataToShiftState(1)=[] then
    begin
       for i:=0 to grid.Columns.Count -1 do
        grid.Columns[i].HeaderFont .Color:=clWhite;
        Column.HeaderFont .Color:=clyellow;
        ClientDataSet.IndexName:=Column.FieldName
    end;
//مرتب سازی نزولی
    if  KeyDataToShiftState(1)=[ssshift] then
    begin
     for i:=0 to grid.Columns.Count-1 do
      grid.Columns[i].headerFont.Color:=clWhite;
      Column.HeaderFont .Color:=$001D9DE2;
      ClientDataSet.IndexName:= Column .FieldName+ ' DESC';
    end;
//مرتب سازی چند ستون به صورت صعودی
    if  KeyDataToShiftState(1)=[ssctrl] then
    begin
       ClientDataSet.IndexFieldNames :=ClientDataSet.IndexName+andstr+Column.FieldName;
       Column.HeaderFont .Color:=clyellow;
    end;
       ClientDataSet.First;

  end;
except on  e:exception do
       ShowMessage (e.Message );
end;
end;

راست چین کردن درخت در دلفی

در دلفی اگر می خواهید در TreeView گره ها راست به چپ نمایش داده شوند از کد زیر استففاده کنید . 

 const
 WS_EX_NOINHERITLAYOUT = $00100000; // Disable inheritence of mirroring by children
 WS_EX_LAYOUTRTL = $00400000; // Right to left mirroring

procedure SetWinControlBiDi(Control: TWinControl);
var
 ExStyle: Longint;
begin
 ExStyle := GetWindowLong(Control.Handle, GWL_EXSTYLE);
 SetWindowLong(Control.Handle, GWL_EXSTYLE, ExStyle or WS_EX_RTLREADING or WS_EX_RIGHT
   or WS_EX_LAYOUTRTL or WS_EX_NOINHERITLAYOUT );
end;
 

ودر رویداد FormShow کد زیر را بنویسید . 

SetWinControlBiDi(TreeView);
TreeView.Refresh; 

 

موفق باشید

کار با کتابخانه ها در دلفی

استفاده از DLL و کدهای داخل آن بهترین راه حل برای برنامه شما می باشدچرا که در آینده اگر قصد تغییراتی در برنامه خود را داشته باشید می توانید با ویرایش این DLL آن تغییرات را اعمال کنید.با ساخت دستورات و عملکردهای گوناگون در DLL می توانید سورس کد راحت تر و منظم تری در برنامه اصلی خود داشته باشید. یکی دیگر از مزایای DLL قابلیت Update نرم افزار می باشد. به طور مثال فرض کنید برنامه شما از یک DLL برای دستورات خود استفاده می کند. اگر در آینده نیاز به تغییراتی در آن داشته باشید ، می توانید DLL خود را تغییر دهید و از کاربران بخواهید تا به جای تغییر دادن کل برنامه شما ، فقط DLL مربوطه را تغییر دهند تا برنامه شما عملکرد جدیدی داشته باشد. ضمناْ به یاد داشته باشید DLL نوشته شده در هر زبانی قابل استفاده در زبانهای برنامه نویسی دیگر نیز می باشند .پس به خاطر داشته باشید استفاده از DLL ها مزایای فراوانی را به شما در برنامه نویسی می دهد.

ایجاد Dll

ابتدا از منوی File گزینه New و سپس Other را انتخاب نمایید. زینه DLL Wizard را انتخای کرده و OK را فشار دهید. اکنون فرمی باز شده که حاوی یک سری توضیحات می باشد. این فایل رابا نام MyDll.dpr ذخیره کنید. از منوی File گزینه New و سپس Unit را انتخاب نمایید . اکنون این فایل را با نام Msg.pas در همان شاخه ای که فایل قبلی خود را با نام MyDll.dpr قرار دادید ، ذخیره نمایید.

حال کدهای خود را در unit ایجاد شده وارد کنید . در انتهای نام پروسیژر از کلمه stdcall استفاده می کنیم به این منظور که در تما زبان های برنامه نویسی قابل استفاده باشد .

unit MsgDll;

interface

uses SysUtils;

procedure  ShowMessage (var textmsg:string);stdcall;

implementation

uses Msg;

procedure  ShowMessage (var textmsg:string);stdcall;

begin

Msg:=TMsg.create(nil);

Msg.show;

end;

end.

زمانی که کدهای خود را نوشتید . پروسیژرهایی که در برنامه های دیگر قرار است فراخوانی شوند را باید تعریف کنیم برای این کار به صفحه اصلی خود MyDll  رفته و قبل از   begin  با دستور Exports نام پروسیژر خود را تعریف کنید مانند زیر :

exports

ShowMessage;

فراخوانی dll در دلفی

باید در بالای برنامه قبل از implementation پروسیژر مورد نیاز در dll را تعریف کنید که این کار با دستور زیر است.

Procedure ShowMessage(textMsg:String);   StdCall;

external  'MsgDLL.dll';

نکته 1

در dll ها نمی توان یک فرم را به راحتی با دستور show ,showmodal نشان داد و باید فرم مورد نظر را create کرد . این کار را با دستور زیر انجام می دهیم . Msg نام فرم است .

Msg:= Msg.create(nil);

Msg.ShowModal;

نکته2

برای ارسال یک فرم یا Application  و یا Screen به dll   باید حتما از کلمه Var در تعریف پروسیژر استفاده کنید .


نکته 3 

در دلفی 7 برای ارسال مقدار از نوع رشته ای باید نوع ان را widestring در نظر گرفت


نکته 4 

در دلفی 7 با استفاده از یونیت sharemem برای ارسال صحیح اطلاعات میتوان استفاده کرد

نحوه نصب کامپوننت ها در دلفی

 کامپوننت های دلفی یکی از فایل ها با پسوند زیر هستند که در اینجا هر کدام را جداگانه توضیح می دهیم .

 نحوه  نصب کامپوننتهای با پسوند bpl  ، .dpk ، .pas ،  .ocx و .dll

ادامه مطلب ...

minimize کردن فرم در دلفی

اگر بخواهید با کلیک بر روی فرم صفحه خود را minimize کنید Procedure های زیر را بالای برنامه خود قرار دهید

procedure Tform1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.ExStyle := WS_EX_APPWINDOW;
end;

{I have tried with and with out the following procedure}
procedure Tform1.WMSyscommand(var Message: TWmSysCommand);
begin
case (Message.CmdType and $FFF0) of
SC_MINIMIZE:
begin
ShowWindow(Handle, SW_MINIMIZE);
Message.Result := 0;
end;
SC_RESTORE:
begin
ShowWindow(Handle, SW_RESTORE);
Message.Result := 0;
end;
else
inherited;
end;

end;
و حالا بر روی دکمه خود کد زیر را وارد کنید .
procedure TForm1.Button1Click(Sender: TObject);
var Message :  TWmSysCommand ;
begin
Message.CmdType    :=61472;
  WMSyscommand(Message  );
end


ایجاد xml با دلفی

برای ایجاد یک xml  به طور خیلی ساده می توانید از کد زیر استفاده کنید .که به طور دلخواه برای ایجاد هر گره مقادیر خود را بین </>  <> تعریف می کنید .

procedure tform1.createxml();
var
DXML:TXMLDocument;


begin
       DXML:=TXMLDocument.Create(Self);
       DXML.Active:=true;
       DXML.XML.Text:='<?xml version="1.0" encoding="windows-1256" ?> '+
                      '<Ask>'+
                          '<systemname>'+ systemname +'</systemname>'+
                          ' <hostname>'+ hostname+'</hostname>'+
                          ' <Date>'+  datetostr(now)+' </Date>'+
                      '</Ask>';

       FileName_xml:= 'options.xml';
       DXML.XML.SaveToFile(ExtractFilePath(Application.ExeName)+FileName_xml);
end;

استفاده از کامپوننت INDY برای به روز رسانی نرم افزار در دلفی

با کمی جستجو در این زمینه می توانید اطلاعات خیلی خوبی به دست بیاورید من به طور مختصر کدهای این برنامه را قرار دادم که با ایده گرفتن از آن و یا جستجو بیشتر نتایج بهتری به دست بیاورید . این برنامه کوچک قادر است فایل های روی host را دانلود کنید و نرمافزار خود را به روز کنید با دیگر object های آن مثل plogin می توانید اتصال به اینترنت را هم چک کنید و ... .

شی های مورد نیاز : IdLogEvent1 و IdAntiFreeze1 وIdFTP1 و DirectoryListBox و ProgressBar1 و... .

با استفاده از 4 فیلد متنی آدرس host و نام کاربری و کلمه عبور و آدرس فایل بر روی host را دریافت می کنیم . در دکمه connect کد زیر را می نویسیم .

.

.

ادامه مطلب ...

برنامه به روزرسانی نرم افزار با استفاده از دلفی

شاید تا به حال پیش آمده که نرم افزاری بزرگ نوشته باشید  و بعد بخواهید آن را به روز کنید . ( مانند به روز رسانی آنتی ویروس ها ) . من در این جا یک روال ساده را مرحله به مرحله بیان می کنم و بعد خود شما می توانید آن را تکمیل کنید .

برای این کار روش های زیادی وجود دارد که در این جا یک روش خیلی ساده  گفته می شود که  با توجه به کاربرد آن باید جای مراحل تغییر کند . (مثلا اول زمان آخرین دسترسی به فایل چک شود و بعد اتصال به اینترنت ) آدرس فایل های به روزرسانی را از روی فایل xml در host بخواند و آنها را دانلود و به روز کند و یا فایل xml را روی سیستم کاربر کپی کند و بعد آن را بخواند  و با یک progressbar زمان به روزرسانی را نشان دهد. این تنها یک برنامه ساده است که شاید به شما که در اول کار هستید کمک کند .

ادامه مطلب ...

دادن افکت به فرم های دلفی بدون استفاده از کامپوننت

به سادگی در دلفی با استفاده از کد زیر می توان به فرم افکت داد که با تغییر AW_VER_POSITIVE    می توان حالت های  مختلف به فرم داد .

AnimateWindow(Form1.Handle, 300, AW_VER_POSITIVE   );



دادن افکت به اجزا فرم یا خود فرم برای نمایش می توانید کد زیر را تغییر دهید . به عنوان مثال کد زیر برای تغییر نمایش پنل است 


if  hidden = False then

begin

  AnimateWindow(Panel1.Handle, 256, AW_SLIDE or AW_HOR_NEGATIVE or AW_HIDE);

  hidden := True;

end

else

begin

  AnimateWindow(Panel1.Handle, 256, AW_SLIDE or AW_HOR_POSITIVE or AW_ACTIVATE);

  hidden := False;

end;

تبدیل تاریخ میلادی به شمسی و بلعکس

شما بوسیله این رویداد میتوانید تاریخ میلادی را به شمسی تغییر دهید. البته قبل از اجرای برنامه فرم تاریخ سیستم خود را به yyyy/mm/dd تغییر دهید .

ادامه مطلب ...

کد دلفی تغییر حالت فرم

برای تغییر فرم خود به حالت های منحنی می توانید از این کد در برنامه خود استفاده کنید . ادامه مطلب ...