Delphi在XE5開始就提供了REST Client的元件,讓開發REST Client應用的開發者能在最短的時間開發出相關的應用,今天就利用臺北市政府資料開放平台中的臺北市旅館資料庫資料來做一個簡單的範例「台北住宿通」。讓大家瞭解Delphi 如何存取json資料,並顯示。
詳細內文請見
CodeData >> Delphi APP 開發入門(十)REST Client 開發
大型網站架構..net 架構師.rabbitMQ.redis.行動開發.APP開發教學.PHP Laravel開發..net core C# 開發.架構師之路.Delphi開發.資料庫程式.進銷存.餐飲POS系統
Delphi在XE5開始就提供了REST Client的元件,讓開發REST Client應用的開發者能在最短的時間開發出相關的應用,今天就利用臺北市政府資料開放平台中的臺北市旅館資料庫資料來做一個簡單的範例「台北住宿通」。讓大家瞭解Delphi 如何存取json資料,並顯示。
詳細內文請見
CodeData >> Delphi APP 開發入門(十)REST Client 開發
如何直接利用Delphi建立有password的access mdb database?
[pascal]
Use System.Win.ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var cnewmdb:variant;
begin
// 透過ADOX建立
cnewmdb := CreateOleObject(‘ADOX.Catalog’);
cnewmdb.Create(‘Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test.MDB;Jet OLEDB:Database Password=”12345678”;’ );
// 連線
ADOConnection1.ConnectionString:=’Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\TT2.MDB;Jet OLEDB:Database Password=”12345678”;’;
ADOConnection1.LoginPrompt:=false;
ADOConnection1.connected:=true;
end;
[/pascal]
許多朋友選擇自己創業做老闆時,最常見的創業就是餐飲業為主的方式。無論是自行創業或是加盟,都需要軟硬體設備及架構,當然也有許多人會評估使用餐飲POS系統。
餐飲POS系統依結帳流程不同主要分為先結帳及後結帳二種版本。先結帳版本常見於飲料店或一般早餐店;而後結帳版本主要於餐廳為主。而使用POS系統主要的原因除了提高點餐的正確性、便利性,也可以方便以電腦做管理以及瞭解營業狀況等分析。
目前POS系統價格平均一套在50,000元上下,一套系統大約包含1、POS主機一部 2、出單機 3、標籤機 4、發票機 5、錢櫃 6、餐飲系統軟體。而除了買斷外,亦有每月3000元月租方案的POS系統商。當然除了期初的硬體成本外,出單機、標籤機、發票機也會有耗材(紙張、碳粉)的成本。以及每年與系統廠商的維護合約。
在Delphi下如何取得fastreport的元件及做值的修改?
[pascal]
var i:integer;
begin
frxreport1.LoadFromFile(‘test.fr3’);
frxreport1.Report.PrintOptions.Printer := ‘Adobe PDF’;
for i:=0 to frxreport1.ComponentCount -1 do begin //取得報表內所有物件
if frxreport1.Components[i].ClassName = ‘TfrxMemoView’ then begin // 找到TfrxMemoView
//ExtractFileName(frxreport1.FileName); 取得目前報表名稱
//frxreport1.Components[i].Name; 取得元件名稱
Tfrxmemoview(frxreport1.Components[i]).Text := ‘hello world’;
end;
end;
frxreport1.Report.PrintOptions.ShowDialog := false; // 不顯示對話框
frxreport1.Report.ShowProgress := False; // 不顯示列印進度
frxReport1.PrintOptions.Copies:=3; // 列印份數
frxreport1.Report.PrepareReport(true);
frxreport1.Print;
// 線上編輯報表
// frxreport1.DesignReport;
end;
[/pascal]
研討會內容:
XE7 持續強化 D2D,M2M 的功能,XE7 加入了支援藍牙和低耗電藍牙 (BLE),讓 App Tethering 可同時支持 WIFI 和藍芽。 XE7 的 FireMonkey 也再次進化並支援更多的強大功能,例如支援多螢幕顯示,支援 Immersive full-screen 模式,支援更多的 iOS 原生控制項等。XE7 的 IDE 也獲得了強化,例如支援 GIT 版本控制,新的專案管理員功能,加強的 Data Explorer 和許多其他新的功能。
“持續進化的完美” 是 RAD Studio XE7 的寫照,“持續強化的生產力” 是 RAD Studio XE7 的承諾。我們敬邀您一起來見證 XE7 再次令人驚嘆的進步,讓您在開發的領域中永遠遙遙領先。
同時我們將展示許多應用實例,包括整合各式硬體裝置廠商提供 .so 及 .jar 功能 (如:藍芽印表機、iBeacon 室內定位、條碼掃描器…等) 及網路攝影機 (IP Cam) 功能整合實機展示。萬勿錯過,請速報名。
主講人:
李 維 (Embarcadero 大中華區技術總監)
時間:
103 年 8 月 25 日 (一) 2:00~5:00pm (台北)
103 年 8 月 26 日 (二) 2:00~5:00pm (台中)
103 年 8 月 27 日 (三) 2:00~5:00pm (高雄)
103 年 8 月 28 日 (四) 2:00~5:00pm (新竹)
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
在設計餐飲程式時,會遇到外接第二螢幕做為客戶顯示或展示廣告。在Delphi如何撰寫?
判斷系統螢幕數量
[pascal]
screen.MonitorCount
[/pascal]
將畫面移至第N螢幕(第一螢幕為0、第二螢幕為1…..)
[pascal]
self.Top := screen.Monitors[0].Top;
self.left := screen.Monitors[0].left;
[/pascal]
uses System.DateUtils;
[pascal]
// 取得某一天所在的星期一及星期天
procedure TForm1.Button1Click(Sender: TObject);
var dw1,dw7,dnow:tdatetime;
begin
dnow:=StrtoDatetime(edtnow.Text);
dw1:=(StartOfTheWeek(dnow));
edtw1.Text := Datetimetostr(dw1);
dw7:=(Endoftheweek(dnow));
edtw7.Text := Datetimetostr(dw7);
end;
[/pascal]
好久沒更新部落格了!最近正陷入結案地獄中,不過在網路上看到之前曾提過的取餐叫號器的廠商,引進了新的雲端叫號系統。對於餐飲POS系統的服務又更加升級了,可以先電話預約訂購後,再透過網路知道目前的叫號,在接近時再繞過去拿就行了!這也可以運用在醫療系統上,在預約掛號後,知道目前的叫號號碼。分享給大家!
早上看到大陸網友留言發問,在Delphi的VCL架構中,只要Screen.Fonts就可以取得系統的字型列表,那在FMX(FireMonkey)架構裡沒有Screen.Fonts,該如何取得系統的字型列表呢?壽山做了一個簡單的程式做回應跟說明囉:)
首先我們新增一個FireMonkey Desktop Application專案
接著在畫面上放三個元件,Listbox、Label以及Button
首先,在Uses的下面加上
{$IFDEF MACOS} MacApi.Appkit,Macapi.CoreFoundation, Macapi.Foundation, {$ENDIF} {$IFDEF MSWINDOWS} Winapi.Messages, Winapi.Windows, {$ENDIF}
接著我們要寫一個CollectFonts的函數,讓程式在不同平台可以抓到字型。
主要運用的技巧是
Mac OS裡的NSFontManager
Windows裡的EnumFontFamiliesEx
{$IFDEF MSWINDOWS} function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric; FontType: Integer; Data: Pointer): Integer; stdcall; var S: TStrings; Temp: string; begin S := TStrings(Data); Temp := LogFont.lfFaceName; if (S.Count = 0) or (AnsiCompareText(S[S.Count-1], Temp) <> 0) then S.Add(Temp); Result := 1; end; {$ENDIF} procedure CollectFonts(FontList: TStringList); var {$IFDEF MACOS} fManager: NsFontManager; list:NSArray; lItem:NSString; {$ENDIF} {$IFDEF MSWINDOWS} DC: HDC; LFont: TLogFont; {$ENDIF} i: Integer; begin {$IFDEF MACOS} fManager := TNsFontManager.Wrap(TNsFontManager.OCClass.sharedFontManager); list := fManager.availableFontFamilies; if (List <> nil) and (List.count > 0) then begin for i := 0 to List.Count-1 do begin lItem := TNSString.Wrap(List.objectAtIndex(i)); FontList.Add(String(lItem.UTF8String)) end; end; {$ENDIF} {$IFDEF MSWINDOWS} DC := GetDC(0); FillChar(LFont, sizeof(LFont), 0); LFont.lfCharset := DEFAULT_CHARSET; EnumFontFamiliesEx(DC, LFont, @EnumFontsProc, Winapi.Windows.LPARAM(FontList), 0); ReleaseDC(0, DC); {$ENDIF} end;
最後在Button1Click事件加上
procedure TForm1.Button1Click(Sender: TObject); var fList: TStringList; i: Integer; begin fList := TStringList.Create; CollectFonts(fList); Label1.Text := '系統字型數量'+ IntToStr(fList.Count); for i := 0 to fList.Count -1 do begin ListBox1.Items.Add(FList[i]); end; fList.Free; end;