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 edit, 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.
Sour Code :
{********************************************************************** Author : HENDI KUSNADI Copyright © 2013-2014 E-mail: hendykusnady5@gmail.com Web: http://hendi-kusnadi.blogspot.com Component Name : TReshiEdit Feature : - Edit Mode : * esNormal, just like TEdit * esPhone, only receive Numeric and special caracter for phone only (E.g '(',')', '-','+',Backspace,and Return) - Alignment implementation TEdit - Draw color OnEnter an OnExit - Check if the edit is blank or empty **********************************************************************} unit TReshiEdit; interface uses SysUtils, Spin, Graphics, Buttons, Messages,Classes, Controls, ComCtrls, StdCtrls, Forms, WinProcs; Const AuthorName = 'Copyright(C) I Gede Made Reshi Mahendra (mahendra.reshi@gmail.com)'; {****************** ** Reshi EDIT ** ******************} type //Mode Caracter Case TCaseMode = (cmNormal, cmProperCase, cmLowerCase, cmUpperCase); //Mode Type Edit TEditStyle = (esNormal,esPhone, esNumeric); TReshiCustomEdit = class(TCustomEdit) private FAlignment: TAlignment; FEnterLikeTab : boolean; FFocusedColor: TColor; FCaseMode: TCaseMode; FMouseINColor: TColor; FMouseOutColor: TColor; FMousePos : Boolean; FEditStyle: TEditStyle; FUnFocusedColor: TColor; FCanEmpty: Boolean; FReadOnlyColor: TColor; function GetAbout: String; procedure setReadOnlyColor(const Value: TColor); 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; property ReadOnlyColor : TColor read FReadOnlyColor write setReadOnlyColor default clSkyBlue; 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 GetAbout; 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 ReadOnlyColor; 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 { TReshiEdit } procedure Register; begin RegisterComponents('Hendi Kusnadi', [TReshiEdit]); end; constructor TReshiCustomEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); FCanEmpty := True; BevelKind := bkFlat; BorderStyle := bsNone; FFocusedColor := clSkyBlue; FUnFocusedColor := clWhite; FReadOnlyColor := clSkyBlue; FMousePos := true; FMouseINColor := clInfoBk; FMouseOutColor := clWhite; ControlStyle := ControlStyle - [csSetCaption]; Height := 21; 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; /////////////////////////////////// // OVERRIDING THE KEYPRESS EVENT // /////////////////////////////////// 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; ///////////////////////////////////////////////////// // SET THE CASE MODE AFTER USER CLICK THE KEYBOARD // ///////////////////////////////////////////////////// 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; //////////////////////////// // CHANGE THE EDIT STYLE // //////////////////////////// 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.setReadOnlyColor(const Value: TColor); begin if ReadOnly then begin FUnFocusedColor := FReadOnlyColor; FFocusedColor := FReadOnlyColor; Color := FReadOnlyColor; end else begin FUnFocusedColor := clWhite; FFocusedColor := clSkyBlue; Color := clWhite; end; Invalidate; end; function TReshiCustomEdit.GetAbout: String; begin Result := AuthorName; end; end.
Selamat Mencoba
Salam
Hendi Kusnadi
Post a Comment for "Contoh Pemrograman Component dengan Delphi"