Delphi / Kylix / Lazarus / Linux / Programming / Windows

Contoh Pemrograman Component Dengan Delphi


Dalam pemrograman berbasis rad, component adalah hal yang mutlak yang harus diketahui. Borland delphi sangat kaya akan component yang bisa dipakai untuk mengembangkan aplikasi. Hal yang unik dari delphi adalah component delphi dibuat dengan delphi, sehingga delphi sangat flexible.

Dari sisi sudut pandang, pemrograman component sangatlah beda dengan pemrograman aplikasi secara umum. Kalau pemrograman aplikasi, orientasinya dititik beratkan pada pemakai akhir (end user) yang akan menggunakan aplikasi tersebut, yaitu bagaimana caranya agar user mudah mengoperasikan aplikasi, fleksibel, dan sebagainya. Sedangkan sudut pandang component writer/programmer adalah bagaimana caranya agar programmer yang akan memakai component-nya dapat memenuhi kebutuhan sang programmer. Sehingga sang programmer pemakai component tersebut tidak perlu lagi menulis kode program (yang mungkin sangat kompleks) yang sama sampai berulang-ulang hingga dapat menghemat waktu, tenaga dan biaya.

Di bawah ini adalah contoh komponent sederhana turunan dari TEdit,Saya namakan TReshiEdit. Fitur yang saya contohkan disini adalah untuk mengubah warna EditBox saat terfokus, dan kembali ke warna sebelumnya saat fokus meninggalkan EditBox, Serta pilihan fungsi edi, yakni untuk input telephone, input normal, dan input angka. Disini juga dikenalkan fungsi propercase, yakni untuk mengubah semua huruf awal dari sebuah kata menjadi huruf besar.

Listing programnya adalah sebagai berikut :

{**********************************************************************
Author : I GEDE MADE RESHI MAHENDRA
Copyright © 2005-2006
E-mail: reshimahendra@reshimahendra.net.tf
reshimhendra@gmail.com
Web: http://www.reshimahendra.net
Component Name : TReshiEdit

**********************************************************************}
unit DrakeCommon;

interface

uses
SysUtils, Messages,Classes, Controls, StdCtrls, Forms, Graphics, WinProcs;

Const
Author = ‘Copyright(C) I Gede Made Reshi Mahendra (reshimahendra@gmail.com)’;

{******************
** DRAKE EDIT **
******************}
type
//Mode Caracter Case
TCaseMode = (cmNormal, cmProperCase, cmLowerCase, cmUpperCase);

//Mode Type Edit
TEditStyle = (esNormal,esPhone, esNumeric);

TreshiCustomEdit = class(TCustomEdit)
private
FAbout : String;
FAlignment: TAlignment;
FEnterLikeTab : boolean;
FFocusedColor: TColor;
FCaseMode: TCaseMode;
FMouseINColor: TColor;
FMouseOutColor: TColor;
FMousePos : Boolean;
FEditStyle: TEditStyle;
FUnFocusedColor: TColor;
FCanEmpty: Boolean;

procedure setAbout(Value: String);
procedure SetEditStyle(Value: TEditStyle);
procedure setAlignment(Value: TAlignment);
procedure setFocusedColor(Value: TColor);
procedure setCaseMode(Value: TCaseMode);
procedure setUnFocusedColor(Value: TColor);
procedure setCanEmpty(Value: Boolean);

protected
procedure doEnter;override;
procedure doExit;override;
procedure keyPress(Var Key:Char);override;
procedure KeyDown(var Key: Word; Shift: TShiftState);override;

//CustomProperty
property Alignment : TAlignment
read FAlignment write setAlignment default taLeftJustify;
property FocusedColor : TColor
read FFocusedColor write setFocusedColor default clSkyBlue;
property UnFocusedColor : TColor
read FUnFocusedColor write setUnFocusedColor default clWhite;
property CharCase : TCaseMode
read FCaseMode write setCaseMode default cmNormal;
property EnterLikeTab : boolean
read FEnterLikeTab write FEnterLikeTab;
property EditStyle : TEditStyle
read FEditStyle write setEditStyle default esNormal;

public
procedure CreateParams (var Params: TCreateParams);Override;

constructor Create (AOwner : TComponent);override;
destructor destroy;override;

//Additional procedure/ function
function IsBlank:boolean;
published
property About : String
read FAbout write setAbout;
property CanEmpty : Boolean
read FCanEmpty write setCanEmpty default True;

End;

TreshiEdit = Class(TreshiCustomEdit)
published
Property About; property Alignment;
property FocusedColor; property UnFocusedColor;
property EnterLikeTab; property CharCase;
property EditStyle; property PasswordChar;
property Text; property Color;
property DragCursor; property DragMode;
property Enabled; property Font;
property HideSelection; property ParentColor;
property ParentCtl3D; property ParentFont;
property ParentShowHint; property PopupMenu;
property ReadOnly; property ShowHint;
property TabOrder; property TabStop;
property Visible; property MaxLength;

property OnChange; property OnClick;
property OnDblClick; property OnDragDrop;
property OnDragOver; property OnEndDrag;
property OnEnter; property OnExit;
property OnKeyDown; property OnKeyPress;
property OnKeyUp; property OnMouseDown;
property OnMouseMove; property OnMouseUp;
end;

procedure Register;

implementation

uses Windows;

procedure Register;
begin
RegisterComponents(‘Reshi Mahendra’, [TReshiEdit]);
end;

{ TreshiEdit }

constructor TreshiCustomEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FAbout := Author;
FCanEmpty := True;
BevelKind := bkFlat;
BorderStyle := bsNone;
FFocusedColor := clSkyBlue;
FUnFocusedColor := clWhite;
FMousePos := true;
FMouseINColor := clInfoBk;
FMouseOutColor := clWhite;
ControlStyle := ControlStyle – [csSetCaption];
Height := 21;
Text := ”;
FAlignment := taLeftJustify;
FEnterLikeTab := true;

//Disable popup
PopupMenu := nil;
end;

procedure TreshiCustomEdit.setCanEmpty(Value: Boolean);
begin
if FCanEmpty<>value then begin
FCanEmpty := Value;
Invalidate;
end;
end;

procedure TreshiCustomEdit.doExit;
begin
Color := FUnFocusedColor;

Text := Trim(Text);
Invalidate;

inherited doExit;
end;

procedure TreshiCustomEdit.KeyDown(var Key: Word; Shift: TShiftState);
var
FEditTemp : TCustomForm;
begin
inherited KeyDown(Key,Shift);

if (Key = 13) and FEnterLikeTab then
begin
FEditTemp := GetParentForm(Self);

SendMessage(FEditTemp.Handle, WM_NEXTDLGCTL, 0, 0);
Key := 0;
exit;
end;

end;

procedure TreshiCustomEdit.keyPress(Var Key:Char);
Function IsNumeric : boolean;
begin
Result := (Key in [‘0’..’9′]) or (key =#13) or (Key = #8) //numeric,CariageReturn & BackSpace
end;
begin
inherited keyPress(key);
if (FEditStyle = esPhone) then begin
If not((IsNumeric)
Or (Key = #32) //space
or (Key = #40) // ‘(‘
or (Key = #41) // ‘)’
or (Key = #43) // ‘+’ for country code
or (Key = #45)) then // ‘-‘
Key := #0;
end else if (FEditStyle = esNumeric) then begin
if not IsNumeric then Key := #0;
end;

case FCaseMode of
cmProperCase : begin
if (SelStart = 0) or (Text[SelStart] = ‘ ‘) then
Key := AnsiUpperCase(Key)[1];
end;
cmUpperCase : begin
Key := AnsiUpperCase(Key)[1];
end;
cmLowerCase : begin
Key := AnsiLowerCase(Key)[1];
end;
end;

Invalidate;
end;

procedure TreshiCustomEdit.SetEditStyle(Value: TEditStyle);
begin
if (FEditStyle <> value) then begin
FEditStyle := Value;

if (FEditStyle = esPhone) then begin
Alignment := taLeftJustify;
Text := ‘(999)-99999999’;
end
else if (FEditStyle = esNormal) then begin
Alignment := taLeftJustify;
Clear;
end else if (FEditStyle = esNumeric) then begin
Alignment := taRightJustify;
Clear;
end;
end;
end;

destructor TreshiCustomEdit.destroy;
begin
inherited destroy;
end;

procedure TreshiCustomEdit.CreateParams(var Params: TCreateParams);
const
Alignments: array[TAlignment] of Word = (ES_LEFT, ES_RIGHT, ES_CENTER);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or Alignments[FAlignment];
end;

procedure TreshiCustomEdit.setAlignment(Value: TAlignment);
var
theSelStart, theSelLength : Byte;
begin
if FAlignment <> Value then
begin
theSelStart := SelStart;
theSelLength := SelLength;
FAlignment := Value;
RecreateWnd;
SelStart := theSelStart;
SelLength := theSelLength;
end;
end;

procedure TreshiCustomEdit.setUnFocusedColor(Value: TColor);
begin
if FUnFocusedColor <> value then begin
FUnFocusedColor := Value;
invalidate;
end;
end;

procedure TreshiCustomEdit.doEnter;
begin
Color := FFocusedColor;
Text := Trim(Text);
Invalidate;

inherited doEnter;
end;

procedure TreshiCustomEdit.setFocusedColor(Value: TColor);
begin
if (FFocusedColor <> value) then
begin
FFocusedColor := Value;
Invalidate;
end;
end;

procedure TreshiCustomEdit.setCaseMode(Value: TCaseMode);
begin
if (FCaseMode <> Value) then
begin
FCaseMode := Value;
Invalidate;
end;
end;

function TreshiCustomEdit.IsBlank: boolean;
begin
Result := Text = ”;
end;

procedure TreshiCustomEdit.setAbout(Value: String);
begin
FAbout := Author;
end;

end.

Apabila ada pertanyaan, mail saya di reshimahendra@gmail.com

kalau saya bisa jawab pertanyaan rekan-rekan, saya akan reply pesan rekan-rekan. Saya harap, kita bisa belajar bersama-sama dan dapat memajukan IT di indonesia.

Terima kasih

Reshi Mahendra

11 thoughts on “Contoh Pemrograman Component Dengan Delphi

  1. mas ajarin saya tetntang delphi 5
    soalnya saya lagi coba bikin sms center
    yang jadi masalah
    bagaimana cara agar saat ada request server bisa mengirim langsung sms permintaannya. saya databasenya menggunakan ms acces. tolong ya mas sourcenya dikiriminmin

  2. hai sy sedang meniti karir kecil2an buat software lewat Delphi…
    Bisabantu dak bagaimana menggunakan FIREBIRD karena sementara ini sy menggunakan SQL SERVER dimana bisa dibuat stored procedure dll.
    kalau di firebird gimana caranya?
    trus yang ke 2 …dimana dapatkan skin form yang bagus?karena suiskin ketika digunakan dan dirun muncul window popup …aku coba yang almdev jg sama kl yang trial.:)

  3. @Jerry
    1. Bikin stored procedure pada dasarnya sama saja, cuma DDL-nya agak beda dikit… coba googling dengan keyword Firebird StoredProcedure atau langsung aja masuk ke http://www.ibphoenix.com, disana juga banyak tutornya… kalo mas jerry mau, ada juga groupnya di yahoogroup, tapi saya lupa namanya🙂
    2. Skin Yang Bagus Pake VCL Skin (http://www.link-rank.com)
    Dia udah langsung skining VCL-nya, jadi ga perlu lagi pake komponent tambahan (misalnya edit,combobox yang dari bawaan component skinable, dll)

  4. mas,cara menanpilkan gambar,trus mengganti-ganti gambar dengan model Slide pada delphi dengan menggunakan tombol Next & Prev pada komponen mediaplayer bisa g’?

  5. @Heru
    kalo pake mediaplayer saya belum pernah coba mas..tapi kalo via Image dan property left-nya dimanipulasi sesuai arah slide (kalo menyamping/ propety top kalo arah menurun/naik) bisa,.cuma biasanya banyak flick.. harus disertai refresh/invalidate setiap kali geser.. misal

    var x,xjump:integer;//xjump adalah integer penambah untuk besaran geser
    { blablablabla}
    //Geser static dari kiri ke kanan
    x:=0-(image1.left+1);//sembunyikan gambar/image1
    while (x<=self.width) do begin
    image1.left := x+xjump;
    invalidate;
    end;

    untuk arah sebaliknya,tinggal diedit lagi dikit saja..

    semoga membantu

  6. mas, mau nanya ne, saya mau membuat aplikasi kirim MMS melalui PC, pakai komponen oxygen bisa g’ mas ??, dan pakai HP apa yang dapat mengirim aplikasi MMS nya ???,

  7. wah…mas keperluan saya sama dengan sodara iPunk mengenai aplikasi kirim MMS…….
    kira2 mas sudah punya refrensi baru ato contoh listing program yang membantu……????
    trims….

  8. hendra yg ckep…
    haha😀
    mw tny ni gan, q ada maslah dengan tgs SMS pollingq…
    si Delphi kan g pny FBUS for delphi, tp q coba component oxygenNy…
    stelah q install kok di start windowsnya ” VB pRoject “. apa tu g mslh gan?
    terus di component Oxygen tu sendiri diharuskan pakek MYSql?
    apa bner?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s