post url در دلفی از طریق http
function PostExample: string;
varlHTTP: TIdHTTP;lParamList: TStringList;beginlParamList := TStringList.Create;lParamList.Add('id=1');lHTTP := TIdHTTP.Create;tryResult := lHTTP.Post('http://blahblahblah...', lParamList);finallylHTTP.Free;lParamList.Free;end;end;نمایش json به تفکیکuses system.jsonprocedure TForm1.Button2Click(Sender: TObject);var JSonObject:TJSonObject;st :='{"code":200,"message":"OK","data":{"code":3271,"mobile":"1"}}';JSonValue:TJSonValue; st:string; BeginJsonValue:=JSonObject.ParseJSONValue(st);JSonObject := TJSonObject.Create;memo1.text:=(JsonValue as TJSONObject).Get('code').JsonValue.Value;// JsonValue:=(JsonValue as TJSONObject).Get('data').JsonValue; JSonObject.Free;end;==================نمونه دیگر ارسال procedure TForm2.Button1Click(Sender: TObject); var IdHTTP: TIdHTTP; ResponseContent: string; JSONContent: TStringStream; IOHandler: TIdSSLIOHandlerSocketOpenSSL; begin try IdHTTP := TIdHTTP.Create(nil); IOHandler:= TIdSSLIOHandlerSocketOpenSSL.Create(NIL); IOHandler.SSLOptions.SSLVersions := [sslvTLSv1, sslvSSLv2, sslvSSLv3]; IdHTTP.IOHandler := IOHandler; IdHTTP.Request.ContentType := 'application/json; charset=utf-8'; IdHTTP.Request.AcceptEncoding := 'gzip, deflate, br'; IdHTTP.Request.AcceptLanguage := 'Accept-Language'; IdHTTP.Request.CustomHeaders.AddValue('apiKey', 'XXXXXXXXXXXXXXXXXX'); IdHTTP.Request.CustomHeaders.AddValue('accept-language', 'fa'); JSONContent := TStringStream.Create('{"mobile": "XXXX","method": "sms"}', TEncoding.UTF8); ResponseContent := IdHTTP.Post('https://url', JSONContent); showmessage(ResponseContent); // Display response content finally JSONContent.Free; FreeAndNil(IdHttp); end; end;
نمایش ایکون برنامه در taskbar زمان hide شدن فرم اصلی دلفی در dpr پروژه این مقدار رو به این شکل تغییر بدید.
تبدیل عکس به 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;
برای تبدیل ، تغییر نام ، ... روی کامپوننت ها به راحتی میتوان از برنامه جانبی که روی دلفی نصب میشود با نام GExperts استفاده کرد من تا اخرین نسخه فعلی دلفی xe10.2 تست گرفتم و مشکلی نداشت
مرتب سازی 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;
برای تنظیم 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
For VerticalAlignment
:
Top: -4160
Center: -4108
Bottom: -4107
And HorizontalAlignment
:
Left: -4131
Center: -4108
Right: -4152
مرتب سازی 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))
برای غیر فعال کردن دکمه بستن فرم و فعال کردن ان از کد زیر میشود استفاده کرد :
اگر بخواهیم در برنامه نوشته شده با دلفی برنامه دیگری را فراخوانی کنیم از کد زیر استفاده میکنیم
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 دلفی ، پروسیژر زیر را تعریف و در برنامه استفاد نمایید
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;
ابتدا باید ترد تعریف شود به صورت زیر
Type
SefareshThread = Class(TThread)
// procedure openquery();
تمامی توابع و پروسیژرها را در اینجا تعریف کنید
protected
procedure Execute; override;
end;
یک تایمر روی صفحه میتوان گذاشت برای فراخوانی ترد و کدهای زیر برای انجام عملیات مورد نظر
procedure SefareshThread.Execute;
begin
inherited;
KalaOrderList_FRM.Timer1.Enabled:= false;
KalaOrderList_FRM.sql3.DisableControls;
KalaOrderList_FRM.sql2AfterScroll(nil);
KalaOrderList_FRM.sql3.EnableControls;
end;
procedure SefareshThread.openquery;
begin
Synchronize(openquery);
end;
procedure TKalaOrderList_FRM.Timer1Timer(Sender: TObject);
var
T : SefareshThread;
begin
T := SefareshThread.Create(True);
T.FreeOnTerminate := True;
T.Resume;
end;
و در مکان مورد نظر تایمر را فعال کنید
Timer1.Enabled:=true;
کامپوننت acDateTimeCalc در تب app controls ++ قرار دارد روی فرم بگذارید و کد زیر را برای ان بنویسید
procedure TForm1.Button1Click(Sender: TObject);
begin
acDateTimeCalc1.BeginTime:=Time;
ADOQuery2.Close;
ADOQuery2.Open;
ADOQuery1.Close;
ADOQuery1.Open;
acDateTimeCalc1.EndTime:=Time;
Caption:=Caption+' '+IntToStr(acDateTimeCalc1.MSeconds);
end;