-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeed.xml
More file actions
1368 lines (1357 loc) · 154 KB
/
feed.xml
File metadata and controls
1368 lines (1357 loc) · 154 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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Grup KPPDI</title>
<link href="https://kppdi.github.io/feed.xml" rel="self" />
<link href="https://kppdi.github.io" />
<updated>1970-01-01T08:00:00+08:00</updated>
<author>
<name>Grup KPPDI</name>
</author>
<id>https://kppdi.github.io</id>
<entry>
<title>CRUD Mahasiswa Menggunakan Delphi dan MS Access dengan ADOTable</title>
<author>
<name>Grup KPPDI</name>
</author>
<link href="https://kppdi.github.io/crud-mahasiswa-menggunakan-delphi-dan-ms-access-dengan-adotable-2-pengkodean-1/"/>
<id>https://kppdi.github.io/crud-mahasiswa-menggunakan-delphi-dan-ms-access-dengan-adotable-2-pengkodean-1/</id>
<category term="Video"/>
<category term="Tutorial"/>
<updated>2020-08-02T19:43:02+08:00</updated>
<summary>
<![CDATA[
<img src="https://kppdi.github.io/media/posts/97/database-schema-1895779_1280-2.png" alt="" />
Video tutorial Database (CRUD) Database Mahasiswa menggunakan Delphi dan Microsoft Access. Part 1: Part 2: Author: Roy Royesta Pampey Original Post
]]>
</summary>
<content type="html">
<![CDATA[
<img src="https://kppdi.github.io/media/posts/97/database-schema-1895779_1280-2.png" alt="" />
<p>Video tutorial Database (CRUD) Database Mahasiswa menggunakan Delphi dan Microsoft Access.</p>
<p><strong>Part 1:</strong></p>
<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>
<p> </p>
<p><strong>Part 2:</strong></p>
<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>
<p> </p>
<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>
<div class="qzhwtbm6 knvmm38d"> </div>
<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>
]]>
</content>
</entry>
<entry>
<title>Parsing JSON Ke TTreeView</title>
<author>
<name>Grup KPPDI</name>
</author>
<link href="https://kppdi.github.io/parsing-json-ke-ttreeview/"/>
<id>https://kppdi.github.io/parsing-json-ke-ttreeview/</id>
<category term="Tutorial"/>
<category term="Sample App"/>
<category term="Delphi"/>
<updated>2020-08-02T19:43:02+08:00</updated>
<summary>
<![CDATA[
<img src="https://kppdi.github.io/media/posts/96/analytics-3088958_1280.jpg" alt="" />
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…
]]>
</summary>
<content type="html">
<![CDATA[
<img src="https://kppdi.github.io/media/posts/96/analytics-3088958_1280.jpg" alt="" />
<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>
<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>
<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>
<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>
<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>
<p> </p>
<p>Untuk menggunakan library tersebut, tambahkan SuperObject.pas ke project:</p>
<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>
<p>Dan pilih SuperObject.pas</p>
<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>
<p>Kemudian tambahkan SuperObject ke klausa uses:</p>
<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>
<p> </p>
<p>Property Text dari Memo1 dapat diganti dengan default JSON text, misalnya:</p>
<div>
<div><code>{</code></div>
<div><code> "id": "0001",</code></div>
<div><code> "type": "donut",</code></div>
<div><code> "name": "Cake",</code></div>
<div><code> "ppu": 0.55,</code></div>
<div><code> "batters":</code></div>
<div><code> {</code></div>
<div><code> "batter":</code></div>
<div><code> [</code></div>
<div><code> { "id": "1001", "type": "Regular" },</code></div>
<div><code> { "id": "1002", "type": "Chocolate" },</code></div>
<div><code> { "id": "1003", "type": "Blueberry" },</code></div>
<div><code> { "id": "1004", "type": "Devil's Food" }</code></div>
<div><code> ]</code></div>
<div><code> },</code></div>
<div><code> "topping":</code></div>
<div><code> [</code></div>
<div><code> { "id": "5001", "type": "None" },</code></div>
<div><code> { "id": "5002", "type": "Glazed" },</code></div>
<div><code> { "id": "5005", "type": "Sugar" },</code></div>
<div><code> { "id": "5007", "type": "Powdered Sugar" },</code></div>
<div><code> { "id": "5006", "type": "Chocolate with Sprinkles" },</code></div>
<div><code> { "id": "5003", "type": "Chocolate" },</code></div>
<div><code> { "id": "5004", "type": "Maple" }</code></div>
<div><code> ]</code></div>
<div><code>}</code></div>
</div>
<p> </p>
<p>Klik ganda pada tombol caption <strong>Parse</strong>, kemudian isikan kode seperti berikut:</p>
<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>
<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>
<p><code>iso := so(s);</code></p>
<p>Lalu JSON ini ditelusuri item-itemnya dan dimuat ke treeview dengan menginduk ke node pertama, yaitu <strong>tvi</strong></p>
<p><code>ParseItemsIntoTreeView(tvi, iso);</code></p>
<p>Berikut fungsi parse JSON ke treeview:</p>
<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>
<p> </p>
<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>
<p> </p>
<p>Beberapa fungsi bantu dapat Anda lihat pada listing lengkap berikut:</p>
<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>
<p> </p>
<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>
<p><code></code><code></code></p>
]]>
</content>
</entry>
<entry>
<title>Resize Gambar (JPG & BMP) Menggunakan Delphi</title>
<author>
<name>Grup KPPDI</name>
</author>
<link href="https://kppdi.github.io/resize-gambar-jpg-and-bmp-menggunakan-delphi/"/>
<id>https://kppdi.github.io/resize-gambar-jpg-and-bmp-menggunakan-delphi/</id>
<category term="Tutorial"/>
<updated>2020-08-02T19:43:02+08:00</updated>
<summary>
<![CDATA[
<img src="https://kppdi.github.io/media/posts/5/scalimg-codegear-delphi-for-microsoft-windows-umain-running_2011-06-24_00-26-54-2.png" alt="" />
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…
]]>
</summary>
<content type="html">
<![CDATA[
<img src="https://kppdi.github.io/media/posts/5/scalimg-codegear-delphi-for-microsoft-windows-umain-running_2011-06-24_00-26-54-2.png" alt="" />
<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>
<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>
<p> </p>
<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>
<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>
<div class="line number3 index2 alt2"><code class="delphi keyword">var</code></div>
<div class="line number4 index3 alt1"><code class="delphi plain">SrcBmp, TrgBmp: TBitmap;</code></div>
<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>
<div class="line number6 index5 alt1"><code class="delphi plain">Jpg: TJPEGImage;</code></div>
<div class="line number7 index6 alt2"><code class="delphi keyword">begin</code></div>
<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>
<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>
<div class="line number10 index9 alt1"><code class="delphi comments">//else, do not resize.</code></div>
<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>
<div class="line number12 index11 alt1"><code class="delphi keyword">begin</code></div>
<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>
<div class="line number14 index13 alt1"><code class="delphi plain">exit;</code></div>
<div class="line number15 index14 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<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>
<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>
<div class="line number18 index17 alt1"> </div>
<div class="line number19 index18 alt2"><code class="delphi keyword">try</code></div>
<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>
<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>
<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>
<div class="line number23 index22 alt2"><code class="delphi plain">NewW := W * ScaleFactor;</code></div>
<div class="line number24 index23 alt1"><code class="delphi plain">NewH := H * ScaleFactor;</code></div>
<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>
<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>
<div class="line number27 index26 alt2"> </div>
<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>
<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>
<div class="line number30 index29 alt1"><code class="delphi plain">W, H, SRCCOPY) </code><code class="delphi keyword">then</code></div>
<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>
<div class="line number32 index31 alt1"><code class="delphi keyword">else</code></div>
<div class="line number33 index32 alt2"><code class="delphi keyword">begin</code></div>
<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>
<div class="line number35 index34 alt2"><code class="delphi keyword">begin</code></div>
<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>
<div class="line number37 index36 alt2"><code class="delphi keyword">try</code></div>
<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>
<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>
<div class="line number40 index39 alt1"><code class="delphi keyword">finally</code></div>
<div class="line number41 index40 alt2"><code class="delphi plain">Jpg</code><code class="delphi value">.</code><code class="delphi plain">Free;</code></div>
<div class="line number42 index41 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number43 index42 alt2"><code class="delphi keyword">end</code></div>
<div class="line number44 index43 alt1"><code class="delphi keyword">else</code></div>
<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>
<div class="line number46 index45 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number47 index46 alt2"><code class="delphi keyword">finally</code></div>
<div class="line number48 index47 alt1"><code class="delphi plain">SrcBmp</code><code class="delphi value">.</code><code class="delphi plain">Free;</code></div>
<div class="line number49 index48 alt2"><code class="delphi plain">TrgBmp</code><code class="delphi value">.</code><code class="delphi plain">Free;</code></div>
<div class="line number50 index49 alt1"><code class="delphi plain">Img</code><code class="delphi value">.</code><code class="delphi plain">Refresh;</code></div>
<div class="line number51 index50 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number52 index51 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div> </div>
<div>
<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>
<p>Sekarang kita coba gunakan kode di atas:</p>
<p> </p>
<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>
<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>
<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>
<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>
<div> </div>
<div>
<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>
<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>
<p>Image1 harus telah berisi gambar. Sedangkan CURRENT_IMG_TYPE harus dideklarasikan menjadi variabel global. Saya mendeklarasikannya segera setelah klause <strong>implementation</strong>.</p>
<p> </p>
<div>
<div id="highlighter_5367" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="delphi keyword">implementation</code></div>
<div class="line number2 index1 alt1"> </div>
<div class="line number3 index2 alt2"><code class="delphi color1">{$R *.dfm}</code></div>
<div class="line number4 index3 alt1"> </div>
<div class="line number5 index4 alt2"><code class="delphi keyword">var</code></div>
<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>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Berikut kode untuk memilih file gambar:</p>
<div>
<div id="highlighter_180728" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
</td>
<td class="code">
<div class="container">
<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>
<div class="line number2 index1 alt1"><code class="delphi keyword">begin</code></div>
<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>
<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>
<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>
<div class="line number6 index5 alt1"><code class="delphi plain">exit;</code></div>
<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>
<div class="line number8 index7 alt1"><code class="delphi comments">//ShowMessage(CURRENT_IMG_TYPE);</code></div>
<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>
<div class="line number10 index9 alt1"><code class="delphi keyword">begin</code></div>
<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>
<div class="line number12 index11 alt1"><code class="delphi plain">exit;</code></div>
<div class="line number13 index12 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<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>
<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>
<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>
<div class="line number17 index16 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Kode selengkapnya sebagai berikut:</p>
<div>
<div id="highlighter_163924" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
<div class="line number34 index33 alt1">34</div>
<div class="line number35 index34 alt2">35</div>
<div class="line number36 index35 alt1">36</div>
<div class="line number37 index36 alt2">37</div>
<div class="line number38 index37 alt1">38</div>
<div class="line number39 index38 alt2">39</div>
<div class="line number40 index39 alt1">40</div>
<div class="line number41 index40 alt2">41</div>
<div class="line number42 index41 alt1">42</div>
<div class="line number43 index42 alt2">43</div>
<div class="line number44 index43 alt1">44</div>
<div class="line number45 index44 alt2">45</div>
<div class="line number46 index45 alt1">46</div>
<div class="line number47 index46 alt2">47</div>
<div class="line number48 index47 alt1">48</div>
<div class="line number49 index48 alt2">49</div>
<div class="line number50 index49 alt1">50</div>
<div class="line number51 index50 alt2">51</div>
<div class="line number52 index51 alt1">52</div>
<div class="line number53 index52 alt2">53</div>
<div class="line number54 index53 alt1">54</div>
<div class="line number55 index54 alt2">55</div>
<div class="line number56 index55 alt1">56</div>
<div class="line number57 index56 alt2">57</div>
<div class="line number58 index57 alt1">58</div>
<div class="line number59 index58 alt2">59</div>
<div class="line number60 index59 alt1">60</div>
<div class="line number61 index60 alt2">61</div>
<div class="line number62 index61 alt1">62</div>
<div class="line number63 index62 alt2">63</div>
<div class="line number64 index63 alt1">64</div>
<div class="line number65 index64 alt2">65</div>
<div class="line number66 index65 alt1">66</div>
<div class="line number67 index66 alt2">67</div>
<div class="line number68 index67 alt1">68</div>
<div class="line number69 index68 alt2">69</div>
<div class="line number70 index69 alt1">70</div>
<div class="line number71 index70 alt2">71</div>
<div class="line number72 index71 alt1">72</div>
<div class="line number73 index72 alt2">73</div>
<div class="line number74 index73 alt1">74</div>
<div class="line number75 index74 alt2">75</div>
<div class="line number76 index75 alt1">76</div>
<div class="line number77 index76 alt2">77</div>
<div class="line number78 index77 alt1">78</div>
<div class="line number79 index78 alt2">79</div>
<div class="line number80 index79 alt1">80</div>
<div class="line number81 index80 alt2">81</div>
<div class="line number82 index81 alt1">82</div>
<div class="line number83 index82 alt2">83</div>
<div class="line number84 index83 alt1">84</div>
<div class="line number85 index84 alt2">85</div>
<div class="line number86 index85 alt1">86</div>
<div class="line number87 index86 alt2">87</div>
<div class="line number88 index87 alt1">88</div>
<div class="line number89 index88 alt2">89</div>
<div class="line number90 index89 alt1">90</div>
<div class="line number91 index90 alt2">91</div>
<div class="line number92 index91 alt1">92</div>
<div class="line number93 index92 alt2">93</div>
<div class="line number94 index93 alt1">94</div>
<div class="line number95 index94 alt2">95</div>
<div class="line number96 index95 alt1">96</div>
<div class="line number97 index96 alt2">97</div>
<div class="line number98 index97 alt1">98</div>
<div class="line number99 index98 alt2">99</div>
<div class="line number100 index99 alt1">100</div>
<div class="line number101 index100 alt2">101</div>
<div class="line number102 index101 alt1">102</div>
<div class="line number103 index102 alt2">103</div>
<div class="line number104 index103 alt1">104</div>
<div class="line number105 index104 alt2">105</div>
<div class="line number106 index105 alt1">106</div>
<div class="line number107 index106 alt2">107</div>
<div class="line number108 index107 alt1">108</div>
<div class="line number109 index108 alt2">109</div>
<div class="line number110 index109 alt1">110</div>
<div class="line number111 index110 alt2">111</div>
<div class="line number112 index111 alt1">112</div>
<div class="line number113 index112 alt2">113</div>
<div class="line number114 index113 alt1">114</div>
<div class="line number115 index114 alt2">115</div>
<div class="line number116 index115 alt1">116</div>
<div class="line number117 index116 alt2">117</div>
<div class="line number118 index117 alt1">118</div>
<div class="line number119 index118 alt2">119</div>
<div class="line number120 index119 alt1">120</div>
<div class="line number121 index120 alt2">121</div>
<div class="line number122 index121 alt1">122</div>
<div class="line number123 index122 alt2">123</div>
<div class="line number124 index123 alt1">124</div>
<div class="line number125 index124 alt2">125</div>
<div class="line number126 index125 alt1">126</div>
<div class="line number127 index126 alt2">127</div>
<div class="line number128 index127 alt1">128</div>
<div class="line number129 index128 alt2">129</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="delphi keyword">unit</code> <code class="delphi plain">umain;</code></div>
<div class="line number2 index1 alt1"> </div>
<div class="line number3 index2 alt2"><code class="delphi keyword">interface</code></div>
<div class="line number4 index3 alt1"> </div>
<div class="line number5 index4 alt2"><code class="delphi keyword">uses</code></div>
<div class="line number6 index5 alt1"><code class="delphi plain">Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,</code></div>
<div class="line number7 index6 alt2"><code class="delphi plain">Dialogs, StdCtrls, Spin, ExtCtrls, ExtDlgs, JPEG;</code></div>
<div class="line number8 index7 alt1"> </div>
<div class="line number9 index8 alt2"><code class="delphi keyword">type</code></div>
<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>
<div class="line number11 index10 alt2"><code class="delphi plain">SpinEdit1: TSpinEdit;</code></div>
<div class="line number12 index11 alt1"><code class="delphi plain">Edit1: TEdit;</code></div>
<div class="line number13 index12 alt2"><code class="delphi plain">Edit2: TEdit;</code></div>
<div class="line number14 index13 alt1"><code class="delphi plain">Label1: TLabel;</code></div>
<div class="line number15 index14 alt2"><code class="delphi plain">Label2: TLabel;</code></div>
<div class="line number16 index15 alt1"><code class="delphi plain">Button1: TButton;</code></div>
<div class="line number17 index16 alt2"><code class="delphi plain">OpenPictureDialog1: TOpenPictureDialog;</code></div>
<div class="line number18 index17 alt1"><code class="delphi plain">Panel1: TPanel;</code></div>
<div class="line number19 index18 alt2"><code class="delphi plain">Image1: TImage;</code></div>
<div class="line number20 index19 alt1"><code class="delphi plain">Label3: TLabel;</code></div>
<div class="line number21 index20 alt2"><code class="delphi plain">Button2: TButton;</code></div>
<div class="line number22 index21 alt1"><code class="delphi keyword">procedure</code> <code class="delphi plain">FormCreate(Sender: TObject);</code></div>
<div class="line number23 index22 alt2"><code class="delphi keyword">procedure</code> <code class="delphi plain">Button1Click(Sender: TObject);</code></div>
<div class="line number24 index23 alt1"><code class="delphi keyword">procedure</code> <code class="delphi plain">Button2Click(Sender: TObject);</code></div>
<div class="line number25 index24 alt2"><code class="delphi keyword">private</code></div>
<div class="line number26 index25 alt1"><code class="delphi comments">{ Private declarations }</code></div>
<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>
<div class="line number28 index27 alt1"><code class="delphi keyword">public</code></div>
<div class="line number29 index28 alt2"><code class="delphi comments">{ Public declarations }</code></div>
<div class="line number30 index29 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number31 index30 alt2"> </div>
<div class="line number32 index31 alt1"><code class="delphi keyword">var</code></div>
<div class="line number33 index32 alt2"><code class="delphi plain">Form3: TForm3;</code></div>
<div class="line number34 index33 alt1"> </div>
<div class="line number35 index34 alt2"><code class="delphi keyword">implementation</code></div>
<div class="line number36 index35 alt1"> </div>
<div class="line number37 index36 alt2"><code class="delphi color1">{$R *.dfm}</code></div>
<div class="line number38 index37 alt1"> </div>
<div class="line number39 index38 alt2"><code class="delphi keyword">var</code></div>
<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>
<div class="line number41 index40 alt2"> </div>
<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>
<div class="line number43 index42 alt2"><code class="delphi keyword">begin</code></div>
<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>
<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>
<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>
<div class="line number47 index46 alt2"><code class="delphi plain">exit;</code></div>
<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>
<div class="line number49 index48 alt2"><code class="delphi comments">//ShowMessage(CURRENT_IMG_TYPE);</code></div>
<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>
<div class="line number51 index50 alt2"><code class="delphi keyword">begin</code></div>
<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>
<div class="line number53 index52 alt2"><code class="delphi plain">exit;</code></div>
<div class="line number54 index53 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<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>
<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>
<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>
<div class="line number58 index57 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number59 index58 alt2"> </div>
<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>
<div class="line number61 index60 alt2"><code class="delphi keyword">begin</code></div>
<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>
<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>
<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>
<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>
<div class="line number66 index65 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number67 index66 alt2"> </div>
<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>
<div class="line number69 index68 alt2"><code class="delphi keyword">begin</code></div>
<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>
<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>
<div class="line number72 index71 alt1"><code class="delphi comments">//SpinEdit1.ReadOnly := True;</code></div>
<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>
<div class="line number74 index73 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number75 index74 alt2"> </div>
<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>
<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>
<div class="line number78 index77 alt1"><code class="delphi keyword">var</code></div>
<div class="line number79 index78 alt2"><code class="delphi plain">SrcBmp, TrgBmp: TBitmap;</code></div>
<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>
<div class="line number81 index80 alt2"><code class="delphi plain">Jpg: TJPEGImage;</code></div>
<div class="line number82 index81 alt1"><code class="delphi keyword">begin</code></div>
<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>
<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>
<div class="line number85 index84 alt2"><code class="delphi comments">//else, do not resize.</code></div>
<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>
<div class="line number87 index86 alt2"><code class="delphi keyword">begin</code></div>
<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>
<div class="line number89 index88 alt2"><code class="delphi plain">exit;</code></div>
<div class="line number90 index89 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<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>
<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>
<div class="line number93 index92 alt2"> </div>
<div class="line number94 index93 alt1"><code class="delphi keyword">try</code></div>
<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>
<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>
<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>
<div class="line number98 index97 alt1"><code class="delphi plain">NewW := W * ScaleFactor;</code></div>
<div class="line number99 index98 alt2"><code class="delphi plain">NewH := H * ScaleFactor;</code></div>
<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>
<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>
<div class="line number102 index101 alt1"> </div>
<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>
<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>
<div class="line number105 index104 alt2"><code class="delphi plain">W, H, SRCCOPY) </code><code class="delphi keyword">then</code></div>
<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>
<div class="line number107 index106 alt2"><code class="delphi keyword">else</code></div>
<div class="line number108 index107 alt1"><code class="delphi keyword">begin</code></div>
<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>
<div class="line number110 index109 alt1"><code class="delphi keyword">begin</code></div>
<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>
<div class="line number112 index111 alt1"><code class="delphi keyword">try</code></div>
<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>
<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>
<div class="line number115 index114 alt2"><code class="delphi keyword">finally</code></div>
<div class="line number116 index115 alt1"><code class="delphi plain">Jpg</code><code class="delphi value">.</code><code class="delphi plain">Free;</code></div>
<div class="line number117 index116 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number118 index117 alt1"><code class="delphi keyword">end</code></div>
<div class="line number119 index118 alt2"><code class="delphi keyword">else</code></div>
<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>
<div class="line number121 index120 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number122 index121 alt1"><code class="delphi keyword">finally</code></div>
<div class="line number123 index122 alt2"><code class="delphi plain">SrcBmp</code><code class="delphi value">.</code><code class="delphi plain">Free;</code></div>
<div class="line number124 index123 alt1"><code class="delphi plain">TrgBmp</code><code class="delphi value">.</code><code class="delphi plain">Free;</code></div>
<div class="line number125 index124 alt2"><code class="delphi plain">Img</code><code class="delphi value">.</code><code class="delphi plain">Refresh;</code></div>
<div class="line number126 index125 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number127 index126 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number128 index127 alt1"> </div>
<div class="line number129 index128 alt2"><code class="delphi keyword">end</code><code class="delphi plain">.</code></div>
</div>
</td>
</tr>
<tr>
<td>
<div class="line number1 index0 alt2"> </div>
</td>
<td>
<div class="container">
<div class="line number1 index0 alt2"> </div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Bila dijalankan, kita akan mendapatkan sebuah aplikasi sederhana untuk mengubah ukuran gambar sesuai skala tertentu.</p>
<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>
</div>
</div>
]]>
</content>
</entry>
<entry>
<title>Screen Capture Menggunakan Delphi</title>
<author>
<name>Grup KPPDI</name>
</author>
<link href="https://kppdi.github.io/screen-capture-menggunakan-delphi/"/>
<id>https://kppdi.github.io/screen-capture-menggunakan-delphi/</id>
<category term="Tutorial"/>
<category term="Sample App"/>
<updated>2020-08-02T19:43:02+08:00</updated>
<summary>
<![CDATA[
<img src="https://kppdi.github.io/media/posts/4/winsnap_delphi_snapshot_screen_caputure.png" alt="" />
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…
]]>
</summary>
<content type="html">
<![CDATA[
<img src="https://kppdi.github.io/media/posts/4/winsnap_delphi_snapshot_screen_caputure.png" alt="" />
<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>
<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>
<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>
<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>
<div>
<div id="highlighter_472360" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
</td>
<td class="code">
<div class="container">
<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>
<div class="line number2 index1 alt1"><code class="delphi keyword">var</code></div>
<div class="line number3 index2 alt2"><code class="delphi plain">DC: TCanvas;</code></div>
<div class="line number4 index3 alt1"><code class="delphi plain">HDesk: THandle;</code></div>
<div class="line number5 index4 alt2"><code class="delphi plain">HCanvas: HDC;</code></div>
<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>
<div class="line number7 index6 alt2"><code class="delphi keyword">begin</code></div>
<div class="line number8 index7 alt1"><code class="delphi plain">HDesk := GetDesktopWindow;</code></div>
<div class="line number9 index8 alt2"><code class="delphi plain">RefreshDesktop;</code></div>
<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>
<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>
<div class="line number12 index11 alt1"><code class="delphi keyword">try</code></div>
<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>
<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>
<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>
<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>
<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>
<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>
<div class="line number19 index18 alt2"><code class="delphi keyword">finally</code></div>
<div class="line number20 index19 alt1"><code class="delphi plain">DC</code><code class="delphi value">.</code><code class="delphi plain">Free;</code></div>
<div class="line number21 index20 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number22 index21 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Pada kode di atas, kita temui beberapa fungsi:</p>
<ul>
<li>GetDesktopWindow() untuk mengambil handle desktop Windows.</li>
<li>GetWindowDC(handleWindow) untuk mengambil handle device context, dalam hal ini desktop Windows.</li>
<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>
</ul>
<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>
<div>
<div id="highlighter_685587" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
</td>
<td class="code">
<div class="container">
<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>
<div class="line number2 index1 alt1"><code class="delphi keyword">try</code></div>
<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>
<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>
<div class="line number5 index4 alt2"><code class="delphi keyword">finally</code></div>
<div class="line number6 index5 alt1"><code class="delphi plain">jpg</code><code class="delphi value">.</code><code class="delphi plain">Free;</code></div>
<div class="line number7 index6 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Dalam contoh kode yang tersedia untuk didownload, juga tersedia sebuah fungsi untuk memotong gambar sehingga hanya bagian tertentu saja yang diambil.</p>
<p>Berikut tampilan contoh aplikasi:</p>
<div class="gallery-wrapper"><div class="gallery" data-is-empty="false" data-columns="4">
<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>
<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>
<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>
<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>
</div></div>
]]>
</content>
</entry>
<entry>
<title>Save Setting Koneksi ke File INI</title>
<author>
<name>Grup KPPDI</name>
</author>
<link href="https://kppdi.github.io/save-setting-koneksi-ke-file-ini/"/>
<id>https://kppdi.github.io/save-setting-koneksi-ke-file-ini/</id>
<category term="Tutorial"/>
<updated>2020-08-02T19:43:02+08:00</updated>
<summary>
<![CDATA[
<img src="https://kppdi.github.io/media/posts/3/desain-form-parameter-koneksi.png" alt="" />
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…
]]>
</summary>
<content type="html">
<![CDATA[
<img src="https://kppdi.github.io/media/posts/3/desain-form-parameter-koneksi.png" alt="" />
<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>
" 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>
<p id="caption-attachment-1051" class="wp-caption-text">Zeos Connection Settings</p>
</div>
<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>
<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>
<p>Kini, giliran setting koneksi yang akan kita bahas. Mulai dari mengetes koneksi, menyimpannya ke file INI/CFG, sampai membacanya kembali.</p>
<p><span id="more-1050"></span><strong>MENGETES KONEKSI</strong></p>
<p>Pertama, kita mengetes koneksi (Zeos) dengan cara seperti berikut:</p>
<div>
<div id="highlighter_472659" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
</td>
<td class="code">
<div class="container">
<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>
<div class="line number2 index1 alt1"><code class="delphi plain">ZConnection1</code><code class="delphi value">.</code><code class="delphi plain">Disconnect;</code></div>
<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>
<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>
<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>
<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>
<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>
<div class="line number8 index7 alt1"><code class="delphi keyword">try</code></div>
<div class="line number9 index8 alt2"><code class="delphi plain">ZConnection1</code><code class="delphi value">.</code><code class="delphi plain">Connect;</code></div>
<div class="line number10 index9 alt1"><code class="delphi plain">ShowMessage(</code><code class="delphi string">'Terkoneksi.'</code><code class="delphi plain">);</code></div>
<div class="line number11 index10 alt2"><code class="delphi keyword">except</code></div>
<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>
<div class="line number13 index12 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Bila parameter koneksi benar, kita akan mendapatkan pesan seperti berikut:</p>
<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>
" 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>
<p id="caption-attachment-1056" class="wp-caption-text">Save Setting Koneksi ke File INI</p>
</div>
<p><strong>MENYIMPAN SETTING KONEKSI KE FILE</strong></p>
<p>Nah, kini kita buat sebuah form baru dengan inputan parameter koneksi:</p>
<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>
" 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>
<p id="caption-attachment-1057" class="wp-caption-text">Desain Form Parameter Koneksi</p>
</div>
<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>
<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>
<p>Saatnya koding 🙂</p>
<p>Format file yang akan kita pakai bukan file INI yang beformat:</p>
<div>
<div id="highlighter_411340" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="delphi plain">[SETTINGS]</code></div>
<div class="line number2 index1 alt1"><code class="delphi plain">server=localhost</code></div>
<div class="line number3 index2 alt2"><code class="delphi plain">port=</code><code class="delphi value">3306</code></div>
<div class="line number4 index3 alt1"><code class="delphi plain">............. dst.</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Melainkan file berformat flat, yaitu pasangan <strong>nama:nilai</strong>, dengan tanda <strong>titik ganda (:)</strong> sebagai pemisah.</p>
<div>
<div id="highlighter_520429" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
</td>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="delphi plain">#INI ADALAH KOMENTAR</code></div>
<div class="line number2 index1 alt1"><code class="delphi plain">server=localhost</code></div>
<div class="line number3 index2 alt2"><code class="delphi plain">port=</code><code class="delphi value">3306</code></div>
<div class="line number4 index3 alt1"><code class="delphi plain">............. dst.</code></div>
<div class="line number5 index4 alt2"><code class="delphi plain">%INI KOMENTAR</code></div>
<div class="line number6 index5 alt1"><code class="delphi comments">//INI JUGA KOMENTAR</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>Klik ganda tombol Save Setting, ketikkan kode seperti berikut:</p>
<div>
<div id="highlighter_567088" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>
<div class="line number27 index26 alt2">27</div>
<div class="line number28 index27 alt1">28</div>
<div class="line number29 index28 alt2">29</div>
<div class="line number30 index29 alt1">30</div>
<div class="line number31 index30 alt2">31</div>
<div class="line number32 index31 alt1">32</div>
<div class="line number33 index32 alt2">33</div>
</td>
<td class="code">
<div class="container">
<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>
<div class="line number2 index1 alt1"><code class="delphi keyword">var</code></div>
<div class="line number3 index2 alt2"><code class="delphi plain">NamaFile: </code><code class="delphi keyword">String</code><code class="delphi plain">;</code></div>
<div class="line number4 index3 alt1"><code class="delphi plain">List: TStringList;</code></div>
<div class="line number5 index4 alt2"><code class="delphi keyword">begin</code></div>
<div class="line number6 index5 alt1"><code class="delphi comments">//File berada dalam satu folder dengan aplikasi</code></div>
<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>
<div class="line number8 index7 alt1"><code class="delphi comments">//ganti nama file dengan ekstensi .sav</code></div>
<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>
<div class="line number10 index9 alt1"> </div>
<div class="line number11 index10 alt2"><code class="delphi comments">//Buat List untuk menampung setting koneksi</code></div>
<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>
<div class="line number13 index12 alt2"><code class="delphi keyword">try</code></div>
<div class="line number14 index13 alt1"><code class="delphi comments">//tentukan tanda ":" sebagai pemisah nama dan nilai</code></div>
<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>
<div class="line number16 index15 alt1"><code class="delphi comments">//tampung parameter</code></div>
<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>
<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>
<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>
<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>
<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>
<div class="line number22 index21 alt1"><code class="delphi comments">//Save ke file</code></div>
<div class="line number23 index22 alt2"><code class="delphi keyword">try</code></div>
<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>
<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>
<div class="line number26 index25 alt1"><code class="delphi keyword">except</code></div>
<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>
<div class="line number28 index27 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number29 index28 alt2"><code class="delphi keyword">finally</code></div>
<div class="line number30 index29 alt1"><code class="delphi comments">//Jangan lupa membebaskan memory</code></div>
<div class="line number31 index30 alt2"><code class="delphi plain">List</code><code class="delphi value">.</code><code class="delphi plain">Free;</code></div>
<div class="line number32 index31 alt1"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
<div class="line number33 index32 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<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>
<div>
<div id="highlighter_141854" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
</td>
<td class="code">
<div class="container">
<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>
<div class="line number2 index1 alt1"><code class="delphi keyword">begin</code></div>
<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>
<div class="line number4 index3 alt1"><code class="delphi plain">Key := #</code><code class="delphi value">0</code><code class="delphi plain">;</code></div>
<div class="line number5 index4 alt2"><code class="delphi keyword">end</code><code class="delphi plain">;</code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<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>
<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>
<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>
" 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>
<p id="caption-attachment-1060" class="wp-caption-text">Setting koneksi telah disimpan</p>
</div>
<p><strong>MEMBACA KONEKSI TERSIMPAN</strong></p>
<p>Saatnya kuis. Eh, saatnya membaca kembali setting koneksi tadi 🙂</p>
<p>Langsung saja, klik ganda tombol Load Setting dan masukkan kode:</p>
<div>
<div id="highlighter_352087" class="syntaxhighlighter delphi">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="gutter">
<div class="line number1 index0 alt2">1</div>
<div class="line number2 index1 alt1">2</div>
<div class="line number3 index2 alt2">3</div>
<div class="line number4 index3 alt1">4</div>
<div class="line number5 index4 alt2">5</div>
<div class="line number6 index5 alt1">6</div>
<div class="line number7 index6 alt2">7</div>
<div class="line number8 index7 alt1">8</div>
<div class="line number9 index8 alt2">9</div>
<div class="line number10 index9 alt1">10</div>
<div class="line number11 index10 alt2">11</div>
<div class="line number12 index11 alt1">12</div>
<div class="line number13 index12 alt2">13</div>
<div class="line number14 index13 alt1">14</div>
<div class="line number15 index14 alt2">15</div>
<div class="line number16 index15 alt1">16</div>
<div class="line number17 index16 alt2">17</div>
<div class="line number18 index17 alt1">18</div>
<div class="line number19 index18 alt2">19</div>
<div class="line number20 index19 alt1">20</div>
<div class="line number21 index20 alt2">21</div>
<div class="line number22 index21 alt1">22</div>
<div class="line number23 index22 alt2">23</div>
<div class="line number24 index23 alt1">24</div>
<div class="line number25 index24 alt2">25</div>
<div class="line number26 index25 alt1">26</div>