برنامه نویس

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

برنامه نویس

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

کد استفاده Enter به جای Tab در دلفی


خاصیت KeyPreview از فرم رو به True تغییر بدین و فقط کد زیر رو تو رویداد KeyPress از فرم بذارین


procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key= #13 then begin
    keybd_event(VK_TAB,1,0,0);
    keybd_event(VK_TAB,1,KEYEVENTF_KEYUP,0);
    Key:= #0;
  end;
end;
یا از این کد هم میتونید استفاده کنید.
در رویداد onkeypress :

if (key=#13) then
begin
Key := #0;
Perform (CM_DialogKey, VK_TAB, 0);
end;


رنگبندی رکوردهای dbgrid در دلفی

کد زیر از دو رنگ در نمایش رکوردهای زوج و فرد استفاده میکند .

 procedure TGridForm.DBGridDrawColumnCell(
   Sender: TObject;
   const Rect: TRect;
   DataCol: Integer;
   Column: TColumn;
   State: TGridDrawState) ;
 var
   grid : TDBGrid;
   row : integer;
 begin
   grid := sender as TDBGrid;
 
   row := grid.DataSource.DataSet.RecNo;
 
   if Odd(row) then
     grid.Canvas.Brush.Color := clSilver
   else
     grid.Canvas.Brush.Color := clDkGray;
 
   grid.DefaultDrawColumnCell(Rect, DataCol, Column, State) ;
 
 end; (* DBGrid OnDrawColumnCell *)


رفع مشکل سیاه شدن صفحه در هنگام پخش فیلم با نرم افزار kmplayer

مدتی بود فایل های تصویری که با KM Player اجرا میکردم مشکل داشتن یعنی صدا رو داشتم اما تصویر سیاه بود حنی زیرنویس هم نشون میداد فقط تصویر نبود . کافی رو صفحه kmplayer راست کلیک کنید و گزینه های زیر رو انتخاب کنید:


Video advanced -> Video renderer and select VMR9 Renderless, EVR or EVR C/A


Preferences (F2) ->Video processing ->General tab and select Condition -> Always use



تغییر فایل xml در installshield

با فرض اینکه فایل xml به صورت زیر باشد


<?xml version="1.0" encoding="utf-8"?>
<platformIDxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
  <type>35</type>
  <manufacturer>14</manufacturer>
  <SerialNumber>
    <version>2</version>
  </SerialNumber>
</platformID>
دو تابع زیر مقدار ورژن را تغییر میدهد :
prototype UpdateWebConfigAttributes(); 
prototype ReplaceValueOf(OBJECT, STRING, STRING);

function UpdateWebConfigAttributes()
    OBJECT oDoc, oNode;
    NUMBER i;                 
    STRING sWebConfigFilePath;  
    BOOL successfulLoad;
begin  

    sWebConfigFilePath = "c:\\Web.config"; 

    if Is(FILE_EXISTS, sWebConfigFilePath) = FALSE then
        MessageBox("Could not find Web.config file.", 0);
    endif;

    // get values from public properties
    set oDoc = CreateObject("Msxml2.DOMDocument.4.0"); 
    if !IsObject(oDoc) then
        MessageBox("Could not create XML Document", 0);
        return -1;    
    endif;    

    oDoc.async = FALSE; 
    oDoc.setProperty("SelectionLanguage", "XPath");

    successfulLoad = oDoc.load(sWebConfigFilePath);
    if !successfulLoad then
        MessageBox("Could not load Web.config as an xml file", SEVERE);                        
        return -1;
    endif;
 ReplaceValueOf(oDoc, "//platformID/SerialNumber/version", "1");
oDoc.save(sWebConfigFilePath);
set oDoc = NOTHING;
end;


function ReplaceValueOf(oDoc, xPath, valueToPutIn)
OBJECT oNode;
begin
set oNode = oDoc.selectNodes(xPath)(0);
try
-- در صورتی که ورژن دارای خصوصیتی به نام نوع باشد خط زیر را اجرا میکنیم
-- oNode.attributes.getNamedItem("kind").value = valueToPutIn;

oNode.attributes.getNamedItem("value").value = valueToPutIn;
catch
MessageBox("Could not set '" + xPath + "' with '" + valueToPutIn + "'", SEVERE);
endcatch;
end;




نصب sql 2008 r2 به صورت سایلنت

مراحل نصب را تا قسمت دریافت فایل ini پیش میرویم .

 ConfigurationFile.ini را در کنار setup sql قرار میدهیم.

 یک فایل bath برای اجرا سایلنت می سازیم و کد زیر را در ان مینویسیم و در کنارفایل ini میگذاریم . در صورتی که فایل bat در مسیر کنار دو فایل دیگر نباشد باید مسیر را نیز به کد زیر اضافه نماییم .

 

"setup.exe" /ConfigurationFile="ConfigurationFile.ini"

حالا کافیست فایل bat را اجرا کنیم

 

تنظیمات فایل  ConfigurationFile.ini برای نسخه Enterprise:

 

·         در صورتی که برای دیتابیس پسورد گذاشتیم خط زیر را با پسورد مدنظر وارد میکنیم :

SAPWD ="PASS"

 

·         مقدار QUIET رو به True تغییر بدید (این پارامتر مشخص کننده این است که برنامه نصب ما به صورت سایلنت یا بدون دخالت کاربر یا به صورت unattended installation اجرا شود)

·         مقدار SQLSYSADMINACCOUNTS رو به “BUILTIN\ADMINISTRATORS” تغییر بدید

·         متغیر PID رو اضافه کنید و مقدار آن رو برابر با لایسنس یا سریال نرم افزار قرار در صورتی که برنامه شما کرک شده می باشد و هنگام نصب نرم افزار ، سریال آن هم وجود دارد ، نیازی به افزودن این خط نداریم

·         پارامتر IACCEPTSQLSERVERLICENSETERMS رو اضافه کنید و مقدار آن رو برابر با “True” قرار دهید

·         حذف پارامتر ADDCURRENTUSERASSQLADMIN ، زمانی که مقدار پارامتر SQLSYSADMINACCOUNTS تعیین شده باشد از این پارامتر نمی توان استفاده کرد. فقط در اینستالر Express جواب می دهد.

·         حذف پارامتر UIMODE ، این پارامتر با پارامتر QUITE قابل اسفاده نمی باشد

·         حذف پارامترهای INSTALLSHAREDDIR ، INSTALLSHAREDWOWDIR ، INSTANCEDIR . زمانی که می خواهیم نصب در پوشه های پیش فرض انجام شود.

استفاده از radiobutton در installshield


BOOL bvCheck1,bvCheck2;

begin

Dlg_SdAskOptions:  

 bvCheck1= TRUE;

 bvCheck2= FALSE; 

 nResult=AskOptions (EXCLUSIVE," Select your Type Below.","install ", bvCheck1,"not install", bvCheck2);

if (bvCheck1 = 1 )then

   goto  DLG_Install;

 endif;   


استفاده از فایل ini در installshield


به عنوان نمونه اگر فایل ini با نام ConfigurationFile در مسیر جاری فایل نصب باشد  :


[general]
title="1234"

کد زیر را برای تغییر دادن مقادیر فایل می نویسیم :


    WriteProfString(SRCDIR^"my folder\\ConfigurationFile.ini",

         "general",

         "title",

         "\""+1111+"\"") ;

استفاده از فایل ini در دلفی

به عنوان نمونه اگر فایل ini با نام ConfigurationFile به صورت زیر باشد :


[general]
title="1234"

کد زیر را برای تغییر دادن مقادیر فایل می نویسیم :


var path,value :string;

    IniFile : TIniFile;

begin

  value:='1111';

  path:=ExtractFilePath(Application.ExeName);

  try

    IniFile:=TIniFile.Create(path+'\ConfigurationFile.ini');

    inifile.WriteString('general','title',value);

  finally

    inifile.Free;

     close;

  end;

استفاده از opendialog برای انتخاب folder

کد زیر به جای انتخاب فایل در OpenDialog، انتخاب مسیر را نشان میدهد 


var

  OpenDialog: TFileOpenDialog;

  SelectedFolder: string;

begin

OpenDialog := TFileOpenDialog.Create(nil);

try

  OpenDialog.Options := OpenDialog.Options + [fdoPickFolders];

  if not OpenDialog.Execute then

    Abort;

  SelectedFolder := OpenDialog.FileName;

finally

  OpenDialog.Free;

end;


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

program ProjectExtractPathDemo;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
    Path : string ;
begin
  Path:='C:\Program Files\Borland';
  Writeln(ExtractFileName(Path));//return Borland

  Path:='C:\Program Files\Borland\';
  Writeln(ExtractFileName(Path));//return ''

  Path:='C:\Program Files\Borland\';
  Writeln(ExtractFileName(ExcludeTrailingPathDelimiter(Path)));//return Borland


  Readln;
end.

یا :
uses SysUtils;

Delete(Path, 1, LastDelimiter('\', Path));

SetFocus بر روی RadioGroup1 در دلفی

اگر روی RadioGroup  بخواهیم فاکوس کنیم میتوانیم از کد زیر استفاده نماییم :


 (RadioGroup1.Controls[0] as TRadioButton).SetFocus;

on click در dbgrid دلفی

شاید برای شما هم اتفاق افتاده باشه که نیاز به کلیک در dbgrid داشته باشید به عنوان مثال در داخل dbgrid چک باکس دارید و میخواهید با کلیک روی ان انتخاب شود . در این صورت از کد زیر میتونید استفاده کنید :

procedure DbGridCellClick(Column: TColumnEh);

begin

  if DbGrid.SelectedField.DataType=ftBoolean then

    //  statement

end;

پیدا کردن بزرگترین مقدار در یک رکورد از جدول sql

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

 که در ان data_table نام جدول مورد نظر ، date1 ، date2 ، date3 نام فیلدها میباشد .

 


SELECT  MAX(date_columns) AS max_date
FROM    ( (SELECT   date1 AS date_columns
           FROM     data_table         )
          UNION
          ( SELECT  date2 AS date_columns
            FROM    data_table
          )
          UNION
          ( SELECT  date3 AS date_columns
            FROM    data_table
          (
        AS date_query(
و یا 
SELECT  MAX(MostRecentDate)
FROM    ( SELECT    CASE WHEN date1 >= date2
                              AND date1 >= date3 THEN date1
                         WHEN date2 >= date1
                              AND date2 >= date3 THEN date2
                         WHEN date3 >= date1
                              AND date3 >= date2 THEN date3
                         ELSE date1
                    END AS MostRecentDate
          FROM      data_table
        ) AS date_query 

کد برداشتن space از وسط رشته در دلفی

Edit1.Text:=StringReplace(Edit1.Text,' ','',[rfReplaceAll]);

سورس صحت سنجی کد ملی

کد ملی شماره ای است 10 رقمی که از سمت چپ سه رقم کد شهرستان ، شش رقم بعدی کد منحصر به فرد برای فرد دارنده و رقم آخر آن هم یک رقم کنترل است که از روی 9 رقم سمت چپ بدست می آید. برای بررسی کنترل کد کافی است مجدد از روی 9 رقم سمت چپ رقم کنترل را محاسبه کنیم
از آنجایی که درسیستم کد ملی معمولا قبل از کد تعدادی صفر وجود دارد.(رقم اول و رقم دوم از سمت چپ کد ملی ممکن است صفر باشد) و در بسیاری از موارد ممکن است کاربر این صفرها را وارد نکرده باشد و یا نرم افزار این صفرها را ذخیره نکرده باشد بهتر است قبل از هر کاری در صورتی که طول کد بزرگتر مساوی 8 و کمتر از 10 باشد به تعداد لازم (یک تا دو تا صفر) به سمت چپ عدد اضافه کنید. ساختار کد ملی در زیر نشان داده شده است

1- برای محاسبه رقم کنترل از روی سایر ارقام ، هر رقم را در موقعیت آن ضرب کرده و حاصل را با هم جمع می کنیم.
2- مجموع بدست آمده از مرحله یک را بر 11 تقسیم می کنیم
3- اگر باقیمانده کمتر از 2 باشد ، رقم کنترل باید برابر باقیمانده باشد در غیر اینصورت رقم کنترل باید برابر یازده منهای باقیمانده باشد


به عنوان مثال 4709450552
باید از سمت چپ یکی یکی اعداد را از 10 به پایین ضرب کنیم البته تا 9 تا عدد یعنی 470945055

40=10*4
63=9*7
0=8*0
63=7*9
24=6*4
25=5*5
0=4*0
15=3*5
10=2*5

 

خوب حالا باید تمام این حاصلضرب ها رو با هم جمع کنیم
که میشه 240
حالا باید این عدد رو تقسیم بر 11 کنیم البته ما با باقیمانده تقسیم کار داریم
اگر باقیمانده از 2 کوچکتر بود همون عدد میشه رقم آخر کد ملی
اما اگر از 2 بیشتر بود 11 رو منهای باقیمانده میکنیم
در این مثال باقیمانده عدد 9 میشه
2=9-11
پس کد اخر میشه عدد 2 حالا به کد ملی ما نگاه کنید 4709450552
شما هم میتونید از همین روش بفهمید که کد ملی درست وارد شده یا نه
امید وارم خوب تونسته باشم توضیح بدم 

 

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

تبدیل کاراکترهای فاکس پرو در ویندوز به نحوی که قابل خواندن باشند (با دلفی)

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

 

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