برنامه نویس

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

برنامه نویس

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

نگه داری عکس با فرمت base64 در دلفی

تبدیل عکس به base 64 و ذخیره در دیتابیس به صورت رشته ای و تبدیل رشته کد شده به عکس 



uses Soap.EncdDecd


procedure DecodeToFile(const base64: AnsiString; const FileName: string);

var

  stream: TFileStream;

  bytes: TBytes;

begin

  bytes := DecodeBase64(base64);

  stream := TFileStream.Create(FileName, fmCreate);

  try

    if bytes<>nil then

      stream.Write(bytes[0], Length(Bytes));

  finally

    stream.Free;

  end;

end;


function EncodeFile(const FileName: string): AnsiString;

var

  stream: TMemoryStream;

begin

  stream := TMemoryStream.Create;

  try

    stream.LoadFromFile(Filename);

    result := EncodeBase64(stream.Memory, stream.Size);


  finally

    stream.Free;

  end;

end;


procedure TForm1.EncodeButton1Click(Sender: TObject);

begin

  str:= EncodeFile('d:\pic.jpg');

end;


procedure TForm1.DecodeClick(Sender: TObject);

begin

DecodeToFile(str,'c:\xx.jpg') ;

end;

نرم افزار فروشگاهی

نرم افزار فروشگاهی بایت 

از اصلی ترین مزیت های این برنامه می توان به موارد زیر اشاره کرد:

:heavy_check_mark: تعریف کاربرهای مختلف با سطوح دسترسی قابل تعریف
:heavy_check_mark: گزارش گیری های متنوع و کارا بر روی حساب ها،کالا ها، فاکتور ها ، اشخاص و....
:heavy_check_mark: ثبت پیش فاکتور ها و صدور فاکتور از روی پیش فاکتور ها
:heavy_check_mark: استفاده دستگاه بارکد خوان و چاپ بارکد روی پرینتر معمولی
:heavy_check_mark: پشتیبان گیری و بازیابی پشتیبان از حساب ها
:heavy_check_mark: محاسبه سود در فاکتور
:heavy_check_mark: ثبت عملیات ویزیتورها
:heavy_check_mark: سقف اعتبار شخصی
:heavy_check_mark: ارتقا برنامه به تولید کالا و استفاده از فرمول تولید در سطح پیشرفته
:heavy_check_mark: امکان ارسال پیامک از پنل در سطح پیشرفته
:heavy_check_mark: ایجاد سالی مالی برای اطلاعات حسابرسی همزمان بر روی حساب های چند شرکت بصورت جدا گانه

ویژگیهای این نرم افزار شامل :
:one: سادگی اجرا و کار با برنامه (بدون نیاز به دانستن مفاهیم حسابداری)
:two: قابلیت اتصال به اینترنت و پشتیبانی از راه دور
:three: نصب و آموزش کاربر به صورت رایگان


         قیمت 700،000 تومان 

شماره تماس یا ایمیل خود را بگذارید تا با شما تماس گرفته شود


r:four:

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

برای تبدیل ، تغییر نام ، ... روی کامپوننت ها به راحتی میتوان از برنامه جانبی که روی دلفی نصب میشود با نام GExperts استفاده کرد من تا اخرین نسخه فعلی دلفی xe10.2 تست گرفتم و مشکلی نداشت

مرتب سازی dbgrid

مرتب سازی dbgrid دلفی
procedure TformResult.gridResultTitleClick(Column: TColumn);
begin
  // User can sort the grid by clicking on any column's title
  if DM.ADOSearch.Sort = Column.FieldName + ' ASC' then
    DM.ADOSearch.Sort := Column.FieldName + ' DESC'
  else
    DM.ADOSearch.Sort := Column.FieldName + ' ASC';
end;

خواندن ورژن از تنظیمات در دلفی

function GetFileVersion(exeName : string): string;

const

  c_StringInfo = 'StringFileInfo\040904E4\FileVersion';

var

  n, Len : cardinal;

  Buf, Value : PChar;

begin

  Result := '';

  n := GetFileVersionInfoSize(PChar(exeName),n);

  if n > 0 then begin

    Buf := AllocMem(n);

    try

      GetFileVersionInfo(PChar(exeName),0,n,Buf);

      if VerQueryValue(Buf,PChar(c_StringInfo),Pointer(Value),Len) then begin

        Result := Trim(Value);

      end;

    finally

      FreeMem(Buf,n);

    end;

  end;

end;


procedure TForm1.Button1Click(Sender: TObject);

begin

  Form1.Caption := Form1.Caption + ' version ' + GetFileVersion(ExtractFileName(Application.ExeName));

end;

جایگزینی حرف 'ی' و 'ک' عربی با فارسی

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


DECLARE @Table NVARCHAR(800),@Column NVARCHAR(800)

DECLARE Table_Cursor CURSOR

FOR

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

SELECT T.name, /* Table */

       C.name  /* Column */

FROM sysobjects T,syscolumns C

WHERE  T.id = C.id  AND T.xtype = 'u' /* User Table */

          AND (C.xtype = 99 /* ntext */

OR C.xtype = 35   /* text */

OR C.xtype = 231  /* nvarchar */

OR C.xtype = 167  /* varchar */

OR C.xtype = 175  /* char */

OR C.xtype = 239  /* nchar */)

OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @Table,@Column

WHILE (@@FETCH_STATUS = 0)

BEGIN

EXEC ('Update [' + @Table + '] Set [' + @Column + '] = REPLACE(REPLACE(CAST([' + @Column + '] as nvarchar(800)), NCHAR(1610), NCHAR(1740)), NCHAR(1603), NCHAR(1705))')

FETCH NEXT FROM Table_Cursor INTO @Table,@Column

END CLOSE Table_Cursor 

DEALLOCATE Table_Cursor


یا به صورت جدول به جدول 


update `tbl_name` set

`text` = replace(`text`, 'ک', 'ک') ,

`text` = replace(`text`, 'ی', 'ی');



HorizontalAlignment property of the Range class error

برای تنظیم HorizontalAlignment و VerticalAlignment در تنظیمات خروجی اکسل دلفی اگر با xlleft , ... مشکل داشت میتوان از کدهای زیر استفاده کرد

For VerticalAlignment:

Top:    -4160
Center: -4108
Bottom: -4107

And HorizontalAlignment:

Left:    -4131
Center:  -4108
Right:   -4152
var WrkSheet : oleVariant;  
begin
WrkSheet:=CreateOleObject('Excel.Application');
  WrkSheet.displayAlerts:=false;
  WrkSheet.WorkBooks.add;
  WrkSheet.ActiveSheet.Name := 'Sheet1';
  WrkSheet.Range['A1','A1'].HorizontalAlignment:= -4108;
end

HorizontalAlignment property of the Range class error

For VerticalAlignment:

Top:    -4160
Center: -4108
Bottom: -4107

And HorizontalAlignment:

Left:    -4131
Center:  -4108
Right:   -4152

چیدن تاریخ در یک بازه زمانی در sql

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


DECLARE @startDate DATEtime

set @startDate= CAST(MONTH(GETDATE()) AS VARCHAR) + '/' + '01/' +  + CAST(YEAR(GETDATE()) AS VARCHAR)  -- mm/dd/yyyy

DECLARE @endDate DATEtime

set @endDate= GETDATE() -- mm/dd/yyyy


SELECT [Date] = DATEADD(Day,Number,@startDate) 

FROM  master..spt_values 

WHERE Type='P'

AND DATEADD(day,Number,@startDate) <= @endDate




------------------------------

چیدن تاریخ به ماه 

DECLARE @startDate VARCHAR(10)

DECLARE @endDate VARCHAR(10)

set @startDate= '2021/01/20'  -- mm/dd/yyyy

set @endDate= '2021/04/05'-- mm/dd/yyyy


SELECT DATEADD(MONTH, x.number, @StartDate)

FROM    master.dbo.spt_values x

WHERE   x.type = 'P'        

AND     x.number <= DATEDIFF(MONTH, @StartDate, @EndDate);

مرتب سازی memtable در دلفی روی گرید

مرتب سازی memtable در دلفی روی گرید به صورت زیر عمل میکنیم


procedure TFmTransferInfo.DBGridEh1TitleClick(Column: TColumnEh);

begin

    if not(DBGridEh1.DataSource.DataSet.Active) then

      Exit;

    if Column.Field.Calculated then

      Exit;

    case Column.Title.SortMarker of

    smNoneEh:

       begin

             Column.Title.SortMarker := smDownEh;

             MemTableEh1.SortByFields(Column.FieldName+' DESC');

       end;

    smDownEh:

       begin

            Column.Title.SortMarker := smUpEh;

            MemTableEh1.SortByFields(Column.FieldName+' ASC');

       end;

    smUpEh:

       begin

            Column.Title.SortMarker := smNoneEh;

            MemTableEh1.SortByFields('');

       end;

       end;


end;


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

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

SecondsBetween(Now, IncSecond(Now,10)) 
MinutesBetween(Now, IncMinute(Now,110))


غیر فعال کردن دکمه بستن فرم

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


EnableMenuItem( GetSystemMenu( handle, False ),SC_CLOSE, MF_BYCOMMAND or MF_GRAYED ); 
Enable: 
EnableMenuItem( GetSystemMenu( handle, False ), SC_CLOSE, MF_BYCOMMAND or MF_ENABLED ); 

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

Action := caNone;



جدا کردن رشته با کاما در sql

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


CREATE FUNCTION SplitString
(    
      @Input NVARCHAR(MAX),
      @Character CHAR(1)
)
RETURNS @Output TABLE (
      Item NVARCHAR(1000)
)
AS
BEGIN
      DECLARE @StartIndex INT, @EndIndex INT
 
      SET @StartIndex = 1
      IF SUBSTRING(@Input, LEN(@Input) - 1, LEN(@Input)) <> @Character
      BEGIN
            SET @Input = @Input + @Character
      END
 
      WHILE CHARINDEX(@Character, @Input) > 0
      BEGIN
            SET @EndIndex = CHARINDEX(@Character, @Input)
           
            INSERT INTO @Output(Item)
            SELECT SUBSTRING(@Input, @StartIndex, @EndIndex - 1)
           
            SET @Input = SUBSTRING(@Input, @EndIndex + 1, LEN(@Input))
      END
 
      RETURN
END
GO

فراخوانی به صورت زیر

SELECT Item
FROM dbo.SplitString('Apple,Mango,Banana,Guava', ',')

کد اجرای برنامه ای دیگر در دلفی

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


var
  Address:string;
begin
  Address:=ExtractFilePath(Application.ExeName)+'p.exe';
  if FileExists(Address) then
    ShellExecute(Handle,'open',PChar(Address),nil,nil,SW_SHOWNORMAL)
  else
    showmessage('فایل مربوطه پیدا نشد.');


اگر بخواهیم برنامه ای مثل ماشین حساب ویندوز فراخوانی کنیم از کد زیر میشود استفاده کرد


  WinExec('calc.exe',SW_SHOWNORMAL);


حذف رکورد از stringgrid دلفی

برای حذف رکورد جاری در stringgrid دلفی ، پروسیژر زیر را تعریف و در برنامه استفاد نمایید


procedure DeleteRow(Grid: TStringGrid);

var

  i: Integer;

begin

  for i := grid.Row to Grid.RowCount - 2 do

    Grid.Rows[i].Assign(Grid.Rows[i + 1]);

  Grid.RowCount := Grid.RowCount - 1;

end;



برای رکورد خاص به پروسیژر یک ورودی دیگر که شماره رکورد میتوان استفاده کرد مانند زیر :




procedure DeleteRow(Grid: TStringGrid; ARow: Integer);

var

  i: Integer;

begin

  for i := ARow to Grid.RowCount - 2 do

    Grid.Rows[i].Assign(Grid.Rows[i + 1]);

  Grid.RowCount := Grid.RowCount - 1;

end;