-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeed.json
More file actions
194 lines (194 loc) · 158 KB
/
feed.json
File metadata and controls
194 lines (194 loc) · 158 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
{
"version": "https://jsonfeed.org/version/1",
"title": "Grup KPPDI",
"description": "",
"home_page_url": "https://kppdi.github.io",
"feed_url": "https://kppdi.github.io/feed.json",
"user_comment": "",
"icon": "https://kppdi.github.io/media/website/kppdi-headd.png",
"author": {
"name": "Grup KPPDI"
},
"items": [
{
"id": "https://kppdi.github.io/crud-mahasiswa-menggunakan-delphi-dan-ms-access-dengan-adotable-2-pengkodean-1/",
"url": "https://kppdi.github.io/crud-mahasiswa-menggunakan-delphi-dan-ms-access-dengan-adotable-2-pengkodean-1/",
"title": "CRUD Mahasiswa Menggunakan Delphi dan MS Access dengan ADOTable",
"summary": "Video tutorial Database (CRUD) Database Mahasiswa menggunakan Delphi dan Microsoft Access. Part 1: Part 2: Author: Roy Royesta Pampey Original Post",
"content_html": "<p>Video tutorial Database (CRUD) Database Mahasiswa menggunakan Delphi dan Microsoft Access.</p>\n<p><strong>Part 1:</strong></p>\n<p><div class=\"post__iframe\"><iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/SPTWJef98GI\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen=\"allowfullscreen\"></iframe></div></p>\n<p> </p>\n<p><strong>Part 2:</strong></p>\n<figure class=\"post__video\"><iframe loading=\"lazy\" width=\"560\" height=\"314\" src=\"https://www.youtube.com/embed/ydJfXK86nMo?feature=youtu\" allowfullscreen=\"allowfullscreen\" data-mce-fragment=\"1\"></iframe></figure>\n<p> </p>\n<p>Author: <span style=\"color: var(--text-editor-body-color); font-family: var(--font-base); font-size: inherit; font-weight: var(--font-weight-normal);\"><a href=\"https://www.facebook.com/royesta?__cft__[0]=AZUFGl30ajb3dsN3eftwiXtOXxUpUrXlli7z5GGl5fdhdQ8R4FETmjJFdOR3u0oW4mX_DbvzP8SD-WZMu07_dxmjNFE4FKJm9fu7lHy_j4wnYcXpH6CmJ6UW1RZ4wSLB9XPC7O2CBFTQSK8Iu6CAQGp8NELXcigWpc04OXihV9yYztZ6K1NONCbkFDdRp2lX0GM&__tn__=%2Cd-]C%2CP-R\" target=\"_blank\" rel=\"noopener noreferrer\">Roy Royesta Pampey</a></span></p>\n<div class=\"qzhwtbm6 knvmm38d\"> </div>\n<div class=\"qzhwtbm6 knvmm38d\"><a href=\"https://www.facebook.com/groups/kppdi/permalink/10158794089845850/?__cft__[0]=AZUFGl30ajb3dsN3eftwiXtOXxUpUrXlli7z5GGl5fdhdQ8R4FETmjJFdOR3u0oW4mX_DbvzP8SD-WZMu07_dxmjNFE4FKJm9fu7lHy_j4wnYcXpH6CmJ6UW1RZ4wSLB9XPC7O2CBFTQSK8Iu6CAQGp8NELXcigWpc04OXihV9yYztZ6K1NONCbkFDdRp2lX0GM&__tn__=%2CO%2CP-R\" target=\"_blank\" rel=\"noopener noreferrer\">Original Post</a></div>",
"image": "https://kppdi.github.io/media/posts/97/database-schema-1895779_1280-2.png",
"author": {
"name": "Grup KPPDI"
},
"tags": [
"Video",
"Tutorial"
],
"date_published": "2020-08-02T19:43:02+08:00",
"date_modified": "2020-08-02T19:43:02+08:00"
},
{
"id": "https://kppdi.github.io/parsing-json-ke-ttreeview/",
"url": "https://kppdi.github.io/parsing-json-ke-ttreeview/",
"title": "Parsing JSON Ke TTreeView",
"summary": "Misalkan kita punya aplikasi yang memuat JSON dari REST Endpoint, dan kita ingin menampilkannya ke treeview, maka contoh berikut ini dapat digunakan sebagai langkah awal untuk melakukan parsing. Mari kita ikuti langkah-langkahnya: Siapkan satu buah form, pada form tersebut tambahkan satu buah panel, satu buah…",
"content_html": "<p>Misalkan kita punya aplikasi yang memuat JSON dari REST Endpoint, dan kita ingin menampilkannya ke treeview, maka contoh berikut ini dapat digunakan sebagai langkah awal untuk melakukan parsing. Mari kita ikuti langkah-langkahnya:</p>\n<p>Siapkan satu buah form, pada form tersebut tambahkan satu buah panel, satu buah treeview buah dan satu buah memo. Pada panel tambahkan satu buah tombol, dan atur posisi komponen-komponen tersebut seperti contoh gambar berikut:</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/96//Screen-Shot-2020-08-02-at-17.25.20.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.25.20-xs.png 300w ,https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.25.20-sm.png 480w ,https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.25.20-md.png 768w ,https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.25.20-lg.png 1024w ,https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.25.20-xl.png 1360w ,https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.25.20-2xl.png 1600w\" alt=\"\" width=\"1514\" height=\"888\"></figure>\n<p>Kemudian, sebelum coding, perlu disiapkan library yang dibutuhkan, yaitu <strong>SuperObject</strong>, yang merupakan JSON library favorit saya. Library ini sudah disiapkan bersama source code contoh aplikasi ini.</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/96//Screen-Shot-2020-08-02-at-17.32.15.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.32.15-xs.png 300w ,https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.32.15-sm.png 480w ,https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.32.15-md.png 768w ,https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.32.15-lg.png 1024w ,https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.32.15-xl.png 1360w ,https://kppdi.github.io/media/posts/96//responsive/Screen-Shot-2020-08-02-at-17.32.15-2xl.png 1600w\" alt=\"\" width=\"1236\" height=\"542\"></figure>\n<p> </p>\n<p>Untuk menggunakan library tersebut, tambahkan SuperObject.pas ke project:</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/96/Screen-Shot-2020-08-02-at-17.35.04.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.04-xs.png 300w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.04-sm.png 480w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.04-md.png 768w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.04-lg.png 1024w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.04-xl.png 1360w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.04-2xl.png 1600w\" alt=\"\" width=\"1034\" height=\"420\"></figure>\n<p>Dan pilih SuperObject.pas</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/96/Screen-Shot-2020-08-02-at-17.35.27-2.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.27-2-xs.png 300w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.27-2-sm.png 480w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.27-2-md.png 768w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.27-2-lg.png 1024w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.27-2-xl.png 1360w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.35.27-2-2xl.png 1600w\" alt=\"\" width=\"1128\" height=\"900\"></figure>\n<p>Kemudian tambahkan SuperObject ke klausa uses:</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/96/Screen-Shot-2020-08-02-at-17.36.51.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.36.51-xs.png 300w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.36.51-sm.png 480w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.36.51-md.png 768w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.36.51-lg.png 1024w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.36.51-xl.png 1360w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-17.36.51-2xl.png 1600w\" alt=\"\" width=\"1196\" height=\"358\"></figure>\n<p> </p>\n<p>Property Text dari Memo1 dapat diganti dengan default JSON text, misalnya:</p>\n<div>\n<div><code>{</code></div>\n<div><code> \"id\": \"0001\",</code></div>\n<div><code> \"type\": \"donut\",</code></div>\n<div><code> \"name\": \"Cake\",</code></div>\n<div><code> \"ppu\": 0.55,</code></div>\n<div><code> \"batters\":</code></div>\n<div><code> {</code></div>\n<div><code> \"batter\":</code></div>\n<div><code> [</code></div>\n<div><code> { \"id\": \"1001\", \"type\": \"Regular\" },</code></div>\n<div><code> { \"id\": \"1002\", \"type\": \"Chocolate\" },</code></div>\n<div><code> { \"id\": \"1003\", \"type\": \"Blueberry\" },</code></div>\n<div><code> { \"id\": \"1004\", \"type\": \"Devil's Food\" }</code></div>\n<div><code> ]</code></div>\n<div><code> },</code></div>\n<div><code> \"topping\":</code></div>\n<div><code> [</code></div>\n<div><code> { \"id\": \"5001\", \"type\": \"None\" },</code></div>\n<div><code> { \"id\": \"5002\", \"type\": \"Glazed\" },</code></div>\n<div><code> { \"id\": \"5005\", \"type\": \"Sugar\" },</code></div>\n<div><code> { \"id\": \"5007\", \"type\": \"Powdered Sugar\" },</code></div>\n<div><code> { \"id\": \"5006\", \"type\": \"Chocolate with Sprinkles\" },</code></div>\n<div><code> { \"id\": \"5003\", \"type\": \"Chocolate\" },</code></div>\n<div><code> { \"id\": \"5004\", \"type\": \"Maple\" }</code></div>\n<div><code> ]</code></div>\n<div><code>}</code></div>\n</div>\n<p> </p>\n<p>Klik ganda pada tombol caption <strong>Parse</strong>, kemudian isikan kode seperti berikut:</p>\n<p><code>var<br> s, v: string;<br> curv,<br> iso: ISuperObject;<br> item: TSuperObjectIter;<br> tvi: TTreeNode;<br>begin<br> s := Memo1.Text;<br> TreeView1.Items.BeginUpdate;<br> try<br> TreeView1.Items.Clear;<br> tvi := TreeView1.Items.AddFirst(nil, 'Parsed Data:');<br> if (s = '') or (s = '{}') then<br> begin<br> TreeView1.Items.AddChild(tvi, 'Tidak ada data...');<br> end<br> else<br> begin<br> iso := so(s);<br> ParseItemsIntoTreeView(tvi, iso);<br> end;<br> finally<br> TreeView1.Items.EndUpdate;<br> TreeView1.Items[0].Expand(false);<br> TreeView1.Items[0].MakeVisible;<br> end;<br>end;</code></p>\n<p>Kode di atas membuat node pertama bernama <strong>tvi</strong> dengan caption \"Parsed Data:\" jika teks pada Memo1 tidak kosong. Teks kemudian diparse ke JSON object pada variabel <strong>iso</strong>:</p>\n<p><code>iso := so(s);</code></p>\n<p>Lalu JSON ini ditelusuri item-itemnya dan dimuat ke treeview dengan menginduk ke node pertama, yaitu <strong>tvi</strong></p>\n<p><code>ParseItemsIntoTreeView(tvi, iso);</code></p>\n<p>Berikut fungsi parse JSON ke treeview:</p>\n<p><code>procedure TForm1.ParseItemsIntoTreeView(<br> node: TTreeNode; itemData: ISuperObject);<br>var<br> curv: ISuperObject;<br> cura: TSuperArray;<br> item: TSuperObjectIter;<br> tvi: TTreeNode;<br> s, v, dv: string;<br> i: integer;<br>begin<br> try<br> if ObjectFindFirst(itemData, item) then<br> repeat<br> s := item.key;<br> v := '';<br> if item.val.IsType(stString) then<br> begin<br> v := item.val.AsString;<br> dv := copy(v,1,10);<br> // '2020-06-04'<br> if<br> (length(dv)>=10) and<br> (dv[5] = '-') and (dv[8] = '-') and<br> (_s(_i( copy(dv,1,4) ,0)) = copy(dv,1,4)) and<br> (_s(_i( copy(dv,6,2) ,0),2) = copy(dv,6,2)) and<br> (_s(_i( copy(dv,9,2) ,0),2) = copy(dv,9,2))<br> then<br> begin<br> TreeView1.Items.AddChild(<br> node,<br> s+': '+DateIndoShort(DateFromSQL(dv))+' '+<br> copy(v,11,length(v))<br> )<br><br> end<br> else<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stBoolean) then<br> begin<br> v := BoolToStr(item.val.AsBoolean, true);<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stInt) then<br> begin<br> v := FloatToStr( item.val.AsInteger);<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stDouble) then<br> begin<br> v := FloatToStr( item.val.AsDouble);<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stCurrency) then<br> begin<br> v := FloatToStr (item.val.AsCurrency);<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stNull) then<br> begin<br> v := '';<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stObject) then<br> begin<br> v := item.val.AsString();<br> tvi := TreeView1.Items.AddChild(node, s+':');<br> ParseItemsIntoTreeView(tvi, item.val);<br> end<br> else<br> if item.val.IsType(stArray) then<br> begin<br> v := item.val.AsString();<br> cura := item.val.AsArray;<br> tvi := TreeView1.Items.AddChild(node, s+':');<br> for i := 0 to cura.Length-1 do<br> begin<br> ParseItemsIntoTreeView(<br> TreeView1.Items.AddChild(tvi, _s(i+1)+'.:'),<br> cura[i]<br> );<br> end;<br> end;<br> until not ObjectFindNext(item);<br> finally<br><br> end;<br>end;</code></p>\n<p> </p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/96/Screen-Shot-2020-08-02-at-18.10.56.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-18.10.56-xs.png 300w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-18.10.56-sm.png 480w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-18.10.56-md.png 768w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-18.10.56-lg.png 1024w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-18.10.56-xl.png 1360w ,https://kppdi.github.io/media/posts/96/responsive/Screen-Shot-2020-08-02-at-18.10.56-2xl.png 1600w\" alt=\"\" width=\"1622\" height=\"1054\"></figure>\n<p> </p>\n<p>Beberapa fungsi bantu dapat Anda lihat pada listing lengkap berikut:</p>\n<p><code>unit Unit1;<br><br>interface<br><br>uses<br> Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,<br> System.Classes, Vcl.Graphics,<br> Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,<br> Vcl.ExtCtrls, Vcl.ComCtrls, SuperObject;<br><br>type<br> TForm1 = class(TForm)<br> Memo1: TMemo;<br> TreeView1: TTreeView;<br> Panel1: TPanel;<br> Button2: TButton;<br> procedure Button2Click(Sender: TObject);<br> private<br> { Private declarations }<br> procedure ParseItemsIntoTreeView(node: TTreeNode; itemData: ISuperObject);<br> function _s(i: integer; padLeftWith0Count: integer = 0): string;<br> function _i(s: String; default: integer = 0): Integer;<br> function DateFromSQL(const ASQLDate: String): TDateTime;<br> function DateIndoShort (const ADate: TDate):String;<br> public<br> { Public declarations }<br> end;<br><br>var<br> Form1: TForm1;<br><br>implementation<br><br>{$R *.dfm}<br><br>procedure TForm1.Button2Click(Sender: TObject);<br>var<br> s, v: string;<br> curv,<br> iso: ISuperObject;<br> item: TSuperObjectIter;<br> tvi: TTreeNode;<br>begin<br> s := Memo1.Text;<br> TreeView1.Items.BeginUpdate;<br> try<br> TreeView1.Items.Clear;<br> tvi := TreeView1.Items.AddFirst(nil, 'Parsed Data:');<br> tvi.ImageIndex := 0;<br> if (s = '') or (s = '{}') then<br> begin<br> TreeView1.Items.AddChild(tvi, 'Tidak ada data...').ImageIndex := 5;<br> end<br> else<br> begin<br> iso := so(s);<br> ParseItemsIntoTreeView(tvi, iso);<br> end;<br> finally<br> TreeView1.Items.EndUpdate;<br> TreeView1.Items[0].Expand(false);<br> TreeView1.Items[0].MakeVisible;<br> end;<br>end;<br><br>function TForm1.DateFromSQL(const ASQLDate: String): TDateTime;<br>begin<br> try<br> Result := EncodeDate(<br> _i(Copy(ASQLDate,1,4)),<br> _i(Copy(ASQLDate,6,2)),<br> _i(Copy(ASQLDate,9,2))<br> );<br> except<br> Result := Date();<br> end;<br>end;<br><br>function TForm1.DateIndoShort(const ADate: TDate): String;<br>begin<br> Result := FormatDateTime('dd/MM/yyyy', ADate);<br>end;<br><br>procedure TForm1.ParseItemsIntoTreeView(<br> node: TTreeNode; itemData: ISuperObject);<br>var<br> curv: ISuperObject;<br> cura: TSuperArray;<br> item: TSuperObjectIter;<br> tvi: TTreeNode;<br> s, v, dv: string;<br> i: integer;<br>begin<br> try<br> if ObjectFindFirst(itemData, item) then<br> repeat<br> s := item.key;<br> v := '';<br> if item.val.IsType(stString) then<br> begin<br> v := item.val.AsString;<br> dv := copy(v,1,10);<br> // '2020-06-04'<br> if<br> (length(dv)>=10) and<br> (dv[5] = '-') and (dv[8] = '-') and<br> (_s(_i( copy(dv,1,4) ,0)) = copy(dv,1,4)) and<br> (_s(_i( copy(dv,6,2) ,0),2) = copy(dv,6,2)) and<br> (_s(_i( copy(dv,9,2) ,0),2) = copy(dv,9,2))<br> then<br> begin<br> TreeView1.Items.AddChild(<br> node,<br> s+': '+DateIndoShort(DateFromSQL(dv))+' '+<br> copy(v,11,length(v))<br> )<br><br> end<br> else<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stBoolean) then<br> begin<br> v := BoolToStr(item.val.AsBoolean, true);<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stInt) then<br> begin<br> v := FloatToStr( item.val.AsInteger);<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stDouble) then<br> begin<br> v := FloatToStr( item.val.AsDouble);<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stCurrency) then<br> begin<br> v := FloatToStr (item.val.AsCurrency);<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stNull) then<br> begin<br> v := '';<br> TreeView1.Items.AddChild(node, s+': '+v)<br> end<br> else<br> if item.val.IsType(stObject) then<br> begin<br> v := item.val.AsString();<br> tvi := TreeView1.Items.AddChild(node, s+':');<br> ParseItemsIntoTreeView(tvi, item.val);<br> end<br> else<br> if item.val.IsType(stArray) then<br> begin<br> v := item.val.AsString();<br> cura := item.val.AsArray;<br> tvi := TreeView1.Items.AddChild(node, s+':');<br> for i := 0 to cura.Length-1 do<br> begin<br> ParseItemsIntoTreeView(<br> TreeView1.Items.AddChild(tvi, _s(i+1)+'.:'),<br> cura[i]<br> );<br> end;<br> end;<br> until not ObjectFindNext(item);<br> finally<br><br> end;<br>end;<br><br>function TForm1._i(s: String; default: integer = 0): Integer;<br>begin<br> Result := StrToIntDef(s, default);<br>end;<br><br>function TForm1._s(i: integer; padLeftWith0Count: integer = 0): string;<br>begin<br> Result := IntToStr(i);<br> if padLeftWith0Count> 0 then<br> begin<br> while length(Result)<padLeftWith0Count do<br> Result := '0' + Result;<br> end;<br>end;<br><br>end.<br></code></p>\n<p> </p>\n<p>Source code dapat diunduh di<br><a href=\"https://github.com/kppdi/ParseJSONToTreeView\" target=\"_blank\" rel=\"noopener noreferrer\">https://github.com/kppdi/ParseJSONToTreeView</a></p>\n<p><code></code><code></code></p>",
"image": "https://kppdi.github.io/media/posts/96/analytics-3088958_1280.jpg",
"author": {
"name": "Grup KPPDI"
},
"tags": [
"Tutorial",
"Sample App",
"Delphi"
],
"date_published": "2020-08-02T19:43:02+08:00",
"date_modified": "2020-08-02T19:43:02+08:00"
},
{
"id": "https://kppdi.github.io/resize-gambar-jpg-and-bmp-menggunakan-delphi/",
"url": "https://kppdi.github.io/resize-gambar-jpg-and-bmp-menggunakan-delphi/",
"title": "Resize Gambar (JPG & BMP) Menggunakan Delphi",
"summary": "Kadang kita dihadapkan dengan kasus tertentu, di mana kita harus mengubah ukuran gambar menjadi lebah besar atau lebih kecil sesuai skala yang diberikan. Nah, untuk jenis gambar JPG dan BMP, kita dapat lengsung menggunakan Windows API StretchBlt() untuk melakukan tugas ini. Berikut contoh kodenya. Potongan…",
"content_html": "<p>Kadang kita dihadapkan dengan kasus tertentu, di mana kita harus mengubah ukuran gambar menjadi lebah besar atau lebih kecil sesuai skala yang diberikan. Nah, untuk jenis gambar JPG dan BMP, kita dapat lengsung menggunakan Windows API StretchBlt() untuk melakukan tugas ini. Berikut contoh kodenya.</p>\n<p><span id=\"more-1003\"></span>Potongan kode berikut akan kita gunakan untuk mengubah ukuran gambar. Dalam contoh kita, hanya pembesaran gambar yang diberikan. Tentu saja Anda dapat membuat sendiri pengecilan gambar dengan mengubah parameter ScaleFactor menjadi bernilai antara nol dan 1.</p>\n<p> </p>\n<div class=\"line number1 index0 alt2\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">TForm3</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">ResizeImg(Img: TImage; </code><code class=\"delphi keyword\">const</code> <code class=\"delphi plain\">ScaleFactor: </code><code class=\"delphi keyword\">Integer</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi keyword\">const</code> <code class=\"delphi plain\">ImgType: </code><code class=\"delphi keyword\">String</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi keyword\">var</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">SrcBmp, TrgBmp: TBitmap;</code></div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi plain\">W, H, NewW, NewH: </code><code class=\"delphi keyword\">Integer</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi plain\">Jpg: TJPEGImage;</code></div>\n<div class=\"line number7 index6 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number8 index7 alt1\"><code class=\"delphi comments\">//before resize the image, we have to make sure it is a Bitmap.</code></div>\n<div class=\"line number9 index8 alt2\"><code class=\"delphi comments\">//If it is JPEG, we've got to convert it to Bitmap. If it is any type</code></div>\n<div class=\"line number10 index9 alt1\"><code class=\"delphi comments\">//else, do not resize.</code></div>\n<div class=\"line number11 index10 alt2\"><code class=\"delphi keyword\">if</code> <code class=\"delphi plain\">(ImgType<></code><code class=\"delphi string\">'.BMP'</code><code class=\"delphi plain\">) </code><code class=\"delphi keyword\">and</code> <code class=\"delphi plain\">(ImgType<></code><code class=\"delphi string\">'.JPG'</code><code class=\"delphi plain\">) </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number12 index11 alt1\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number13 index12 alt2\"><code class=\"delphi keyword\">raise</code> <code class=\"delphi plain\">Exception</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create(</code><code class=\"delphi string\">'Sorry. Image type is not supported.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number14 index13 alt1\"><code class=\"delphi plain\">exit;</code></div>\n<div class=\"line number15 index14 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number16 index15 alt1\"><code class=\"delphi plain\">SrcBmp := TBitmap</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number17 index16 alt2\"><code class=\"delphi plain\">TrgBmp := TBitmap</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number18 index17 alt1\"> </div>\n<div class=\"line number19 index18 alt2\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number20 index19 alt1\"><code class=\"delphi plain\">SrcBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Assign(Img</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Graphic );</code></div>\n<div class=\"line number21 index20 alt2\"><code class=\"delphi plain\">W := SrcBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Width;</code></div>\n<div class=\"line number22 index21 alt1\"><code class=\"delphi plain\">H := SrcBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Height;</code></div>\n<div class=\"line number23 index22 alt2\"><code class=\"delphi plain\">NewW := W * ScaleFactor;</code></div>\n<div class=\"line number24 index23 alt1\"><code class=\"delphi plain\">NewH := H * ScaleFactor;</code></div>\n<div class=\"line number25 index24 alt2\"><code class=\"delphi plain\">TrgBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Width := NewW;</code></div>\n<div class=\"line number26 index25 alt1\"><code class=\"delphi plain\">TrgBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Height := NewH;</code></div>\n<div class=\"line number27 index26 alt2\"> </div>\n<div class=\"line number28 index27 alt1\"><code class=\"delphi keyword\">if</code> <code class=\"delphi keyword\">not</code> <code class=\"delphi plain\">StretchBlt(TrgBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Canvas</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Handle, </code><code class=\"delphi value\">0</code><code class=\"delphi plain\">,</code><code class=\"delphi value\">0</code><code class=\"delphi plain\">,</code></div>\n<div class=\"line number29 index28 alt2\"><code class=\"delphi plain\">NewW, NewH, SrcBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Canvas</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Handle, </code><code class=\"delphi value\">0</code><code class=\"delphi plain\">,</code><code class=\"delphi value\">0</code><code class=\"delphi plain\">,</code></div>\n<div class=\"line number30 index29 alt1\"><code class=\"delphi plain\">W, H, SRCCOPY) </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number31 index30 alt2\"><code class=\"delphi keyword\">raise</code> <code class=\"delphi plain\">Exception</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create(</code><code class=\"delphi string\">'Scale failed: '</code><code class=\"delphi plain\">+ SysErrorMessage(GetLastError()))</code></div>\n<div class=\"line number32 index31 alt1\"><code class=\"delphi keyword\">else</code></div>\n<div class=\"line number33 index32 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number34 index33 alt1\"><code class=\"delphi keyword\">if</code> <code class=\"delphi plain\">ImgType = </code><code class=\"delphi string\">'.JPG'</code> <code class=\"delphi keyword\">then</code></div>\n<div class=\"line number35 index34 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number36 index35 alt1\"><code class=\"delphi plain\">Jpg := TJPEGImage</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number37 index36 alt2\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number38 index37 alt1\"><code class=\"delphi plain\">Jpg</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Assign(TrgBmp);</code></div>\n<div class=\"line number39 index38 alt2\"><code class=\"delphi plain\">Img</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Graphic</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Assign(Jpg);</code></div>\n<div class=\"line number40 index39 alt1\"><code class=\"delphi keyword\">finally</code></div>\n<div class=\"line number41 index40 alt2\"><code class=\"delphi plain\">Jpg</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Free;</code></div>\n<div class=\"line number42 index41 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number43 index42 alt2\"><code class=\"delphi keyword\">end</code></div>\n<div class=\"line number44 index43 alt1\"><code class=\"delphi keyword\">else</code></div>\n<div class=\"line number45 index44 alt2\"><code class=\"delphi plain\">Img</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Graphic</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Assign(TrgBmp);</code></div>\n<div class=\"line number46 index45 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number47 index46 alt2\"><code class=\"delphi keyword\">finally</code></div>\n<div class=\"line number48 index47 alt1\"><code class=\"delphi plain\">SrcBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Free;</code></div>\n<div class=\"line number49 index48 alt2\"><code class=\"delphi plain\">TrgBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Free;</code></div>\n<div class=\"line number50 index49 alt1\"><code class=\"delphi plain\">Img</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Refresh;</code></div>\n<div class=\"line number51 index50 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number52 index51 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div> </div>\n<div>\n<p>Nah, itu saja kodenya. Sebenarnya hanya perlu sekitar 5 bbaris saja, tapi karena kita harus mengkonversi antara JPG dan Bitmap, maka jadinya agak panjang.</p>\n<p>Sekarang kita coba gunakan kode di atas:</p>\n<p> </p>\n<div class=\"line number1 index0 alt2\"><code class=\"delphi plain\">ResizeImg(Image1, SpinEdit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Value, CURRENT_IMG_TYPE);</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi plain\">Edit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := IntToStr(Image1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Width) ;</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi plain\">Edit2</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := IntToStr(Image1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Height) ;</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">ShowMessage(</code><code class=\"delphi string\">'The image has been scaled.'</code><code class=\"delphi plain\">);</code></div>\n<div> </div>\n<div>\n<p>Di mana parameter Image1 adalah komponen TImage yang akan diubah ukuran gambarnya, SpinEdit1.Value menjadi ScaleFactor (skala) pengubahan ukuran dan CURRENT_IMG_TYPE berisi ‘.JPG’ atau ‘.BMP’ sesuai dengan file gambar yang dipilih oleh user.</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/5/scalimg-codegear-delphi-for-microsoft-windows-umain_2011-06-24_00-25-29.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain_2011-06-24_00-25-29-xs.png 300w ,https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain_2011-06-24_00-25-29-sm.png 480w ,https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain_2011-06-24_00-25-29-md.png 768w ,https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain_2011-06-24_00-25-29-lg.png 1024w ,https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain_2011-06-24_00-25-29-xl.png 1360w ,https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain_2011-06-24_00-25-29-2xl.png 1600w\" alt=\"\" width=\"494\" height=\"334\"></figure>\n<p>Image1 harus telah berisi gambar. Sedangkan CURRENT_IMG_TYPE harus dideklarasikan menjadi variabel global. Saya mendeklarasikannya segera setelah klause <strong>implementation</strong>.</p>\n<p> </p>\n<div>\n<div id=\"highlighter_5367\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi keyword\">implementation</code></div>\n<div class=\"line number2 index1 alt1\"> </div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi color1\">{$R *.dfm}</code></div>\n<div class=\"line number4 index3 alt1\"> </div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi keyword\">var</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi plain\">CURRENT_IMG_TYPE : </code><code class=\"delphi keyword\">String</code><code class=\"delphi plain\">;</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Berikut kode untuk memilih file gambar:</p>\n<div>\n<div id=\"highlighter_180728\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n<div class=\"line number5 index4 alt2\">5</div>\n<div class=\"line number6 index5 alt1\">6</div>\n<div class=\"line number7 index6 alt2\">7</div>\n<div class=\"line number8 index7 alt1\">8</div>\n<div class=\"line number9 index8 alt2\">9</div>\n<div class=\"line number10 index9 alt1\">10</div>\n<div class=\"line number11 index10 alt2\">11</div>\n<div class=\"line number12 index11 alt1\">12</div>\n<div class=\"line number13 index12 alt2\">13</div>\n<div class=\"line number14 index13 alt1\">14</div>\n<div class=\"line number15 index14 alt2\">15</div>\n<div class=\"line number16 index15 alt1\">16</div>\n<div class=\"line number17 index16 alt2\">17</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">TForm3</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Button1Click(Sender: TObject);</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi plain\">OpenPictureDialog1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Filter := </code><code class=\"delphi string\">'Bitmap (*.bmp)|*.bmp|JPEG Files (*.jpg)|*.jpg'</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">OpenPictureDialog1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">FilterIndex := </code><code class=\"delphi value\">1</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi keyword\">if</code> <code class=\"delphi keyword\">not</code> <code class=\"delphi plain\">OpenPictureDialog1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Execute(Handle) </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi plain\">exit;</code></div>\n<div class=\"line number7 index6 alt2\"><code class=\"delphi plain\">CURRENT_IMG_TYPE := UpperCase(ExtractFileExt(OpenPictureDialog1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">FileName));</code></div>\n<div class=\"line number8 index7 alt1\"><code class=\"delphi comments\">//ShowMessage(CURRENT_IMG_TYPE);</code></div>\n<div class=\"line number9 index8 alt2\"><code class=\"delphi keyword\">if</code> <code class=\"delphi plain\">(CURRENT_IMG_TYPE<></code><code class=\"delphi string\">'.BMP'</code><code class=\"delphi plain\">) </code><code class=\"delphi keyword\">and</code> <code class=\"delphi plain\">(CURRENT_IMG_TYPE<></code><code class=\"delphi string\">'.JPG'</code><code class=\"delphi plain\">) </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number10 index9 alt1\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number11 index10 alt2\"><code class=\"delphi keyword\">raise</code> <code class=\"delphi plain\">Exception</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create(</code><code class=\"delphi string\">'Sorry. Invalid image type was selected.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number12 index11 alt1\"><code class=\"delphi plain\">exit;</code></div>\n<div class=\"line number13 index12 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number14 index13 alt1\"><code class=\"delphi plain\">Image1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">LoadFromFile(OpenPictureDialog1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">FileName);</code></div>\n<div class=\"line number15 index14 alt2\"><code class=\"delphi plain\">Edit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := IntToStr(Image1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Width) ;</code></div>\n<div class=\"line number16 index15 alt1\"><code class=\"delphi plain\">Edit2</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := IntToStr(Image1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Height) ;</code></div>\n<div class=\"line number17 index16 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Kode selengkapnya sebagai berikut:</p>\n<div>\n<div id=\"highlighter_163924\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n<div class=\"line number5 index4 alt2\">5</div>\n<div class=\"line number6 index5 alt1\">6</div>\n<div class=\"line number7 index6 alt2\">7</div>\n<div class=\"line number8 index7 alt1\">8</div>\n<div class=\"line number9 index8 alt2\">9</div>\n<div class=\"line number10 index9 alt1\">10</div>\n<div class=\"line number11 index10 alt2\">11</div>\n<div class=\"line number12 index11 alt1\">12</div>\n<div class=\"line number13 index12 alt2\">13</div>\n<div class=\"line number14 index13 alt1\">14</div>\n<div class=\"line number15 index14 alt2\">15</div>\n<div class=\"line number16 index15 alt1\">16</div>\n<div class=\"line number17 index16 alt2\">17</div>\n<div class=\"line number18 index17 alt1\">18</div>\n<div class=\"line number19 index18 alt2\">19</div>\n<div class=\"line number20 index19 alt1\">20</div>\n<div class=\"line number21 index20 alt2\">21</div>\n<div class=\"line number22 index21 alt1\">22</div>\n<div class=\"line number23 index22 alt2\">23</div>\n<div class=\"line number24 index23 alt1\">24</div>\n<div class=\"line number25 index24 alt2\">25</div>\n<div class=\"line number26 index25 alt1\">26</div>\n<div class=\"line number27 index26 alt2\">27</div>\n<div class=\"line number28 index27 alt1\">28</div>\n<div class=\"line number29 index28 alt2\">29</div>\n<div class=\"line number30 index29 alt1\">30</div>\n<div class=\"line number31 index30 alt2\">31</div>\n<div class=\"line number32 index31 alt1\">32</div>\n<div class=\"line number33 index32 alt2\">33</div>\n<div class=\"line number34 index33 alt1\">34</div>\n<div class=\"line number35 index34 alt2\">35</div>\n<div class=\"line number36 index35 alt1\">36</div>\n<div class=\"line number37 index36 alt2\">37</div>\n<div class=\"line number38 index37 alt1\">38</div>\n<div class=\"line number39 index38 alt2\">39</div>\n<div class=\"line number40 index39 alt1\">40</div>\n<div class=\"line number41 index40 alt2\">41</div>\n<div class=\"line number42 index41 alt1\">42</div>\n<div class=\"line number43 index42 alt2\">43</div>\n<div class=\"line number44 index43 alt1\">44</div>\n<div class=\"line number45 index44 alt2\">45</div>\n<div class=\"line number46 index45 alt1\">46</div>\n<div class=\"line number47 index46 alt2\">47</div>\n<div class=\"line number48 index47 alt1\">48</div>\n<div class=\"line number49 index48 alt2\">49</div>\n<div class=\"line number50 index49 alt1\">50</div>\n<div class=\"line number51 index50 alt2\">51</div>\n<div class=\"line number52 index51 alt1\">52</div>\n<div class=\"line number53 index52 alt2\">53</div>\n<div class=\"line number54 index53 alt1\">54</div>\n<div class=\"line number55 index54 alt2\">55</div>\n<div class=\"line number56 index55 alt1\">56</div>\n<div class=\"line number57 index56 alt2\">57</div>\n<div class=\"line number58 index57 alt1\">58</div>\n<div class=\"line number59 index58 alt2\">59</div>\n<div class=\"line number60 index59 alt1\">60</div>\n<div class=\"line number61 index60 alt2\">61</div>\n<div class=\"line number62 index61 alt1\">62</div>\n<div class=\"line number63 index62 alt2\">63</div>\n<div class=\"line number64 index63 alt1\">64</div>\n<div class=\"line number65 index64 alt2\">65</div>\n<div class=\"line number66 index65 alt1\">66</div>\n<div class=\"line number67 index66 alt2\">67</div>\n<div class=\"line number68 index67 alt1\">68</div>\n<div class=\"line number69 index68 alt2\">69</div>\n<div class=\"line number70 index69 alt1\">70</div>\n<div class=\"line number71 index70 alt2\">71</div>\n<div class=\"line number72 index71 alt1\">72</div>\n<div class=\"line number73 index72 alt2\">73</div>\n<div class=\"line number74 index73 alt1\">74</div>\n<div class=\"line number75 index74 alt2\">75</div>\n<div class=\"line number76 index75 alt1\">76</div>\n<div class=\"line number77 index76 alt2\">77</div>\n<div class=\"line number78 index77 alt1\">78</div>\n<div class=\"line number79 index78 alt2\">79</div>\n<div class=\"line number80 index79 alt1\">80</div>\n<div class=\"line number81 index80 alt2\">81</div>\n<div class=\"line number82 index81 alt1\">82</div>\n<div class=\"line number83 index82 alt2\">83</div>\n<div class=\"line number84 index83 alt1\">84</div>\n<div class=\"line number85 index84 alt2\">85</div>\n<div class=\"line number86 index85 alt1\">86</div>\n<div class=\"line number87 index86 alt2\">87</div>\n<div class=\"line number88 index87 alt1\">88</div>\n<div class=\"line number89 index88 alt2\">89</div>\n<div class=\"line number90 index89 alt1\">90</div>\n<div class=\"line number91 index90 alt2\">91</div>\n<div class=\"line number92 index91 alt1\">92</div>\n<div class=\"line number93 index92 alt2\">93</div>\n<div class=\"line number94 index93 alt1\">94</div>\n<div class=\"line number95 index94 alt2\">95</div>\n<div class=\"line number96 index95 alt1\">96</div>\n<div class=\"line number97 index96 alt2\">97</div>\n<div class=\"line number98 index97 alt1\">98</div>\n<div class=\"line number99 index98 alt2\">99</div>\n<div class=\"line number100 index99 alt1\">100</div>\n<div class=\"line number101 index100 alt2\">101</div>\n<div class=\"line number102 index101 alt1\">102</div>\n<div class=\"line number103 index102 alt2\">103</div>\n<div class=\"line number104 index103 alt1\">104</div>\n<div class=\"line number105 index104 alt2\">105</div>\n<div class=\"line number106 index105 alt1\">106</div>\n<div class=\"line number107 index106 alt2\">107</div>\n<div class=\"line number108 index107 alt1\">108</div>\n<div class=\"line number109 index108 alt2\">109</div>\n<div class=\"line number110 index109 alt1\">110</div>\n<div class=\"line number111 index110 alt2\">111</div>\n<div class=\"line number112 index111 alt1\">112</div>\n<div class=\"line number113 index112 alt2\">113</div>\n<div class=\"line number114 index113 alt1\">114</div>\n<div class=\"line number115 index114 alt2\">115</div>\n<div class=\"line number116 index115 alt1\">116</div>\n<div class=\"line number117 index116 alt2\">117</div>\n<div class=\"line number118 index117 alt1\">118</div>\n<div class=\"line number119 index118 alt2\">119</div>\n<div class=\"line number120 index119 alt1\">120</div>\n<div class=\"line number121 index120 alt2\">121</div>\n<div class=\"line number122 index121 alt1\">122</div>\n<div class=\"line number123 index122 alt2\">123</div>\n<div class=\"line number124 index123 alt1\">124</div>\n<div class=\"line number125 index124 alt2\">125</div>\n<div class=\"line number126 index125 alt1\">126</div>\n<div class=\"line number127 index126 alt2\">127</div>\n<div class=\"line number128 index127 alt1\">128</div>\n<div class=\"line number129 index128 alt2\">129</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi keyword\">unit</code> <code class=\"delphi plain\">umain;</code></div>\n<div class=\"line number2 index1 alt1\"> </div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi keyword\">interface</code></div>\n<div class=\"line number4 index3 alt1\"> </div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi keyword\">uses</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi plain\">Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</code></div>\n<div class=\"line number7 index6 alt2\"><code class=\"delphi plain\">Dialogs, StdCtrls, Spin, ExtCtrls, ExtDlgs, JPEG;</code></div>\n<div class=\"line number8 index7 alt1\"> </div>\n<div class=\"line number9 index8 alt2\"><code class=\"delphi keyword\">type</code></div>\n<div class=\"line number10 index9 alt1\"><code class=\"delphi plain\">TForm3 = </code><code class=\"delphi keyword\">class</code><code class=\"delphi plain\">(TForm)</code></div>\n<div class=\"line number11 index10 alt2\"><code class=\"delphi plain\">SpinEdit1: TSpinEdit;</code></div>\n<div class=\"line number12 index11 alt1\"><code class=\"delphi plain\">Edit1: TEdit;</code></div>\n<div class=\"line number13 index12 alt2\"><code class=\"delphi plain\">Edit2: TEdit;</code></div>\n<div class=\"line number14 index13 alt1\"><code class=\"delphi plain\">Label1: TLabel;</code></div>\n<div class=\"line number15 index14 alt2\"><code class=\"delphi plain\">Label2: TLabel;</code></div>\n<div class=\"line number16 index15 alt1\"><code class=\"delphi plain\">Button1: TButton;</code></div>\n<div class=\"line number17 index16 alt2\"><code class=\"delphi plain\">OpenPictureDialog1: TOpenPictureDialog;</code></div>\n<div class=\"line number18 index17 alt1\"><code class=\"delphi plain\">Panel1: TPanel;</code></div>\n<div class=\"line number19 index18 alt2\"><code class=\"delphi plain\">Image1: TImage;</code></div>\n<div class=\"line number20 index19 alt1\"><code class=\"delphi plain\">Label3: TLabel;</code></div>\n<div class=\"line number21 index20 alt2\"><code class=\"delphi plain\">Button2: TButton;</code></div>\n<div class=\"line number22 index21 alt1\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">FormCreate(Sender: TObject);</code></div>\n<div class=\"line number23 index22 alt2\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">Button1Click(Sender: TObject);</code></div>\n<div class=\"line number24 index23 alt1\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">Button2Click(Sender: TObject);</code></div>\n<div class=\"line number25 index24 alt2\"><code class=\"delphi keyword\">private</code></div>\n<div class=\"line number26 index25 alt1\"><code class=\"delphi comments\">{ Private declarations }</code></div>\n<div class=\"line number27 index26 alt2\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">ResizeImg(Img: TImage; </code><code class=\"delphi keyword\">const</code> <code class=\"delphi plain\">ScaleFactor: </code><code class=\"delphi keyword\">Integer</code><code class=\"delphi plain\">; </code><code class=\"delphi keyword\">const</code> <code class=\"delphi plain\">ImgType: </code><code class=\"delphi keyword\">String</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number28 index27 alt1\"><code class=\"delphi keyword\">public</code></div>\n<div class=\"line number29 index28 alt2\"><code class=\"delphi comments\">{ Public declarations }</code></div>\n<div class=\"line number30 index29 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number31 index30 alt2\"> </div>\n<div class=\"line number32 index31 alt1\"><code class=\"delphi keyword\">var</code></div>\n<div class=\"line number33 index32 alt2\"><code class=\"delphi plain\">Form3: TForm3;</code></div>\n<div class=\"line number34 index33 alt1\"> </div>\n<div class=\"line number35 index34 alt2\"><code class=\"delphi keyword\">implementation</code></div>\n<div class=\"line number36 index35 alt1\"> </div>\n<div class=\"line number37 index36 alt2\"><code class=\"delphi color1\">{$R *.dfm}</code></div>\n<div class=\"line number38 index37 alt1\"> </div>\n<div class=\"line number39 index38 alt2\"><code class=\"delphi keyword\">var</code></div>\n<div class=\"line number40 index39 alt1\"><code class=\"delphi plain\">CURRENT_IMG_TYPE : </code><code class=\"delphi keyword\">String</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number41 index40 alt2\"> </div>\n<div class=\"line number42 index41 alt1\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">TForm3</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Button1Click(Sender: TObject);</code></div>\n<div class=\"line number43 index42 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number44 index43 alt1\"><code class=\"delphi plain\">OpenPictureDialog1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Filter := </code><code class=\"delphi string\">'Bitmap (*.bmp)|*.bmp|JPEG Files (*.jpg)|*.jpg'</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number45 index44 alt2\"><code class=\"delphi plain\">OpenPictureDialog1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">FilterIndex := </code><code class=\"delphi value\">1</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number46 index45 alt1\"><code class=\"delphi keyword\">if</code> <code class=\"delphi keyword\">not</code> <code class=\"delphi plain\">OpenPictureDialog1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Execute(Handle) </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number47 index46 alt2\"><code class=\"delphi plain\">exit;</code></div>\n<div class=\"line number48 index47 alt1\"><code class=\"delphi plain\">CURRENT_IMG_TYPE := UpperCase(ExtractFileExt(OpenPictureDialog1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">FileName));</code></div>\n<div class=\"line number49 index48 alt2\"><code class=\"delphi comments\">//ShowMessage(CURRENT_IMG_TYPE);</code></div>\n<div class=\"line number50 index49 alt1\"><code class=\"delphi keyword\">if</code> <code class=\"delphi plain\">(CURRENT_IMG_TYPE<></code><code class=\"delphi string\">'.BMP'</code><code class=\"delphi plain\">) </code><code class=\"delphi keyword\">and</code> <code class=\"delphi plain\">(CURRENT_IMG_TYPE<></code><code class=\"delphi string\">'.JPG'</code><code class=\"delphi plain\">) </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number51 index50 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number52 index51 alt1\"><code class=\"delphi keyword\">raise</code> <code class=\"delphi plain\">Exception</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create(</code><code class=\"delphi string\">'Sorry. Invalid image type was selected.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number53 index52 alt2\"><code class=\"delphi plain\">exit;</code></div>\n<div class=\"line number54 index53 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number55 index54 alt2\"><code class=\"delphi plain\">Image1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">LoadFromFile(OpenPictureDialog1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">FileName);</code></div>\n<div class=\"line number56 index55 alt1\"><code class=\"delphi plain\">Edit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := IntToStr(Image1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Width) ;</code></div>\n<div class=\"line number57 index56 alt2\"><code class=\"delphi plain\">Edit2</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := IntToStr(Image1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Height) ;</code></div>\n<div class=\"line number58 index57 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number59 index58 alt2\"> </div>\n<div class=\"line number60 index59 alt1\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">TForm3</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Button2Click(Sender: TObject);</code></div>\n<div class=\"line number61 index60 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number62 index61 alt1\"><code class=\"delphi plain\">ResizeImg(Image1, SpinEdit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Value, CURRENT_IMG_TYPE);</code></div>\n<div class=\"line number63 index62 alt2\"><code class=\"delphi plain\">Edit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := IntToStr(Image1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Width) ;</code></div>\n<div class=\"line number64 index63 alt1\"><code class=\"delphi plain\">Edit2</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := IntToStr(Image1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Height) ;</code></div>\n<div class=\"line number65 index64 alt2\"><code class=\"delphi plain\">ShowMessage(</code><code class=\"delphi string\">'The image has been scaled.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number66 index65 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number67 index66 alt2\"> </div>\n<div class=\"line number68 index67 alt1\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">TForm3</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">FormCreate(Sender: TObject);</code></div>\n<div class=\"line number69 index68 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number70 index69 alt1\"><code class=\"delphi plain\">SpinEdit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">MinValue := </code><code class=\"delphi value\">2</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number71 index70 alt2\"><code class=\"delphi plain\">SpinEdit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">MaxValue := </code><code class=\"delphi value\">5</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number72 index71 alt1\"><code class=\"delphi comments\">//SpinEdit1.ReadOnly := True;</code></div>\n<div class=\"line number73 index72 alt2\"><code class=\"delphi plain\">SpinEdit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Value := </code><code class=\"delphi value\">2</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number74 index73 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number75 index74 alt2\"> </div>\n<div class=\"line number76 index75 alt1\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">TForm3</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">ResizeImg(Img: TImage; </code><code class=\"delphi keyword\">const</code> <code class=\"delphi plain\">ScaleFactor: </code><code class=\"delphi keyword\">Integer</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number77 index76 alt2\"><code class=\"delphi keyword\">const</code> <code class=\"delphi plain\">ImgType: </code><code class=\"delphi keyword\">String</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number78 index77 alt1\"><code class=\"delphi keyword\">var</code></div>\n<div class=\"line number79 index78 alt2\"><code class=\"delphi plain\">SrcBmp, TrgBmp: TBitmap;</code></div>\n<div class=\"line number80 index79 alt1\"><code class=\"delphi plain\">W, H, NewW, NewH: </code><code class=\"delphi keyword\">Integer</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number81 index80 alt2\"><code class=\"delphi plain\">Jpg: TJPEGImage;</code></div>\n<div class=\"line number82 index81 alt1\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number83 index82 alt2\"><code class=\"delphi comments\">//before resize the image, we have to make sure it is a Bitmap.</code></div>\n<div class=\"line number84 index83 alt1\"><code class=\"delphi comments\">//If it is JPEG, we've got to convert it to Bitmap. If it is any type</code></div>\n<div class=\"line number85 index84 alt2\"><code class=\"delphi comments\">//else, do not resize.</code></div>\n<div class=\"line number86 index85 alt1\"><code class=\"delphi keyword\">if</code> <code class=\"delphi plain\">(ImgType<></code><code class=\"delphi string\">'.BMP'</code><code class=\"delphi plain\">) </code><code class=\"delphi keyword\">and</code> <code class=\"delphi plain\">(ImgType<></code><code class=\"delphi string\">'.JPG'</code><code class=\"delphi plain\">) </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number87 index86 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number88 index87 alt1\"><code class=\"delphi keyword\">raise</code> <code class=\"delphi plain\">Exception</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create(</code><code class=\"delphi string\">'Sorry. Image type is not supported.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number89 index88 alt2\"><code class=\"delphi plain\">exit;</code></div>\n<div class=\"line number90 index89 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number91 index90 alt2\"><code class=\"delphi plain\">SrcBmp := TBitmap</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number92 index91 alt1\"><code class=\"delphi plain\">TrgBmp := TBitmap</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number93 index92 alt2\"> </div>\n<div class=\"line number94 index93 alt1\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number95 index94 alt2\"><code class=\"delphi plain\">SrcBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Assign(Img</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Graphic );</code></div>\n<div class=\"line number96 index95 alt1\"><code class=\"delphi plain\">W := SrcBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Width;</code></div>\n<div class=\"line number97 index96 alt2\"><code class=\"delphi plain\">H := SrcBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Height;</code></div>\n<div class=\"line number98 index97 alt1\"><code class=\"delphi plain\">NewW := W * ScaleFactor;</code></div>\n<div class=\"line number99 index98 alt2\"><code class=\"delphi plain\">NewH := H * ScaleFactor;</code></div>\n<div class=\"line number100 index99 alt1\"><code class=\"delphi plain\">TrgBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Width := NewW;</code></div>\n<div class=\"line number101 index100 alt2\"><code class=\"delphi plain\">TrgBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Height := NewH;</code></div>\n<div class=\"line number102 index101 alt1\"> </div>\n<div class=\"line number103 index102 alt2\"><code class=\"delphi keyword\">if</code> <code class=\"delphi keyword\">not</code> <code class=\"delphi plain\">StretchBlt(TrgBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Canvas</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Handle, </code><code class=\"delphi value\">0</code><code class=\"delphi plain\">,</code><code class=\"delphi value\">0</code><code class=\"delphi plain\">,</code></div>\n<div class=\"line number104 index103 alt1\"><code class=\"delphi plain\">NewW, NewH, SrcBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Canvas</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Handle, </code><code class=\"delphi value\">0</code><code class=\"delphi plain\">,</code><code class=\"delphi value\">0</code><code class=\"delphi plain\">,</code></div>\n<div class=\"line number105 index104 alt2\"><code class=\"delphi plain\">W, H, SRCCOPY) </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number106 index105 alt1\"><code class=\"delphi keyword\">raise</code> <code class=\"delphi plain\">Exception</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create(</code><code class=\"delphi string\">'Scale failed: '</code><code class=\"delphi plain\">+ SysErrorMessage(GetLastError()))</code></div>\n<div class=\"line number107 index106 alt2\"><code class=\"delphi keyword\">else</code></div>\n<div class=\"line number108 index107 alt1\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number109 index108 alt2\"><code class=\"delphi keyword\">if</code> <code class=\"delphi plain\">ImgType = </code><code class=\"delphi string\">'.JPG'</code> <code class=\"delphi keyword\">then</code></div>\n<div class=\"line number110 index109 alt1\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number111 index110 alt2\"><code class=\"delphi plain\">Jpg := TJPEGImage</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number112 index111 alt1\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number113 index112 alt2\"><code class=\"delphi plain\">Jpg</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Assign(TrgBmp);</code></div>\n<div class=\"line number114 index113 alt1\"><code class=\"delphi plain\">Img</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Graphic</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Assign(Jpg);</code></div>\n<div class=\"line number115 index114 alt2\"><code class=\"delphi keyword\">finally</code></div>\n<div class=\"line number116 index115 alt1\"><code class=\"delphi plain\">Jpg</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Free;</code></div>\n<div class=\"line number117 index116 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number118 index117 alt1\"><code class=\"delphi keyword\">end</code></div>\n<div class=\"line number119 index118 alt2\"><code class=\"delphi keyword\">else</code></div>\n<div class=\"line number120 index119 alt1\"><code class=\"delphi plain\">Img</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Picture</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Graphic</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Assign(TrgBmp);</code></div>\n<div class=\"line number121 index120 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number122 index121 alt1\"><code class=\"delphi keyword\">finally</code></div>\n<div class=\"line number123 index122 alt2\"><code class=\"delphi plain\">SrcBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Free;</code></div>\n<div class=\"line number124 index123 alt1\"><code class=\"delphi plain\">TrgBmp</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Free;</code></div>\n<div class=\"line number125 index124 alt2\"><code class=\"delphi plain\">Img</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Refresh;</code></div>\n<div class=\"line number126 index125 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number127 index126 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number128 index127 alt1\"> </div>\n<div class=\"line number129 index128 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">.</code></div>\n</div>\n</td>\n</tr>\n<tr>\n<td>\n<div class=\"line number1 index0 alt2\"> </div>\n</td>\n<td>\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"> </div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Bila dijalankan, kita akan mendapatkan sebuah aplikasi sederhana untuk mengubah ukuran gambar sesuai skala tertentu.</p>\n<figure class=\"post__image\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/5/scalimg-codegear-delphi-for-microsoft-windows-umain-running_2011-06-24_00-26-54.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain-running_2011-06-24_00-26-54-xs.png 300w ,https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain-running_2011-06-24_00-26-54-sm.png 480w ,https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain-running_2011-06-24_00-26-54-md.png 768w ,https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain-running_2011-06-24_00-26-54-lg.png 1024w ,https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain-running_2011-06-24_00-26-54-xl.png 1360w ,https://kppdi.github.io/media/posts/5/responsive/scalimg-codegear-delphi-for-microsoft-windows-umain-running_2011-06-24_00-26-54-2xl.png 1600w\" alt=\"\" width=\"476\" height=\"318\"></figure>\n</div>\n</div>",
"image": "https://kppdi.github.io/media/posts/5/scalimg-codegear-delphi-for-microsoft-windows-umain-running_2011-06-24_00-26-54-2.png",
"author": {
"name": "Grup KPPDI"
},
"tags": [
"Tutorial"
],
"date_published": "2020-08-02T19:43:02+08:00",
"date_modified": "2020-08-02T19:43:02+08:00"
},
{
"id": "https://kppdi.github.io/screen-capture-menggunakan-delphi/",
"url": "https://kppdi.github.io/screen-capture-menggunakan-delphi/",
"title": "Screen Capture Menggunakan Delphi",
"summary": "Atau, yang biasa disebut screen capture. Di Delphi, agar tidak menurunkan kualitas gambar hasil capture/snapshot, biasanya digunakakn TBitmap untuk menampung hasilnya. Nanti baru diubah ke format gambar lain yang diinginkan. Tiap-tiap window di Windows memiliki handlenya sendiri, berupa bilangan bulat bertipe Dword (4 byte). Dekstop…",
"content_html": "<p>Atau, yang biasa disebut screen capture. Di Delphi, agar tidak menurunkan kualitas gambar hasil capture/snapshot, biasanya digunakakn TBitmap untuk menampung hasilnya. Nanti baru diubah ke format gambar lain yang diinginkan.</p>\n<p>Tiap-tiap window di Windows memiliki handlenya sendiri, berupa bilangan bulat bertipe Dword (4 byte). Dekstop pun adalah sebuah window. Bila kita mengetahui handle sebuah window, kita dapat mengambil device context-nya (DC) berupa sebuah handle lain bertipe HDC (Handle of Device Context). Dari handle DC inilah, kita dapat mengcopy isi DC tersebut ke Bitmap.</p>\n<p>Delphi mempermudah kita mengakses dan mengelola DC dengan sebuah class bernama TCanvas. Di atas TCanvas ini kita dapat menggambar, membuat teks, membuat efek-efek visual, ataupun menyalin dari dan ke Canvas lain.</p>\n<p>Berikut potongan kode untuk mengambil handle window Desktop, mengambil handle DC (HDC)-nya dan mengcopynya ke TBitmap, dan menampilkannya pada sebuah TImage di atas Form.</p>\n<div>\n<div id=\"highlighter_472360\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n<div class=\"line number5 index4 alt2\">5</div>\n<div class=\"line number6 index5 alt1\">6</div>\n<div class=\"line number7 index6 alt2\">7</div>\n<div class=\"line number8 index7 alt1\">8</div>\n<div class=\"line number9 index8 alt2\">9</div>\n<div class=\"line number10 index9 alt1\">10</div>\n<div class=\"line number11 index10 alt2\">11</div>\n<div class=\"line number12 index11 alt1\">12</div>\n<div class=\"line number13 index12 alt2\">13</div>\n<div class=\"line number14 index13 alt1\">14</div>\n<div class=\"line number15 index14 alt2\">15</div>\n<div class=\"line number16 index15 alt1\">16</div>\n<div class=\"line number17 index16 alt2\">17</div>\n<div class=\"line number18 index17 alt1\">18</div>\n<div class=\"line number19 index18 alt2\">19</div>\n<div class=\"line number20 index19 alt1\">20</div>\n<div class=\"line number21 index20 alt2\">21</div>\n<div class=\"line number22 index21 alt1\">22</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi keyword\">function</code> <code class=\"delphi plain\">TFMain</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">SnapDesktop: TBitmap;</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi keyword\">var</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi plain\">DC: TCanvas;</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">HDesk: THandle;</code></div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi plain\">HCanvas: HDC;</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi plain\">w, h: </code><code class=\"delphi keyword\">integer</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number7 index6 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number8 index7 alt1\"><code class=\"delphi plain\">HDesk := GetDesktopWindow;</code></div>\n<div class=\"line number9 index8 alt2\"><code class=\"delphi plain\">RefreshDesktop;</code></div>\n<div class=\"line number10 index9 alt1\"><code class=\"delphi plain\">DC:= TCanvas</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number11 index10 alt2\"><code class=\"delphi plain\">Result := TBitmap</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number12 index11 alt1\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number13 index12 alt2\"><code class=\"delphi plain\">dc</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Handle := GetWindowDC(hdesk);</code></div>\n<div class=\"line number14 index13 alt1\"><code class=\"delphi plain\">w := Screen</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Width;</code></div>\n<div class=\"line number15 index14 alt2\"><code class=\"delphi plain\">h := Screen</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Height;</code></div>\n<div class=\"line number16 index15 alt1\"><code class=\"delphi plain\">Result</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Width := w;</code></div>\n<div class=\"line number17 index16 alt2\"><code class=\"delphi plain\">Result</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Height := h;</code></div>\n<div class=\"line number18 index17 alt1\"><code class=\"delphi plain\">BitBlt(Result</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Canvas</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Handle, </code><code class=\"delphi value\">0</code><code class=\"delphi plain\">,</code><code class=\"delphi value\">0</code><code class=\"delphi plain\">,w, h, dc</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Handle, </code><code class=\"delphi value\">0</code><code class=\"delphi plain\">, </code><code class=\"delphi value\">0</code><code class=\"delphi plain\">, SRCCOPY);</code></div>\n<div class=\"line number19 index18 alt2\"><code class=\"delphi keyword\">finally</code></div>\n<div class=\"line number20 index19 alt1\"><code class=\"delphi plain\">DC</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Free;</code></div>\n<div class=\"line number21 index20 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number22 index21 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Pada kode di atas, kita temui beberapa fungsi:</p>\n<ul>\n<li>GetDesktopWindow() untuk mengambil handle desktop Windows.</li>\n<li>GetWindowDC(handleWindow) untuk mengambil handle device context, dalam hal ini desktop Windows.</li>\n<li>BitBlt() untuk mengcopy isi sebuah device context (DC) ke device context lainnya. Dalam contoh di atas, mengcopy dari DC desktop ke DC Bitmap.</li>\n</ul>\n<p>Fungsi SnapDesktop di atas mengembalikan sebuah instance Bitmap yang kemudian dapat ditampilkan ke TImage, di-save ke file, atau diubah ke format gambar lainnya. Dalam contoh ini, Bitmap diubah ke gambar JPG (TJPEGImage) dengan kode berikut:</p>\n<div>\n<div id=\"highlighter_685587\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n<div class=\"line number5 index4 alt2\">5</div>\n<div class=\"line number6 index5 alt1\">6</div>\n<div class=\"line number7 index6 alt2\">7</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi plain\">jpg := TJPEGImage</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi plain\">jpg</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Assign(VariabelBitmap);</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">jpg</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">SaveToFile(NamaFile);</code></div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi keyword\">finally</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi plain\">jpg</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Free;</code></div>\n<div class=\"line number7 index6 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Dalam contoh kode yang tersedia untuk didownload, juga tersedia sebuah fungsi untuk memotong gambar sehingga hanya bagian tertentu saja yang diambil.</p>\n<p>Berikut tampilan contoh aplikasi:</p>\n<div class=\"gallery-wrapper\"><div class=\"gallery\" data-is-empty=\"false\" data-columns=\"4\">\n<figure class=\"gallery__item\"><a href=\"https://kppdi.github.io/media/posts/4/gallery/winsnap-snapping-region.png\" data-size=\"1023x553\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/4/gallery/winsnap-snapping-region-thumbnail.png\" alt=\"\" width=\"720\" height=\"389\"></a></figure>\n<figure class=\"gallery__item\"><a href=\"https://kppdi.github.io/media/posts/4/gallery/winsnap_delphi_snapshot_screen_caputure-2.png\" data-size=\"593x451\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/4/gallery/winsnap_delphi_snapshot_screen_caputure-2-thumbnail.png\" alt=\"\" width=\"593\" height=\"451\"></a></figure>\n<figure class=\"gallery__item\"><a href=\"https://kppdi.github.io/media/posts/4/gallery/winsnap_delphi_snapshot_screen_caputure.png\" data-size=\"593x451\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/4/gallery/winsnap_delphi_snapshot_screen_caputure-thumbnail.png\" alt=\"\" width=\"593\" height=\"451\"></a></figure>\n<figure class=\"gallery__item\"><a href=\"https://kppdi.github.io/media/posts/4/gallery/winsnap-startup-window-2.png\" data-size=\"593x451\"><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/4/gallery/winsnap-startup-window-2-thumbnail.png\" alt=\"\" width=\"593\" height=\"451\"></a></figure>\n</div></div>",
"image": "https://kppdi.github.io/media/posts/4/winsnap_delphi_snapshot_screen_caputure.png",
"author": {
"name": "Grup KPPDI"
},
"tags": [
"Tutorial",
"Sample App"
],
"date_published": "2020-08-02T19:43:02+08:00",
"date_modified": "2020-08-02T19:43:02+08:00"
},
{
"id": "https://kppdi.github.io/save-setting-koneksi-ke-file-ini/",
"url": "https://kppdi.github.io/save-setting-koneksi-ke-file-ini/",
"title": "Save Setting Koneksi ke File INI",
"summary": "Zeos Connection Settings Teman-teman Delphier kerap bertanya, “Bagaimana mengatur aplikasi Delphi-Zeos-MySQL agar dapat berjalan di pc lain tanpa perlu menginstall Delphi di sana?” Di posting tentang koneksi Delphi-Zeos-MySQL, Anda dapat melihat file-file depencies (pendukung) aplikasi baik program Anda maupun MySQL. Kini, giliran setting koneksi yang…",
"content_html": "<div id=\"attachment_1051\" class=\"wp-caption alignleft\" data-shortcode=\"caption\"><a href=\"https://jokorb.files.wordpress.com/2011/08/save01o8s8d0sd.png\"><img loading=\"lazy\" class=\"size-medium wp-image-1051\" style=\"margin: 0px; padding: 0px; border: 0px; font-size: 14px; vertical-align: baseline; max-width: 100%; height: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 4px;\" title=\"save01o8s8d0sd\" src=\"https://jokorb.files.wordpress.com/2011/08/save01o8s8d0sd.png?w=300&h=190\" data-is-external-image=\"true\" sizes=\"(max-width: 300px) 100vw, 300px\" srcset=\"https://jokorb.files.wordpress.com/2011/08/save01o8s8d0sd.png?w=300&h=190 300w, https://jokorb.files.wordpress.com/2011/08/save01o8s8d0sd.png?w=150&h=95 150w, https://jokorb.files.wordpress.com/2011/08/save01o8s8d0sd.png 336w\" alt=\"Zeos Connection Settings\" width=\"300\" height=\"190\" aria-describedby=\"caption-attachment-1051\" data-attachment-id=\"1051\" data-permalink=\"https://jokorb.wordpress.com/2011/08/06/save-setting-koneksi-ke-file-ini/save01o8s8d0sd/\" data-orig-file=\"https://jokorb.files.wordpress.com/2011/08/save01o8s8d0sd.png\" data-orig-size=\"336,213\" data-comments-opened=\"1\" data-image-meta=\"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}\" data-image-title=\"save01o8s8d0sd\" data-image-description=\"<p>Zeos Connection Settings</p>\n\" data-medium-file=\"https://jokorb.files.wordpress.com/2011/08/save01o8s8d0sd.png?w=300\" data-large-file=\"https://jokorb.files.wordpress.com/2011/08/save01o8s8d0sd.png?w=336\"></a>\n<p id=\"caption-attachment-1051\" class=\"wp-caption-text\">Zeos Connection Settings</p>\n</div>\n<p>Teman-teman Delphier kerap bertanya, “Bagaimana mengatur aplikasi Delphi-Zeos-MySQL agar dapat berjalan di pc lain tanpa perlu menginstall Delphi di sana?”</p>\n<p>Di posting tentang <a title=\"Koneksi Delphi, Zeos Dan MySQL\" href=\"http://www.cenadep.org/2008/09/14/koneksi-database-dengan-delphi-mysql-zeos/\" target=\"_blank\" rel=\"noopener\">koneksi Delphi-Zeos-MySQL</a>, Anda dapat melihat file-file depencies (pendukung) aplikasi baik program Anda maupun MySQL.</p>\n<p>Kini, giliran setting koneksi yang akan kita bahas. Mulai dari mengetes koneksi, menyimpannya ke file INI/CFG, sampai membacanya kembali.</p>\n<p><span id=\"more-1050\"></span><strong>MENGETES KONEKSI</strong></p>\n<p>Pertama, kita mengetes koneksi (Zeos) dengan cara seperti berikut:</p>\n<div>\n<div id=\"highlighter_472659\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n<div class=\"line number5 index4 alt2\">5</div>\n<div class=\"line number6 index5 alt1\">6</div>\n<div class=\"line number7 index6 alt2\">7</div>\n<div class=\"line number8 index7 alt1\">8</div>\n<div class=\"line number9 index8 alt2\">9</div>\n<div class=\"line number10 index9 alt1\">10</div>\n<div class=\"line number11 index10 alt2\">11</div>\n<div class=\"line number12 index11 alt1\">12</div>\n<div class=\"line number13 index12 alt2\">13</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi keyword\">if</code> <code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Connected </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Disconnect;</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">HostName := </code><code class=\"delphi string\">'localhost'</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">User := </code><code class=\"delphi string\">'root'</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Password := </code><code class=\"delphi string\">'YOUR_PASSWORD'</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Port := </code><code class=\"delphi value\">3306</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number7 index6 alt2\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Database := </code><code class=\"delphi string\">'simpeg'</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number8 index7 alt1\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number9 index8 alt2\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Connect;</code></div>\n<div class=\"line number10 index9 alt1\"><code class=\"delphi plain\">ShowMessage(</code><code class=\"delphi string\">'Terkoneksi.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number11 index10 alt2\"><code class=\"delphi keyword\">except</code></div>\n<div class=\"line number12 index11 alt1\"><code class=\"delphi plain\">ShowMessage(</code><code class=\"delphi string\">'Gagal koneksi.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number13 index12 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Bila parameter koneksi benar, kita akan mendapatkan pesan seperti berikut:</p>\n<div id=\"attachment_1056\" class=\"wp-caption alignnone\" data-shortcode=\"caption\"><a href=\"https://jokorb.files.wordpress.com/2011/08/save-setting-koneksi-ke-file-ini-c2ab-joko-rivais-delphi-mozilla-firefox_2011-08-10_19-39-03.png\"><img loading=\"lazy\" class=\"size-medium wp-image-1056\" style=\"margin: 0px; padding: 0px; border: 0px; font-size: 14px; vertical-align: baseline; max-width: 100%; height: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 4px;\" title=\"Save Setting Koneksi ke File INI\" src=\"https://jokorb.files.wordpress.com/2011/08/save-setting-koneksi-ke-file-ini-c2ab-joko-rivais-delphi-mozilla-firefox_2011-08-10_19-39-03.png?w=300&h=122\" data-is-external-image=\"true\" sizes=\"(max-width: 300px) 100vw, 300px\" srcset=\"https://jokorb.files.wordpress.com/2011/08/save-setting-koneksi-ke-file-ini-c2ab-joko-rivais-delphi-mozilla-firefox_2011-08-10_19-39-03.png?w=298&h=122 298w, https://jokorb.files.wordpress.com/2011/08/save-setting-koneksi-ke-file-ini-c2ab-joko-rivais-delphi-mozilla-firefox_2011-08-10_19-39-03.png?w=150&h=61 150w, https://jokorb.files.wordpress.com/2011/08/save-setting-koneksi-ke-file-ini-c2ab-joko-rivais-delphi-mozilla-firefox_2011-08-10_19-39-03.png 388w\" alt=\"Save Setting Koneksi ke File INI\" width=\"300\" height=\"122\" aria-describedby=\"caption-attachment-1056\" data-attachment-id=\"1056\" data-permalink=\"https://jokorb.wordpress.com/2011/08/06/save-setting-koneksi-ke-file-ini/save-setting-koneksi-ke-file-ini-%c2%ab-joko-rivais-delphi-mozilla-firefox_2011-08-10_19-39-03/\" data-orig-file=\"https://jokorb.files.wordpress.com/2011/08/save-setting-koneksi-ke-file-ini-c2ab-joko-rivais-delphi-mozilla-firefox_2011-08-10_19-39-03.png\" data-orig-size=\"388,159\" data-comments-opened=\"1\" data-image-meta=\"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}\" data-image-title=\"Save Setting Koneksi ke File INI\" data-image-description=\"<p>Save Setting Koneksi ke File INI. Pesan ini muncul saat pengetesan koneksi berhasil.</p>\n\" data-medium-file=\"https://jokorb.files.wordpress.com/2011/08/save-setting-koneksi-ke-file-ini-c2ab-joko-rivais-delphi-mozilla-firefox_2011-08-10_19-39-03.png?w=300\" data-large-file=\"https://jokorb.files.wordpress.com/2011/08/save-setting-koneksi-ke-file-ini-c2ab-joko-rivais-delphi-mozilla-firefox_2011-08-10_19-39-03.png?w=388\"></a>\n<p id=\"caption-attachment-1056\" class=\"wp-caption-text\">Save Setting Koneksi ke File INI</p>\n</div>\n<p><strong>MENYIMPAN SETTING KONEKSI KE FILE</strong></p>\n<p>Nah, kini kita buat sebuah form baru dengan inputan parameter koneksi:</p>\n<div id=\"attachment_1057\" class=\"wp-caption alignnone\" data-shortcode=\"caption\"><a href=\"https://jokorb.files.wordpress.com/2011/08/desain-form-parameter-koneksi.png\"><img loading=\"lazy\" class=\"size-medium wp-image-1057\" style=\"margin: 0px; padding: 0px; border: 0px; font-size: 14px; vertical-align: baseline; max-width: 100%; height: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 4px;\" title=\"Desain Form Parameter Koneksi\" src=\"https://jokorb.files.wordpress.com/2011/08/desain-form-parameter-koneksi.png?w=300&h=186\" data-is-external-image=\"true\" sizes=\"(max-width: 300px) 100vw, 300px\" srcset=\"https://jokorb.files.wordpress.com/2011/08/desain-form-parameter-koneksi.png?w=300&h=186 300w, https://jokorb.files.wordpress.com/2011/08/desain-form-parameter-koneksi.png?w=150&h=93 150w, https://jokorb.files.wordpress.com/2011/08/desain-form-parameter-koneksi.png 388w\" alt=\"Desain Form Parameter Koneksi\" width=\"300\" height=\"186\" aria-describedby=\"caption-attachment-1057\" data-attachment-id=\"1057\" data-permalink=\"https://jokorb.wordpress.com/2011/08/06/save-setting-koneksi-ke-file-ini/desain-form-parameter-koneksi/\" data-orig-file=\"https://jokorb.files.wordpress.com/2011/08/desain-form-parameter-koneksi.png\" data-orig-size=\"388,241\" data-comments-opened=\"1\" data-image-meta=\"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}\" data-image-title=\"Desain Form Parameter Koneksi\" data-image-description=\"<p>Desain Form Parameter Koneksi</p>\n\" data-medium-file=\"https://jokorb.files.wordpress.com/2011/08/desain-form-parameter-koneksi.png?w=300\" data-large-file=\"https://jokorb.files.wordpress.com/2011/08/desain-form-parameter-koneksi.png?w=388\"></a>\n<p id=\"caption-attachment-1057\" class=\"wp-caption-text\">Desain Form Parameter Koneksi</p>\n</div>\n<p>Di atas, Edit1 (Server Name/IP) telah memiliki nilai default <strong>localhost</strong>, Edit2 telah bernilai default port MySQL <strong>3306</strong>, dan Edit3 (Username) bernilai default <strong>root</strong>.</p>\n<p>Kini kita buat kode untuk menyimpan setting koneksi ke file konfigurasi. Nama file dan ekstensinya terserah Anda. Saya akan menggunakan nama file yang sama dengan nama projek (nama file EXE), menggunakan ekstensi .SAV, sehingga bila nama projek adalah Project1 maka nama file EXE adalah Project1.exe dan nama file konfigurasi koneksi bernama Project1.sav.</p>\n<p>Saatnya koding 🙂</p>\n<p>Format file yang akan kita pakai bukan file INI yang beformat:</p>\n<div>\n<div id=\"highlighter_411340\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi plain\">[SETTINGS]</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi plain\">server=localhost</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi plain\">port=</code><code class=\"delphi value\">3306</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">............. dst.</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Melainkan file berformat flat, yaitu pasangan <strong>nama:nilai</strong>, dengan tanda <strong>titik ganda (:)</strong> sebagai pemisah.</p>\n<div>\n<div id=\"highlighter_520429\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n<div class=\"line number5 index4 alt2\">5</div>\n<div class=\"line number6 index5 alt1\">6</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi plain\">#INI ADALAH KOMENTAR</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi plain\">server=localhost</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi plain\">port=</code><code class=\"delphi value\">3306</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">............. dst.</code></div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi plain\">%INI KOMENTAR</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi comments\">//INI JUGA KOMENTAR</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Klik ganda tombol Save Setting, ketikkan kode seperti berikut:</p>\n<div>\n<div id=\"highlighter_567088\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n<div class=\"line number5 index4 alt2\">5</div>\n<div class=\"line number6 index5 alt1\">6</div>\n<div class=\"line number7 index6 alt2\">7</div>\n<div class=\"line number8 index7 alt1\">8</div>\n<div class=\"line number9 index8 alt2\">9</div>\n<div class=\"line number10 index9 alt1\">10</div>\n<div class=\"line number11 index10 alt2\">11</div>\n<div class=\"line number12 index11 alt1\">12</div>\n<div class=\"line number13 index12 alt2\">13</div>\n<div class=\"line number14 index13 alt1\">14</div>\n<div class=\"line number15 index14 alt2\">15</div>\n<div class=\"line number16 index15 alt1\">16</div>\n<div class=\"line number17 index16 alt2\">17</div>\n<div class=\"line number18 index17 alt1\">18</div>\n<div class=\"line number19 index18 alt2\">19</div>\n<div class=\"line number20 index19 alt1\">20</div>\n<div class=\"line number21 index20 alt2\">21</div>\n<div class=\"line number22 index21 alt1\">22</div>\n<div class=\"line number23 index22 alt2\">23</div>\n<div class=\"line number24 index23 alt1\">24</div>\n<div class=\"line number25 index24 alt2\">25</div>\n<div class=\"line number26 index25 alt1\">26</div>\n<div class=\"line number27 index26 alt2\">27</div>\n<div class=\"line number28 index27 alt1\">28</div>\n<div class=\"line number29 index28 alt2\">29</div>\n<div class=\"line number30 index29 alt1\">30</div>\n<div class=\"line number31 index30 alt2\">31</div>\n<div class=\"line number32 index31 alt1\">32</div>\n<div class=\"line number33 index32 alt2\">33</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">TForm1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Button2Click(Sender: TObject);</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi keyword\">var</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi plain\">NamaFile: </code><code class=\"delphi keyword\">String</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">List: TStringList;</code></div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi comments\">//File berada dalam satu folder dengan aplikasi</code></div>\n<div class=\"line number7 index6 alt2\"><code class=\"delphi plain\">NamaFile := Application</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">ExeName;</code></div>\n<div class=\"line number8 index7 alt1\"><code class=\"delphi comments\">//ganti nama file dengan ekstensi .sav</code></div>\n<div class=\"line number9 index8 alt2\"><code class=\"delphi plain\">NamaFile := ChangeFileExt(NamaFile, </code><code class=\"delphi string\">'.sav'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number10 index9 alt1\"> </div>\n<div class=\"line number11 index10 alt2\"><code class=\"delphi comments\">//Buat List untuk menampung setting koneksi</code></div>\n<div class=\"line number12 index11 alt1\"><code class=\"delphi plain\">List := TStringList</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number13 index12 alt2\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number14 index13 alt1\"><code class=\"delphi comments\">//tentukan tanda \":\" sebagai pemisah nama dan nilai</code></div>\n<div class=\"line number15 index14 alt2\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">NameValueSeparator := </code><code class=\"delphi string\">':'</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number16 index15 alt1\"><code class=\"delphi comments\">//tampung parameter</code></div>\n<div class=\"line number17 index16 alt2\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Add(</code><code class=\"delphi string\">'hostname:'</code> <code class=\"delphi plain\">+ Edit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text);</code></div>\n<div class=\"line number18 index17 alt1\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Add(</code><code class=\"delphi string\">'port:'</code> <code class=\"delphi plain\">+ Edit2</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text);</code></div>\n<div class=\"line number19 index18 alt2\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Add(</code><code class=\"delphi string\">'user:'</code> <code class=\"delphi plain\">+ Edit3</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text);</code></div>\n<div class=\"line number20 index19 alt1\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Add(</code><code class=\"delphi string\">'password:'</code> <code class=\"delphi plain\">+ Edit4</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text);</code></div>\n<div class=\"line number21 index20 alt2\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Add(</code><code class=\"delphi string\">'database:'</code> <code class=\"delphi plain\">+ Edit5</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text);</code></div>\n<div class=\"line number22 index21 alt1\"><code class=\"delphi comments\">//Save ke file</code></div>\n<div class=\"line number23 index22 alt2\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number24 index23 alt1\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">SaveToFile(NamaFile);</code></div>\n<div class=\"line number25 index24 alt2\"><code class=\"delphi plain\">ShowMessage(</code><code class=\"delphi string\">'Setting koneksi tersimpan ke file :'</code><code class=\"delphi plain\">#</code><code class=\"delphi value\">13</code> <code class=\"delphi plain\">+ NamaFile);</code></div>\n<div class=\"line number26 index25 alt1\"><code class=\"delphi keyword\">except</code></div>\n<div class=\"line number27 index26 alt2\"><code class=\"delphi plain\">ShowMessage(</code><code class=\"delphi string\">'Gagal menyimpan seeting koneksi.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number28 index27 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number29 index28 alt2\"><code class=\"delphi keyword\">finally</code></div>\n<div class=\"line number30 index29 alt1\"><code class=\"delphi comments\">//Jangan lupa membebaskan memory</code></div>\n<div class=\"line number31 index30 alt2\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Free;</code></div>\n<div class=\"line number32 index31 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number33 index32 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Kini yang jadi soal, bagaimana jika Edit2 (Port) tidak diisi dengan angka? Kita tambahkan kode untuk mencegahnya. Klik pada Edit2 (Port), dari Object Inspector klik tab Events dan klik ganda pada event OnKeyPress. Masukkan kode:</p>\n<div>\n<div id=\"highlighter_141854\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n<div class=\"line number5 index4 alt2\">5</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">TForm1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Edit2KeyPress(Sender: TObject; </code><code class=\"delphi keyword\">var</code> <code class=\"delphi plain\">Key: </code><code class=\"delphi keyword\">Char</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi keyword\">if</code> <code class=\"delphi keyword\">not</code> <code class=\"delphi plain\">(key </code><code class=\"delphi keyword\">in</code> <code class=\"delphi plain\">[</code><code class=\"delphi string\">'0'</code><code class=\"delphi plain\">..</code><code class=\"delphi string\">'9'</code><code class=\"delphi plain\">,#</code><code class=\"delphi value\">8</code><code class=\"delphi plain\">, Chr(VK_DELETE)]) </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">Key := #</code><code class=\"delphi value\">0</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Klik lagi pada Edit2 (Port) dan property Max Length disi dengan nilai 4, sehingga panjang nilai yang dapat diinput dibatasi sampai 4 digit angka. Ini berguna mencegah integer overflow jika nilai diisi terlalu besar.</p>\n<p>Sampai di sini, silahkan jalankan program Anda dan coba Save Settingnya. Bila berhasil, pesan sukses seperti berikut akan ditampilkan dan sebuah file Project1.sav akan dibuat dalam folder yang sama dengan folder program.</p>\n<div id=\"attachment_1060\" class=\"wp-caption alignnone\" data-shortcode=\"caption\"><a href=\"https://jokorb.files.wordpress.com/2011/08/setting-koneksi-telah-disimpan.png\"><img loading=\"lazy\" class=\"size-medium wp-image-1060\" style=\"margin: 0px; padding: 0px; border: 0px; font-size: 14px; vertical-align: baseline; max-width: 100%; height: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 4px;\" title=\"Setting koneksi telah disimpan\" src=\"https://jokorb.files.wordpress.com/2011/08/setting-koneksi-telah-disimpan.png?w=300&h=182\" data-is-external-image=\"true\" sizes=\"(max-width: 300px) 100vw, 300px\" srcset=\"https://jokorb.files.wordpress.com/2011/08/setting-koneksi-telah-disimpan.png?w=298&h=182 298w, https://jokorb.files.wordpress.com/2011/08/setting-koneksi-telah-disimpan.png?w=150&h=91 150w, https://jokorb.files.wordpress.com/2011/08/setting-koneksi-telah-disimpan.png 387w\" alt=\"Setting koneksi telah disimpan\" width=\"300\" height=\"182\" aria-describedby=\"caption-attachment-1060\" data-attachment-id=\"1060\" data-permalink=\"https://jokorb.wordpress.com/2011/08/06/save-setting-koneksi-ke-file-ini/setting-koneksi-telah-disimpan/\" data-orig-file=\"https://jokorb.files.wordpress.com/2011/08/setting-koneksi-telah-disimpan.png\" data-orig-size=\"387,236\" data-comments-opened=\"1\" data-image-meta=\"{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":""}\" data-image-title=\"Setting koneksi telah disimpan\" data-image-description=\"<p>Setting koneksi telah disimpan</p>\n\" data-medium-file=\"https://jokorb.files.wordpress.com/2011/08/setting-koneksi-telah-disimpan.png?w=300\" data-large-file=\"https://jokorb.files.wordpress.com/2011/08/setting-koneksi-telah-disimpan.png?w=387\"></a>\n<p id=\"caption-attachment-1060\" class=\"wp-caption-text\">Setting koneksi telah disimpan</p>\n</div>\n<p><strong>MEMBACA KONEKSI TERSIMPAN</strong></p>\n<p>Saatnya kuis. Eh, saatnya membaca kembali setting koneksi tadi 🙂</p>\n<p>Langsung saja, klik ganda tombol Load Setting dan masukkan kode:</p>\n<div>\n<div id=\"highlighter_352087\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n<div class=\"line number5 index4 alt2\">5</div>\n<div class=\"line number6 index5 alt1\">6</div>\n<div class=\"line number7 index6 alt2\">7</div>\n<div class=\"line number8 index7 alt1\">8</div>\n<div class=\"line number9 index8 alt2\">9</div>\n<div class=\"line number10 index9 alt1\">10</div>\n<div class=\"line number11 index10 alt2\">11</div>\n<div class=\"line number12 index11 alt1\">12</div>\n<div class=\"line number13 index12 alt2\">13</div>\n<div class=\"line number14 index13 alt1\">14</div>\n<div class=\"line number15 index14 alt2\">15</div>\n<div class=\"line number16 index15 alt1\">16</div>\n<div class=\"line number17 index16 alt2\">17</div>\n<div class=\"line number18 index17 alt1\">18</div>\n<div class=\"line number19 index18 alt2\">19</div>\n<div class=\"line number20 index19 alt1\">20</div>\n<div class=\"line number21 index20 alt2\">21</div>\n<div class=\"line number22 index21 alt1\">22</div>\n<div class=\"line number23 index22 alt2\">23</div>\n<div class=\"line number24 index23 alt1\">24</div>\n<div class=\"line number25 index24 alt2\">25</div>\n<div class=\"line number26 index25 alt1\">26</div>\n<div class=\"line number27 index26 alt2\">27</div>\n<div class=\"line number28 index27 alt1\">28</div>\n<div class=\"line number29 index28 alt2\">29</div>\n<div class=\"line number30 index29 alt1\">30</div>\n<div class=\"line number31 index30 alt2\">31</div>\n<div class=\"line number32 index31 alt1\">32</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">TForm1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Button3Click(Sender: TObject);</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi keyword\">var</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi plain\">NamaFile: </code><code class=\"delphi keyword\">String</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">List: TStringList;</code></div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi comments\">//File berada dalam satu folder dengan aplikasi</code></div>\n<div class=\"line number7 index6 alt2\"><code class=\"delphi plain\">NamaFile := Application</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">ExeName;</code></div>\n<div class=\"line number8 index7 alt1\"><code class=\"delphi comments\">//ganti nama file dengan ekstensi .sav</code></div>\n<div class=\"line number9 index8 alt2\"><code class=\"delphi plain\">NamaFile := ChangeFileExt(NamaFile, </code><code class=\"delphi string\">'.sav'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number10 index9 alt1\"> </div>\n<div class=\"line number11 index10 alt2\"><code class=\"delphi comments\">//Buat List untuk menampung setting koneksi</code></div>\n<div class=\"line number12 index11 alt1\"><code class=\"delphi plain\">List := TStringList</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Create;</code></div>\n<div class=\"line number13 index12 alt2\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number14 index13 alt1\"><code class=\"delphi comments\">//tentukan tanda \":\" sebagai pemisah nama dan nilai</code></div>\n<div class=\"line number15 index14 alt2\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">NameValueSeparator := </code><code class=\"delphi string\">':'</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number16 index15 alt1\"><code class=\"delphi comments\">//Load setting dari ke file</code></div>\n<div class=\"line number17 index16 alt2\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number18 index17 alt1\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">LoadFromFile(NamaFile);</code></div>\n<div class=\"line number19 index18 alt2\"><code class=\"delphi comments\">//tampung parameter</code></div>\n<div class=\"line number20 index19 alt1\"><code class=\"delphi plain\">Edit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Values[</code><code class=\"delphi string\">'hostname'</code><code class=\"delphi plain\">];</code></div>\n<div class=\"line number21 index20 alt2\"><code class=\"delphi plain\">Edit2</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Values[</code><code class=\"delphi string\">'port'</code><code class=\"delphi plain\">] ;</code></div>\n<div class=\"line number22 index21 alt1\"><code class=\"delphi plain\">Edit3</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Values[</code><code class=\"delphi string\">'user'</code><code class=\"delphi plain\">] ;</code></div>\n<div class=\"line number23 index22 alt2\"><code class=\"delphi plain\">Edit4</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Values[</code><code class=\"delphi string\">'password'</code><code class=\"delphi plain\">];</code></div>\n<div class=\"line number24 index23 alt1\"><code class=\"delphi plain\">Edit5</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text := List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Values[</code><code class=\"delphi string\">'database'</code><code class=\"delphi plain\">];</code></div>\n<div class=\"line number25 index24 alt2\"><code class=\"delphi plain\">ShowMessage(</code><code class=\"delphi string\">'Setting koneksi telah di-load dari file :'</code><code class=\"delphi plain\">#</code><code class=\"delphi value\">13</code> <code class=\"delphi plain\">+ NamaFile);</code></div>\n<div class=\"line number26 index25 alt1\"><code class=\"delphi keyword\">except</code></div>\n<div class=\"line number27 index26 alt2\"><code class=\"delphi plain\">ShowMessage(</code><code class=\"delphi string\">'Gagal membaca setting koneksi.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number28 index27 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number29 index28 alt2\"><code class=\"delphi keyword\">finally</code></div>\n<div class=\"line number30 index29 alt1\"><code class=\"delphi comments\">//Jangan lupa membebaskan memory</code></div>\n<div class=\"line number31 index30 alt2\"><code class=\"delphi plain\">List</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Free;</code></div>\n<div class=\"line number32 index31 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Selanjutnya untuk tombol Login:</p>\n<div>\n<div id=\"highlighter_460182\" class=\"syntaxhighlighter delphi\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"gutter\">\n<div class=\"line number1 index0 alt2\">1</div>\n<div class=\"line number2 index1 alt1\">2</div>\n<div class=\"line number3 index2 alt2\">3</div>\n<div class=\"line number4 index3 alt1\">4</div>\n<div class=\"line number5 index4 alt2\">5</div>\n<div class=\"line number6 index5 alt1\">6</div>\n<div class=\"line number7 index6 alt2\">7</div>\n<div class=\"line number8 index7 alt1\">8</div>\n<div class=\"line number9 index8 alt2\">9</div>\n<div class=\"line number10 index9 alt1\">10</div>\n<div class=\"line number11 index10 alt2\">11</div>\n<div class=\"line number12 index11 alt1\">12</div>\n<div class=\"line number13 index12 alt2\">13</div>\n<div class=\"line number14 index13 alt1\">14</div>\n<div class=\"line number15 index14 alt2\">15</div>\n<div class=\"line number16 index15 alt1\">16</div>\n</td>\n<td class=\"code\">\n<div class=\"container\">\n<div class=\"line number1 index0 alt2\"><code class=\"delphi keyword\">procedure</code> <code class=\"delphi plain\">TForm1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Button1Click(Sender: TObject);</code></div>\n<div class=\"line number2 index1 alt1\"><code class=\"delphi keyword\">begin</code></div>\n<div class=\"line number3 index2 alt2\"><code class=\"delphi keyword\">if</code> <code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Connected </code><code class=\"delphi keyword\">then</code></div>\n<div class=\"line number4 index3 alt1\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Disconnect;</code></div>\n<div class=\"line number5 index4 alt2\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">HostName := Edit1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">text;</code></div>\n<div class=\"line number6 index5 alt1\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Port := StrToInt(Edit2</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text);</code></div>\n<div class=\"line number7 index6 alt2\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">User := edit3</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text;</code></div>\n<div class=\"line number8 index7 alt1\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Password := Edit4</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Text;</code></div>\n<div class=\"line number9 index8 alt2\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Database := Edit5</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">text;</code></div>\n<div class=\"line number10 index9 alt1\"><code class=\"delphi keyword\">try</code></div>\n<div class=\"line number11 index10 alt2\"><code class=\"delphi plain\">ZConnection1</code><code class=\"delphi value\">.</code><code class=\"delphi plain\">Connect;</code></div>\n<div class=\"line number12 index11 alt1\"><code class=\"delphi plain\">ShowMessage(</code><code class=\"delphi string\">'Terkoneksi.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number13 index12 alt2\"><code class=\"delphi keyword\">except</code></div>\n<div class=\"line number14 index13 alt1\"><code class=\"delphi plain\">ShowMessage(</code><code class=\"delphi string\">'Gagal koneksi.'</code><code class=\"delphi plain\">);</code></div>\n<div class=\"line number15 index14 alt2\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n<div class=\"line number16 index15 alt1\"><code class=\"delphi keyword\">end</code><code class=\"delphi plain\">;</code></div>\n</div>\n</td>\n</tr>\n</tbody>\n</table>\n</div>\n</div>\n<p>Demikian tulisan sederhana ini, menjawab pertanyaan seorang pengunjung. Semoga sukses buat Anda Delphier Indonesia 🙂</p>\n<p><strong>Download</strong></p>\n<p>Bila Anda tertarik untuk mengunduh, semoga link berikut masih aktif. Luck for you 🙂</p>\n<p><a href=\"http://www.zumodrive.com/share/e2zjMDMwMW\" target=\"_blank\" rel=\"noopener\">Setting Koneksi Zeos (Source).7z</a> – 7KB</p>",
"image": "https://kppdi.github.io/media/posts/3/desain-form-parameter-koneksi.png",
"author": {
"name": "Grup KPPDI"
},
"tags": [
"Tutorial"
],
"date_published": "2020-08-02T19:43:02+08:00",
"date_modified": "2020-08-02T19:43:02+08:00"
},
{
"id": "https://kppdi.github.io/tampilkan-beberapa-form-di-satu-form/",
"url": "https://kppdi.github.io/tampilkan-beberapa-form-di-satu-form/",
"title": "Tampilkan Beberapa Form Di Satu Form",
"summary": "Tulisan ini adalah reply untuk komentar dari Harum Anjani (deg degan nih, tulis namanya) yang berkaitan dengan beberapa form yang ditampilkan pada form utama. Form, melalui komponen TFrame (D6 ke atas, untuk D5 kaga’ tau, belum pernah pake’), dapat ditampilkan di form lain. Namun kurang…",
"content_html": "<p>Tulisan ini adalah reply untuk komentar dari Harum Anjani (deg degan nih, tulis namanya) yang berkaitan dengan beberapa form yang ditampilkan pada form utama.<br>Form, melalui komponen TFrame (D6 ke atas, untuk D5 kaga’ tau, belum pernah pake’), dapat ditampilkan di form lain. Namun kurang fleksibel. Di sini saya menggunakan TPanel (bisa juga komponen lain, asalkan dapat menampung child window, seperti TScrollBox, TGroupBox, TTPageControl, dll) agar lebih fleksibel dan dapat disesuaikan dengan kebutuhan saat runtime nantinya.</p>\n<p>Agar singkat, saya tulis langkah-langkahnya saja:</p>\n<ul>\n<li>Buat Aplikasi baru (File>New>Application)</li>\n<li>Tambahkan beberapa form (File>New>Form)<br>Otomatis, Form pertama adalah Form1, form kedua adalah Form2, dst. Fom1 nantinya akan menjadi form utama.</li>\n<li>Pada Form1, tambahkan beberapa Button sebanyak jumlah Form selain Form1.</li>\n<li>Pada klause Uses (setelah klausa <strong>implementation</strong>) tambahkan Unit2 (untuk form2), dst. Contohnya:\n<pre>implementationUses Unit4, Unit3, Unit2;{$R *.DFM}</pre>\n</li>\n<li>Tambahkan juga sebuah Panel ke Form1. Panel ini akan menampung Form lainnya.</li>\n<li>lik ganda Button1 pada Form1 dan masukkan kode seperti berikut:\n<pre>procedure TForm1.Button1Click(Sender: TObject);<br>begin <br> Form2.parent:=Panel1;<br> Form2.BorderStyle:=bsNone;\n Form2.width:=panel1.width;\n Form2.height:=Panel1.Height;<br> Form2.Top:=0;\n Form2.left:=0;\n Form2.visible:=true;\nend;<br><br></pre>\n</li>\n<li>Lanjutkan kode Onclick Button2 untuk Form3, dst.</li>\n</ul>\n<p>Setelah semua selesai, jalankan aplikasi. Berikut adalah sebuah snapshot dari aplikasi demo yang dapat didownload pada bagian akhir tulisan ini:</p>\n<figure class=\"post__image\"><br><img loading=\"lazy\" src=\"https://kppdi.github.io/media/posts/2/scrsht.jpg\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/2/responsive/scrsht-xs.jpg 300w ,https://kppdi.github.io/media/posts/2/responsive/scrsht-sm.jpg 480w ,https://kppdi.github.io/media/posts/2/responsive/scrsht-md.jpg 768w ,https://kppdi.github.io/media/posts/2/responsive/scrsht-lg.jpg 1024w ,https://kppdi.github.io/media/posts/2/responsive/scrsht-xl.jpg 1360w ,https://kppdi.github.io/media/posts/2/responsive/scrsht-2xl.jpg 1600w\" alt=\"\" width=\"543\" height=\"375\"></figure><br><strong>Download</strong></p>\n<p><a href=\"https://jokorb.files.wordpress.com/2007/11/harum_anjani.ppt\" title=\"harum_anjani.ppt\">Source Code</a> ( setelah download, ubah ekstensi ke .zip)<br><a href=\"https://jokorb.files.wordpress.com/2007/11/multiform.ppt\" title=\"multiform.ppt\">Demo Exe</a> (ubah eks. ke .zip, scan dulu sebelum dijalankan)</p>",
"image": "https://kppdi.github.io/media/posts/2/scrsht-2.jpg",
"author": {
"name": "Grup KPPDI"
},
"tags": [
"Tutorial",
"Sample App"
],
"date_published": "2020-08-02T19:43:02+08:00",
"date_modified": "2020-08-02T19:43:02+08:00"
},
{
"id": "https://kppdi.github.io/format-angka-finansial/",
"url": "https://kppdi.github.io/format-angka-finansial/",
"title": "Format Angka Finansial",
"summary": "Beberapa waktu lalau ada yang nyasar ke blog ini dengan sebuah pertanyaan: \"listing delphi untuk angka dibelakang koma....\" Nah, saya tulis saja :) Untuk memformat angka pecahan, terutama dalam aplikasi akuntansi, kita dapat menggunakan fungsi format float: [sourcecode language=\"delphi\"] FormatFloat(const AFormat:String; const AValue: Extended): String;…",
"content_html": "<p>Beberapa waktu lalau ada yang nyasar ke blog ini dengan sebuah pertanyaan: \"listing delphi untuk angka dibelakang koma....\"</p>\n<p>Nah, saya tulis saja :)</p>\n<p>Untuk memformat angka pecahan, terutama dalam aplikasi akuntansi, kita dapat menggunakan fungsi format float:</p>\n<p>[sourcecode language=\"delphi\"]<br>FormatFloat(const AFormat:String; const AValue: Extended): String;<br>[/sourcecode]</p>\n<p>Di mana,</p>\n<p>[sourcecode language=\"delphi\"]<br>AFormat = 'FORMAT_ANGKA_POSITIF;FORMAT_ANGKA_NEGATIF;FORMAT_0';<br>[/sourcecode]</p>\n<p>Saya telah membuat potongan kode untuk mempermudah:</p>\n<p>[sourcecode language=\"delphi\"]<br>function FinaceFloat(const AValue: Double): String;<br>var<br>simpan: array[1..2] of char;<br>begin<br>simpan[1]:=ThousandSeparator;<br>simpan[2]:=DecimalSeparator;<br>ThousandSeparator:='.';<br>DecimalSeparator:=',';<br>Result:=FormatFloat('#,#0.00 ;(#,#0.00) ;- ', AValue);<br>ThousandSeparator:=simpan[1];<br>DecimalSeparator:=simpan[2];<br>end;<br>[/sourcecode]</p>\n<p>Berikut contoh penggunaanya:</p>\n<p>[sourcecode language=\"delphi\"]<br>Edit2.Text:=FinaceFloat(StrToFloat(Edit1.Text));<br>Edit4.Text:=FinaceFloat(StrToFloat(Edit3.Text));<br>Edit6.Text:=FinaceFloat(StrToFloat(Edit5.Text));<br>[/sourcecode]</p>\n<p>Hasilnya:</p>\n<figure class=\"alignnone size-medium wp-image-564\"><a href=\"http://jokorb.files.wordpress.com/2010/04/000s890d898sd977sd_finace_format.png\"><img loading=\"lazy\" title=\"Format Angka Finansial\" src=\"https://kppdi.github.io/media/posts/84/000s890d898sd977sd_finace_format.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/84/responsive/000s890d898sd977sd_finace_format-xs.png 300w ,https://kppdi.github.io/media/posts/84/responsive/000s890d898sd977sd_finace_format-sm.png 480w ,https://kppdi.github.io/media/posts/84/responsive/000s890d898sd977sd_finace_format-md.png 768w ,https://kppdi.github.io/media/posts/84/responsive/000s890d898sd977sd_finace_format-lg.png 1024w ,https://kppdi.github.io/media/posts/84/responsive/000s890d898sd977sd_finace_format-xl.png 1360w ,https://kppdi.github.io/media/posts/84/responsive/000s890d898sd977sd_finace_format-2xl.png 1600w\" alt=\"Format Angka Finansial\" width=\"300\" height=\"166\"></figure></a></p>",
"image": "https://kppdi.github.io/media/posts/84/startup-594090_1280.jpg",
"author": {
"name": "Grup KPPDI"
},
"tags": [
"Pecahan",
"Negatif",
"FormatFloat",
"Format",
"Finansial",
"Desimal",
"Angka",
"Akuntansi"
],
"date_published": "2020-08-02T19:43:02+08:00",
"date_modified": "2020-08-02T19:43:02+08:00"
},
{
"id": "https://kppdi.github.io/menggunakan-header-control-pada-dbgrid/",
"url": "https://kppdi.github.io/menggunakan-header-control-pada-dbgrid/",
"title": "Menggunakan Header Control Pada DBGrid",
"summary": "Malas membaca? Langsung Download Source Code + Exe. Posting ini buat menjawab pertanyaan seorang rekan Delphier. FixedRow pada DBGrid default bawaan Delphi memang terlihat membosankan. Nah kita coba membuat tampilan yang lebih menarik. Langkah-Langkahnya: procedure TForm1.HeaderControl1SectionClick(HeaderControl: THeaderControl; Section: THeaderSection); begin ShowMessage('Anda mengklik pada: '+ Section.Text);…",
"content_html": "<p align=\"justify\">Malas membaca? Langsung <a href=\"http://7868b282.realfiles.net\" target=\"_blank\" rel=\"noopener\">Download Source Code + Exe.</a></p>\n<p align=\"justify\"><a href=\"http://jokorb.files.wordpress.com/2010/04/image9.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb9.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb9-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb9-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb9-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb9-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb9-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb9-2xl.png 1600w\" alt=\"image\" width=\"596\" height=\"313\" border=\"0\"></a></p>\n<p align=\"justify\">Posting ini buat menjawab pertanyaan seorang rekan Delphier.</p>\n<p align=\"justify\">FixedRow pada DBGrid default bawaan Delphi memang terlihat membosankan. Nah kita coba membuat tampilan yang lebih menarik.</p>\n<p align=\"justify\"><strong>Langkah-Langkahnya:</strong></p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\n<li>\n<div align=\"justify\">Buat Form baru. Tambahkan sebuah panel (page Standard) dan kosongkan property Caption. <br><a href=\"http://jokorb.files.wordpress.com/2010/04/image10.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb10.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb10-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb10-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb10-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb10-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb10-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb10-2xl.png 1600w\" alt=\"image\" width=\"244\" height=\"129\" border=\"0\"></a></div>\n</li>\n<li>\n<div align=\"justify\">Tambahkan sebuah Header Control (page Win32) ke dalam panel tersebut. Set property Height menjadi <strong>25</strong>, property Cursor menjadi <strong>crHandPoint</strong>, dan property Style menjadi <strong>hsButtons</strong>. Tambahkan juga sebuah ImageList (page Win32) ke form. <br><a href=\"http://jokorb.files.wordpress.com/2010/04/image11.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb11.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb11-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb11-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb11-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb11-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb11-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb11-2xl.png 1600w\" alt=\"image\" width=\"244\" height=\"129\" border=\"0\"></a> <br>Klik ganda ImageList1, tambahkan beberapa gambar berukuran 16 x 16 pixel. <br><a href=\"http://jokorb.files.wordpress.com/2010/04/image12.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb12.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb12-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb12-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb12-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb12-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb12-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb12-2xl.png 1600w\" alt=\"image\" width=\"244\" height=\"139\" border=\"0\"></a></div>\n</li>\n<li>\n<div align=\"justify\">Kini Tambahkan sebuah DBGrid (page Data Controls) ke dalam Panel1. Set property Align ke <strong>alClient. <br></strong><a href=\"http://jokorb.files.wordpress.com/2010/04/image13.png\"><strong><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb13.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb13-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb13-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb13-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb13-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb13-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb13-2xl.png 1600w\" alt=\"image\" width=\"244\" height=\"129\" border=\"0\"></strong></a><strong> <br></strong>Lihat property Options milik DBGrid1, set property dgTitles ke False: <br><a href=\"http://jokorb.files.wordpress.com/2010/04/image14.png\"><img loading=\"lazy\" style=\"display: inline; margin-left: 0; margin-right: 0; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb14.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb14-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb14-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb14-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb14-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb14-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb14-2xl.png 1600w\" alt=\"image\" width=\"177\" height=\"139\" border=\"0\"></a> <br>dan hasilnya, tampilan form sekarang menjadi: <br><a href=\"http://jokorb.files.wordpress.com/2010/04/image15.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb15.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb15-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb15-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb15-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb15-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb15-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb15-2xl.png 1600w\" alt=\"image\" width=\"158\" height=\"97\" border=\"0\"></a> </div>\n</li>\n<li>\n<div align=\"justify\">Klik ganda pada DBGrid, tambahkan Column sesuai kebutuhan. <br><a href=\"http://jokorb.files.wordpress.com/2010/04/image16.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb16.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb16-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb16-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb16-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb16-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb16-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb16-2xl.png 1600w\" alt=\"image\" width=\"219\" height=\"148\" border=\"0\"></a> <br>Klik ganda juga pada HeaderControl1, tambahkan <strong>Section</strong> sesuai kebutuhan. <br><a href=\"http://jokorb.files.wordpress.com/2010/04/image17.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb17.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb17-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb17-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb17-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb17-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb17-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb17-2xl.png 1600w\" alt=\"image\" width=\"242\" height=\"147\" border=\"0\"></a> <br>Atur property Width untuk tiap Column pada DBGrid1, sesuaikan dengan property Width untuk tiap Section pada HeaderControl1. <br> <a href=\"http://jokorb.files.wordpress.com/2010/04/image18.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb18.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb18-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb18-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb18-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb18-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb18-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb18-2xl.png 1600w\" alt=\"image\" width=\"244\" height=\"129\" border=\"0\"></a></div>\n</li>\n<li>\n<div align=\"justify\">Set property Images milik HeaderControl1 ke ImageList1. Kemudian klik ganda HeaderControl1. Klik salah satu Section dan atur property ImageIndex dengan gambar yang sesuai: <br><a href=\"http://jokorb.files.wordpress.com/2010/04/image19.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb19.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb19-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb19-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb19-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb19-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb19-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb19-2xl.png 1600w\" alt=\"image\" width=\"184\" height=\"152\" border=\"0\"></a> <br>Lakukan dengan Section yang lain.</div>\n</li>\n<li>\n<div align=\"justify\">Klik pada HeaderControl1 dan klik tab Events pada Object Inspector. Klik ganda pada event OnSectionClick: <br><a href=\"http://jokorb.files.wordpress.com/2010/04/image20.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb20.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb20-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb20-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb20-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb20-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb20-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb20-2xl.png 1600w\" alt=\"image\" width=\"181\" height=\"77\" border=\"0\"></a> <br>Masukkan kode seperti berikut:</div>\n</li>\n</ol>\n</li>\n</ol>\n<blockquote>\n<p align=\"justify\"><span style=\"color: #004080; font-family: cour;\">procedure TForm1.HeaderControl1SectionClick(HeaderControl: THeaderControl; <br> Section: THeaderSection); <br>begin <br> ShowMessage('Anda mengklik pada: '+ Section.Text); <br>end;</span></p>\n</blockquote>\n<ol>\n<li>\n<div align=\"justify\">Jalankan program. <br><a href=\"http://jokorb.files.wordpress.com/2010/04/image21.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/82/image_thumb21.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/82/responsive/image_thumb21-xs.png 300w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb21-sm.png 480w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb21-md.png 768w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb21-lg.png 1024w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb21-xl.png 1360w ,https://kppdi.github.io/media/posts/82/responsive/image_thumb21-2xl.png 1600w\" alt=\"image\" width=\"244\" height=\"122\" border=\"0\"></a></div>\n</li>\n</ol>\n<p align=\"justify\">Bagaimana? Menarik? <br>Selanjutnya tinggal mengatur DataSource dan Dataset untuk DBGrid buat menampilkan data dari database. Selamat melanjutkan.</p>\n<p align=\"justify\">Berikut referensi yang mungkin membantu Anda:</p>\n<ul>\n<li>\n<div align=\"justify\"><a title=\"http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_23318783.html\" href=\"http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_23318783.html\" target=\"_blank\" rel=\"noopener\">http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_23318783.html</a></div>\n</li>\n<li>\n<div align=\"justify\"><a title=\"http://www.scalabium.com/smdbgrid.htm\" href=\"http://www.scalabium.com/smdbgrid.htm\" target=\"_blank\" rel=\"noopener\">http://www.scalabium.com/smdbgrid.htm</a></div>\n</li>\n</ul>\n<p align=\"justify\"><strong><a href=\"http://7868b282.realfiles.net\" target=\"_blank\" rel=\"noopener\">Download Source Code + Exe</a> – [ 347 KB ]</strong></p>\n<p align=\"justify\"><em>File ini sesungguhnya adalah file .zip. Jadi setelah didownload harus diganti ekstensi filenya dari .ppt ke .zip. Jangan lupa discan dulu sebelum diekstrak.</em></p>",
"image": "https://kppdi.github.io/media/posts/82/office-620817_1280.jpg",
"author": {
"name": "Grup KPPDI"
},
"tags": [
"Header",
"Delphi",
"DGrid",
"Custom",
"Control",
"Component"
],
"date_published": "2020-08-02T19:43:02+08:00",
"date_modified": "2020-08-02T19:43:02+08:00"
},
{
"id": "https://kppdi.github.io/lebih-jauh-dengan-pointer-2/",
"url": "https://kppdi.github.io/lebih-jauh-dengan-pointer-2/",
"title": "Lebih Jauh Dengan Pointer [ 2 ]",
"summary": "Oke. Pembahasan kita terakhir adalah dereferensi pointer untuk mengambil nilai yang ditunjuknya. Pertanyaan, bila kita bebas melakukan casting terhadap variabel bertipe pointer untuk mengambil nilainya, dapatkah kita membuat saja tipe variabel baru yang sesuai dengan kebutuhan kita? Agar tidak usah ada casting lagi tiap kita…",
"content_html": "<p align=\"justify\">Oke. <a href=\"http://jokorb.wordpress.com/2010/03/21/lebih-jauh-dengan-pointer/\" target=\"_blank\" rel=\"noopener\">Pembahasan kita terakhir</a> adalah dereferensi pointer untuk mengambil nilai yang ditunjuknya.</p>\n<p align=\"justify\">Pertanyaan, bila kita bebas melakukan casting terhadap variabel bertipe pointer untuk mengambil nilainya, dapatkah kita membuat saja tipe variabel baru yang sesuai dengan kebutuhan kita? Agar tidak usah ada casting lagi tiap kita melakukan dereferensi terhadap pointer?</p>\n<p align=\"justify\">Jawabannya, tentu saja.</p>\n<p align=\"justify\">Kita dapat membuat tipe variabel baru bertipe pointer dengan ukuran yang bebas. Contoh, kita akan membuat sebuah tipe data, berjenis pointer, dan data yang ditunjuknya seukuran Dword.</p>\n<blockquote>\n<p align=\"justify\">type</p>\n<p>PDword = ^Dword;</p>\n</blockquote>\n<p align=\"justify\">Nah, kita telah memiliki tipe data baru. Sebuah tipe data berjenis pointer, data yang ditunjuk seukuran Dword, bernama PDword. Kita memberi nama dengan prefiks P agar kita mudah mengingat bahwa tipe data tersebut berjenis pointer. Tanda ^ di depan tipe data dasar (Dword) adalah penunjuk bahwa kita sedang mendeklarasikan sejenis pointer sebagai tipe data baru.</p>\n<p align=\"justify\">Sebuah contoh akan menjelaskan lebih jauh:</p>\n<blockquote>\n<p align=\"justify\">procedure TForm1.Button1Click(Sender: TObject); <br>type <br> PDword = ^Dword; <br>var <br> PointerDword: PDword; <br> DwordBiasa1, <br> DwordBiasa2: Dword; <br>begin <br> DwordBiasa1 := 16762; <br> PointerDword := @DwordBiasa1; <br> DwordBiasa2 := pointerDword^; <br> ShowMessage('Nilai dereferensi: '+ IntToStr(DwordBiasa2)); <br> pointerDword^ := 4; <br> ShowMessage('Nilai dereferensi: '+ IntToStr(DwordBiasa1)); <br>end;</p>\n</blockquote>\n<p align=\"justify\">Lihat. Nilai DwordBiasa1 adalah 16762. Kita deklarasikan tipe data baru dengan nama PDword, sebagai tipe berjenis pointer, ukuran data yang ditunjuknya sebesar ukuran data Dword. Kita juga punya sebuah variabel PointerDword dengan tipe PDword tadi. variabel PointerDword ini kita tugaskan untuk menjukkan alamat variabel DwordBiasa1 di memori. Kemudian kita dereferensikan lagi ke variabel DwordBiasa2. Ternyata, tanpa perlu casting tipe data, kita sudah dapat mengambil nilai 16762 tadi. <br><a href=\"http://jokorb.files.wordpress.com/2010/03/image8.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/81/image_thumb8.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/81/responsive/image_thumb8-xs.png 300w ,https://kppdi.github.io/media/posts/81/responsive/image_thumb8-sm.png 480w ,https://kppdi.github.io/media/posts/81/responsive/image_thumb8-md.png 768w ,https://kppdi.github.io/media/posts/81/responsive/image_thumb8-lg.png 1024w ,https://kppdi.github.io/media/posts/81/responsive/image_thumb8-xl.png 1360w ,https://kppdi.github.io/media/posts/81/responsive/image_thumb8-2xl.png 1600w\" alt=\"image\" width=\"161\" height=\"122\" border=\"0\"></a></p>\n<p align=\"justify\">Bagaimana dengan dua baris terakhir? Ingat, pointer, termasuk PDword tadi, hanya menunjukkan alamat sebuah data/variabel di memori. Bukan menunjukkan nilainya. Jika kita melakukan dereferensi dengan x:=p^, maka nilai pada memori yang ditunjuk oleh p di memori akan dimasukkan ke variabel x. Sebaliknya, bilai kita melakukan penugasan p^:=x, maka nilai di memori yang ditunjuk oleh p akan diisi dengan nilai x.</p>\n<blockquote>\n<p align=\"justify\">DwordBiasa1 := 16762; <br>PointerDword := @DwordBiasa1; <br>//…………………………… <br>pointerDword^ := 4;</p>\n</blockquote>\n<p align=\"justify\">Pada kode di atas, DwordBiasa1 awalnya bernilai 16762. Kemudian kita mencatat alamat data DwordBiasa1 ke variabel PointerDword. Baris terakhir mengubah nilai di alamat tersebut (yang ditunjuk oleh PointerDword) menjadi 4. Ini berakibat variabel DwordBiasa1, yang berada di alamat tersebut, menjadi bernilai 4, bukan lagi 16762. Percaya? <br><a href=\"http://jokorb.files.wordpress.com/2010/03/image9.png\"><img loading=\"lazy\" style=\"display: inline; border: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/81/image_thumb9.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/81/responsive/image_thumb9-xs.png 300w ,https://kppdi.github.io/media/posts/81/responsive/image_thumb9-sm.png 480w ,https://kppdi.github.io/media/posts/81/responsive/image_thumb9-md.png 768w ,https://kppdi.github.io/media/posts/81/responsive/image_thumb9-lg.png 1024w ,https://kppdi.github.io/media/posts/81/responsive/image_thumb9-xl.png 1360w ,https://kppdi.github.io/media/posts/81/responsive/image_thumb9-2xl.png 1600w\" alt=\"image\" width=\"137\" height=\"122\" border=\"0\"></a></p>\n<p align=\"justify\">Oke. Lanjut. :)</p>\n<p align=\"justify\">Kemudian perhatikan deklarasi tipe-tipe data yang tersedia di Delphi. Kebanyakan mereka dideklarasikan menggunakan cara kita:</p>\n<blockquote>\n<p align=\"justify\">PTipe = ^Tipe;</p>\n</blockquote>\n<p align=\"justify\">Dengan pembahasan ini, saya berharap kita sudah punya sebuah pengetahuan baru, bahwasannya pointer adalah sesuatu yang sangat bagus dalam memfasilitasi kita dalam menulis program. Meskipun terlihat begitu rumit dan bertele-tele, kita harus bersyukur bahwa pointer ada di dunia yang kita tinggali, dunia programming :)</p>\n<p align=\"justify\">Manfaat pointer tentu saja belum terasa sampai di sini. Kita masih akan melanjutkan dengan tipe-tipe data dasar lainnya, sebelum melanjutkan pembahasan sampai ke pemanfaatan pointer dan contoh-contoh implementasinya dalam kode.</p>\n<p align=\"justify\">Salam, Joko Rivai.</p>",
"image": "https://kppdi.github.io/media/posts/81/fiber-4814456_1280.jpg",
"author": {
"name": "Grup KPPDI"
},
"tags": [
"Tipe Data",
"Object Pascal",
"Delphi"
],
"date_published": "2020-08-02T19:43:02+08:00",
"date_modified": "2020-08-02T19:43:02+08:00"
},
{
"id": "https://kppdi.github.io/lebih-jauh-dengan-pointer/",
"url": "https://kppdi.github.io/lebih-jauh-dengan-pointer/",
"title": "Lebih Jauh Dengan Pointer",
"summary": "Pointer adalah sebuah tipe data yang berfungsi menunjukkan alamat di memori. Semua objek dalam Delphi yang diturunkan dari TObject adalah pointer. TForm, TStrings, TList, TDBGrid, semuanya pointer. Oke. Saya mulai dengan sebuah contoh. var p: Pointer; i, j: Integer; begin i:=45; j:=0; p:=@i; j:=Integer(p^); ShowMessage(IntToStr(j));…",
"content_html": "<p align=\"justify\">Pointer adalah sebuah tipe data yang berfungsi menunjukkan alamat di memori. Semua objek dalam Delphi yang diturunkan dari TObject adalah pointer. TForm, TStrings, TList, TDBGrid, semuanya pointer.</p>\n<p align=\"justify\">Oke. Saya mulai dengan sebuah contoh.</p>\n<p class=\"align-left\"><code>var </code><br><code> p: Pointer; </code><br><code> i, j: Integer; </code><br><code>begin </code><br><code> i:=45; </code><br><code> j:=0; </code><br><code> p:=@i; </code><br><code> j:=Integer(p^); </code><br><code> ShowMessage(IntToStr(j));</code></p>\n<p>Pertama, nilai j adalah 0, nilai i adalah 45. kemudian kita tugaskan p untuk menunjukkan alamat dari i di memori. Pada alamat tersebut terdapat nilai 45. Bilai alamat yang ditunjuk oleh p kita ambil isinya ke variabel j, maka j akan memiliki nilai 45 juga.</p>\n<p>Kode di atas memiliki hasil: <br><a href=\"http://jokorb.files.wordpress.com/2010/03/image2.png\"><img loading=\"lazy\" style=\"display: inline; border-width: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/79/image_thumb2.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/79/responsive/image_thumb2-xs.png 300w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb2-sm.png 480w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb2-md.png 768w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb2-lg.png 1024w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb2-xl.png 1360w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb2-2xl.png 1600w\" alt=\"image\" width=\"109\" height=\"122\" border=\"0\"></a> </p>\n<p>Dengan demikian kita tahu bahwa: <br>p := @x adalah ekspresi menugaskan p untuk menunjukkan alamat dari x disebut <strong>referencing</strong>, dan <br>x:=p^ adalah mengambil data/nilai pada alamat yang ditunjukkan oleh p, disebut <strong>dereferencing</strong>.</p>\n<p>Biasanya orang bingung dengan @, dan ^. Jangan khawatir, lama-lama semuanya akan terasa biasa saja :)</p>\n<p>Mungkin Anda akan bertanya, apa maksudnya <strong>j:=integer(p^)</strong> ? Mudah saja, p adalah untyped pointer (pointer tak bertipe), sehingga akan membingungkan compiler berapa ukuran data/nilai yang ditunjuk oleh pointer tersebut. Mari membuat semua jelas: pointer berukuran 4 byte, tapi data/nilai di memori yang ditunjuknya tidak diketahui berapa ukurannya. Bisa jadi nilai itu adalah Char (1 byte), Integer (4 byte), Variant, atau lainnya.</p>\n<p>Kita akan lihat alamat yang ditunjukkan oleh pointer dan mekanisme derefencing data pada alamat tersebut.</p>\n<p><code>i:=45; </code><br><code> p:=@i; </code><br><code> ShowMessage(IntToStr( integer(p) ));</code></p>\n<p>integer(p) merupakan casting/perubahan tipe dari pointer ke integer. Jadi alamat yang ditunjukkan oleh p dapat kita tampilkan dengan ShowMessage(IntToStr( integer(p) )); <br><a href=\"http://jokorb.files.wordpress.com/2010/03/image3.png\"><img loading=\"lazy\" style=\"display: inline; border-width: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/79/image_thumb3.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/79/responsive/image_thumb3-xs.png 300w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb3-sm.png 480w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb3-md.png 768w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb3-lg.png 1024w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb3-xl.png 1360w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb3-2xl.png 1600w\" alt=\"image\" width=\"109\" height=\"122\" border=\"0\"></a> <br>Lantas, bagaimana mekanisme dereferencing? <br><a href=\"http://jokorb.files.wordpress.com/2010/03/image4.png\"><img loading=\"lazy\" style=\"display: inline; border-width: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/79/image_thumb4.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/79/responsive/image_thumb4-xs.png 300w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb4-sm.png 480w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb4-md.png 768w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb4-lg.png 1024w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb4-xl.png 1360w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb4-2xl.png 1600w\" alt=\"image\" width=\"389\" height=\"63\" border=\"0\"></a></p>\n<p>Dengan memeriksa p, compiler tahu bahwa data yang akan direferensikan berada pada alamat 1244636 di memori. Tapi berapakah ukuran datanya? apakah cuma 1 byte atau sepanjang alamat 1244636 sampai akhir memori? Compiler takkan pernah tahu. Jadi kita harus mengarahkan compiler dengan:</p>\n<p><code>j:=Integer(p^);</code></p>\n<p>Kini compiler tahu bahwa kita akan mengambil data bertipe integer. Compiler tahu bahwa integer berukuran 4 byte. Dengan begitu, compiler akan mengambil data sebanyak 4 byte, dimulai dengan byte pertama pada alamat 1244636. Terakhir, compiler mengembalikan hasilnya, nilai 45. <br> <a href=\"http://jokorb.files.wordpress.com/2010/03/image5.png\"><img loading=\"lazy\" style=\"display: inline; border-width: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/79/image_thumb5.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/79/responsive/image_thumb5-xs.png 300w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb5-sm.png 480w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb5-md.png 768w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb5-lg.png 1024w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb5-xl.png 1360w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb5-2xl.png 1600w\" alt=\"image\" width=\"382\" height=\"60\" border=\"0\"></a></p>\n<p>Demikian halnya bila kita ingin mengambil nilai dengan ukuran yang berbeda. Katakan kita hanya mengambil 1 byte:</p>\n<p><code>j:=Byte(p^);</code></p>\n<p>Bila Anda jeli, Anda dapat melihat kenapa ada tipe data PByte, PInt64, PDword, dan lainnya. Deklarasi tipe-tipe tersebut adalah:</p>\n<p><code>PByte = ^Byte;</code><br><code>PInt64 = ^Int64;</code><br><code>PDword = ^Dword;</code></p>\n<p>Mereka dideklarasikan sebagai tipe pointer ke tipe data dasarnya. Maksudnya, agar compiler tahu bahwa ukuran data pada alamat yang ditunjuknya. <br><a href=\"http://jokorb.files.wordpress.com/2010/03/image6.png\"><img loading=\"lazy\" style=\"display: inline; border-width: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/79/image_thumb6.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/79/responsive/image_thumb6-xs.png 300w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb6-sm.png 480w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb6-md.png 768w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb6-lg.png 1024w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb6-xl.png 1360w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb6-2xl.png 1600w\" alt=\"image\" width=\"558\" height=\"255\" border=\"0\"></a> </p>\n<p>Anda lihat? Compiler kebingungan karena harus mengambil nilai yang tidak diketahui berapa ukurannya. Bagaimana jika kode di atas kita modifikasi:</p>\n<p><a href=\"http://jokorb.files.wordpress.com/2010/03/image7.png\"><img loading=\"lazy\" style=\"display: inline; border-width: 0;\" title=\"image\" src=\"https://kppdi.github.io/media/posts/79/image_thumb7.png\" sizes=\"(max-width: 48em) 100vw, 768px\" srcset=\"https://kppdi.github.io/media/posts/79/responsive/image_thumb7-xs.png 300w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb7-sm.png 480w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb7-md.png 768w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb7-lg.png 1024w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb7-xl.png 1360w ,https://kppdi.github.io/media/posts/79/responsive/image_thumb7-2xl.png 1600w\" alt=\"image\" width=\"463\" height=\"274\" border=\"0\"></a></p>\n<p>Tidak ada masalah, kan?</p>\n<p>Oke. Tulisan ini belum berakhir. Saya capek, maen Point Blank dulu. Nanti sambung lagi :)</p>\n<p>Biar gak panjang, tulisan ini telah saya bagi dua. <a href=\"http://jokorb.wordpress.com/2010/03/24/lebih-jauh-dengan-pointer-2/\" target=\"_blank\" rel=\"noopener\">Lanjutannya di sini</a>.</p>\n<p> </p>\n<p> </p>",
"image": "https://kppdi.github.io/media/posts/79/fiber-4814456_1280.jpg",
"author": {
"name": "Grup KPPDI"
},
"tags": [
"Tutorial",
"Docs"
],
"date_published": "2020-08-02T19:43:02+08:00",
"date_modified": "2020-08-02T19:43:02+08:00"
}
]
}