Sabtu, 14 Mei 2016

Tutorial Transformasi 2D di Delphi 7




Assalamualaikum...
kembali lagi untuk berbagi ilmu nih...






 full code :
unit Utama;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    editx1: TEdit;
    edity1: TEdit;
    editx2: TEdit;
    edity2: TEdit;
    ScrollBox1: TScrollBox;
    Image1: TImage;
    btnbintang: TButton;
    btnclear: TButton;
    btnclose: TButton;
    Label5: TLabel;
    Label6: TLabel;
    editTX: TEdit;
    editTy: TEdit;
    Label8: TLabel;
    editR: TEdit;
    btnTrans: TButton;
    btnScaling: TButton;
    btnRotasi: TButton;
    Label9: TLabel;
    editS: TEdit;
    Timer1: TTimer;
    Button1: TButton;
    editTimer: TEdit;
    Timer2: TTimer;
    Timer3: TTimer;
    Button2: TButton;
    Button3: TButton;
    Label10: TLabel;
    btnppscaling: TButton;
    btnpprotasi: TButton;
    Label7: TLabel;
    Label11: TLabel;
    editPx: TEdit;
    editPy: TEdit;
    btnPivot: TButton;
    procedure btnbintangClick(Sender: TObject);
    procedure btnclearClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btncloseClick(Sender: TObject);
    procedure btnRotasiClick(Sender: TObject);
    procedure btnTransClick(Sender: TObject);
    procedure btnScalingClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer2Timer(Sender: TObject);
    procedure Timer3Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure btnppscalingClick(Sender: TObject);
    procedure btnpprotasiClick(Sender: TObject);
    procedure btnPivotClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses Math;
  var
    a, b, i : integer;
    x1, y1, x2, y2 : integer;
    x,y : array[1..5] of double;
    Px, Py : double;
    Tx, Ty : double;
    S : single;
    R : double;
    simpanX : double;
{$R *.dfm}

procedure TForm1.btnbintangClick(Sender: TObject);
begin
  x1 := StrToInt(editx1.Text);
  y1 := StrToInt(edity1.Text);
  x2 := StrToInt(editx2.Text);
  y2 := StrToInt(edity2.Text);
  x[1] := x1;
  y[1] := y2;
  x[2] := x1+(x2-x1) div 2;
  y[2] := y1;
  x[3] := x2;
  y[3] := y2;
  x[4] := x1;
  y[4] := y2+2*(y1-y2) div 3;
  x[5] := x2;
  y[5] := y[4];
  Image1.Canvas.Pen.Color := clBlue;
  Image1.Canvas.Pen.Style := psSolid;
  Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
  for i := 1 to 5 do
  begin
    Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
  end;
end;

procedure TForm1.btnclearClick(Sender: TObject);
begin
  Image1.Canvas.Pen.Color := clWhite;
  Image1.Canvas.Pen.Style := psSolid;
  Image1.Canvas.Brush.Color := clWhite;
  Image1.Canvas.Brush.Style := bsSolid;
  Image1.Canvas.Rectangle(1,1,Image1.Width,Image1.Height);
  Image1.Canvas.Pen.Color := clRed;
  Image1.Canvas.Pen.Style := psDot;
  Image1.Canvas.MoveTo(a,0);
  Image1.Canvas.LineTo(a,Image1.Height);
  Image1.Canvas.MoveTo(0,b);
  Image1.Canvas.LineTo(Image1.Width,b);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  a := Image1.Width div 2;
  b := Image1.Height div 2;
  btnclearClick(nil);
  {ScrollBox1.VertScrollBar.Position := b;
  ScrollBox1.HorzScrollBar.Position := a; }
end;

procedure TForm1.btncloseClick(Sender: TObject);
begin
  close;
end;

procedure TForm1.btnRotasiClick(Sender: TObject);
begin
  R := StrToFloat(editR.Text);
  //rotasi biasa
  Px := StrToFloat(editPx.Text);
  Py := StrToFloat(editPy.Text);
  simpanX := Px;
  Px := Px * Cos(R * pi/180) - Py * Sin(R * pi/180);
  Py := simpanX * Sin(R * pi/180) + Py * Cos(R * pi/180);
  editPx.Text := FloatToStr(Px);
  editPy.Text := FloatToStr(Py);

  for i := 1 to 5 do
  begin
    simpanX := x[i];
    x[i] := x[i] * Cos(R * pi/180) - y[i] * Sin(R * pi/180);
    y[i] := simpanX * Sin(R * pi/180) + y[i] * Cos(R * pi/180);
  end;

  btnclearClick(Sender);
  Image1.Canvas.Pen.Color := clBlue;
  Image1.Canvas.Pen.Style := psSolid;
  Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
  for i := 1 to 5 do
  begin
    Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
  end;
end;

procedure TForm1.btnTransClick(Sender: TObject);
begin
  Tx := StrToFloat(editTx.Text);
  Ty := StrToFloat(editTy.Text);
  //translasi biasa
  Px := StrToFloat(editPx.Text);
  Py := StrToFloat(editPy.Text);
  Px := Px + Tx;
  Py := Py + Ty;
  editPx.Text := FloatToStr(Px);
  editPy.Text := FloatToStr(Py);

  for i := 1 to 5 do
  begin
    x[i] := x[i] + Tx;
    y[i] := y[i] + Ty;
  end;

  btnclearClick(Sender);
  Image1.Canvas.Pen.Color := clBlue;
  Image1.Canvas.Pen.Style := psSolid;
  Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
  for i := 1 to 5 do
  begin
    Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
  end;
end;

procedure TForm1.btnScalingClick(Sender: TObject);
begin
  S := StrToFloat(editS.Text);
  //scaling biasa
  Px := StrToFloat(editPx.Text);
  Py := StrToFloat(editPy.Text);
  Px := Px * S;
  Py := Py * S;
  editPx.Text := FloatToStr(Px);
  editPy.Text := FloatToStr(Py);

  for i := 1 to 5 do
  begin
    x[i] := x[i] * S;
    y[i] := y[i] * S;
  end;

  btnclearClick(Sender);
  Image1.Canvas.Pen.Color := clBlue;
  Image1.Canvas.Pen.Style := psSolid;
  Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
  for i := 1 to 5 do
  begin
    Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  btnTransClick(Sender);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Interval := StrToInt(editTimer.Text);
  Timer1.Enabled := NOT Timer1.Enabled;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  btnScalingClick(Sender);
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
  btnRotasiClick(Sender);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Timer2.Interval := StrToInt(editTimer.Text);
  Timer2.Enabled := NOT Timer2.Enabled;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Timer3.Interval := StrToInt(editTimer.Text);
  Timer3.Enabled := NOT Timer3.Enabled;
end;

procedure TForm1.btnppscalingClick(Sender: TObject);
begin
  Px := StrToFloat(editPx.Text);
  Py := StrToFloat(editPy.Text);
  //translasi titik pivot ke 0,0 diikuti titik lainnya
  Tx := -Px;
  Ty := -Py;
  for i := 1 to 5 do
  begin
    x[i] := x[i] + Tx;
    y[i] := y[i] + Ty;
  end;
  //scaling
  S := StrToFloat(editS.Text);
  for i := 1 to 5 do
  begin
    x[i] := x[i] * S;
    y[i] := y[i] * S;
  end;
  //kembalikan titik pivot ke titik semula
  Tx := Px;
  Ty := Py;
  for i := 1 to 5 do
  begin
    x[i] := x[i] + Px;
    y[i] := y[i] + Py;
  end;
  //gambarkan
  btnclearClick(Sender);
  Image1.Canvas.Pen.Color := clBlue;
  Image1.Canvas.Pen.Style := psSolid;
  Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
  for i := 1 to 5 do
  begin
    Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
  end;
end;

procedure TForm1.btnpprotasiClick(Sender: TObject);
begin
  Px := StrToFloat(editPx.Text);
  Py := StrToFloat(editPy.Text);
  //translasi titik pivot ke 0,0 diikuti titik lainnya
  Tx := -Px;
  Ty := -Py;
  for i := 1 to 5 do
  begin
    x[i] := x[i] + Tx;
    y[i] := y[i] + Ty;
  end;
  //rotasi
  R := StrToFloat(editR.Text);
  for i := 1 to 5 do
  begin
    simpanX := x[i];
    x[i] := x[i] * Cos(R * pi/180) - y[i] * Sin(R * pi/180);
    y[i] := simpanX * Sin(R * pi/180) + y[i] * Cos(R * pi/180);
  end;
  //kembalikan titik pivot ke titik semula
  Tx := Px;
  Ty := Py;
  for i := 1 to 5 do
  begin
    x[i] := x[i] + Px;
    y[i] := y[i] + Py;
  end;
  //gambarkan
  btnclearClick(Sender);
  Image1.Canvas.Pen.Color := clBlue;
  Image1.Canvas.Pen.Style := psSolid;
  Image1.Canvas.MoveTo(a+Round(x[5]),b-Round(y[5]));
  for i := 1 to 5 do
  begin
    Image1.Canvas.LineTo(a+Round(x[i]),b-Round(y[i]));
  end;
end;

procedure TForm1.btnPivotClick(Sender: TObject);
begin
  Px := x1 + (x2-x1) div 2;
  Py := y2 + (y1-y2) div 2;
  editPx.Text := FloatToStr(Px);
  editPy.Text := FloatToStr(Py);
end;

end.

Tutorial Tulisan Berjalan di Delphi 7

Assalamualaikum...
Saya kembali lagi menulis di blog saya ini, saya ingin berbagi ilmu dengan kalian maupun sedikit namun semoga bermanfaat yah... :)

Buatlah tampilan formnya seperti ini :

dan ini full code nya :


unit Utama; 

interface 

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TFormUtama = class(TForm)
    LabelNama: TLabel;
    EditNama: TEdit;
    LabelHasil: TLabel;
    ButtonAksi: TButton;
    ButtonHapus: TButton;
    ButtonGabung: TButton;
    ButtonClose: TButton;
    ButtonJalan: TButton;
    procedure ButtonAksiClick(Sender: TObject);
    procedure ButtonHapusClick(Sender: TObject);
    procedure ButtonGabungClick(Sender: TObject);
    procedure ButtonCloseClick(Sender: TObject);
    procedure ButtonJalanClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormUtama: TFormUtama;

implementation

{$R *.dfm}
//mulai dari sini yang boleh diotak-atik buat nambah code, kalau udah profesional boleh dari awal code diubah
procedure TFormUtama.ButtonAksiClick(Sender: TObject);
begin
LabelHasil.Caption := 'Novia Mardiana';
end;

procedure TFormUtama.ButtonHapusClick(Sender: TObject);
begin
LabelHasil.Caption := '';
end;

procedure TFormUtama.ButtonGabungClick(Sender: TObject);
begin
LabelHasil.Caption := 'Halooo '+EditNama.Text;
end;

procedure TFormUtama.ButtonCloseClick(Sender: TObject);
begin
close;
end;

procedure TFormUtama.ButtonJalanClick(Sender: TObject);
//Deklarasi Variabel Local
Var
  i : integer;
begin
  //Mengisi Caption LabelHasil dengan Text dari EditNama;
  LabelHasil.Caption := EditNama.Text;
  //meletakkan posisi kiri LabelHasil
  LabelHasil.Left := 16;
  //loop dari posisi awal ke posisi 750
  for i:= 16 to 750 do
  begin
    //posisi kiri LabelHasil diubah ke posisi i
    LabelHasil.Left := i;
    //berhenti sejenak agar penonton dapat melihat textnya berjalan
    Sleep(50);
    //repaint agar kondisi saat itu ditampilkan
    LabelHasil.Repaint;
  end;
end;

end.

Rabu, 30 Maret 2016

KILAUAN

Picture by NASA
Kilauan hanya sebatas ketidakjelasan
Tak tahu kearah mana ingin pergi
Berdiam tak bergerak
Tak menjadi sorotan publik
Semua terasa sia-sia

Kilauan bertanya pada diri sendiri
Terpukau pada satu titik
Tersadar akan adanya perubahan yang signifikan
Berusaha menggapainya
Perlahan dia mencapai punjak kejayaannya
Dimana Kilauan menjadi sorotan
Tak lagi sebatas ketidakjelasan
Kilauan yang positif membuat semua menganga
Semua bersorak bahagia

~Novia Mardiana~
Jakarta, 30 Maret 2016

GELOMBANG

Dimensi tak terbilang dan tak terjelang
Engkaulah ketunggalan sebelum meledaknya segala percabangan
Bersatu denganmu menjadikan aku mata semesta
Berpisah menjadikan aku tanya dan engkau jawabnya
Berdua kita berkejaran tanpa pernah lagi bersua

Mencecapmu lewat mimpi
Terjauh yang sanggup kujalani
Meski hanya satu malam dari ribuan malam
Sekejap bersamamu menjadi tujuan peraduanku
Sekali mengenalmu menjadi tujuan hidupku

Selapis kelopak mata membatasi aku dan engkau
Setiap napas mendekatkan sekaligus menjauhkan kita
Engkau membuatku putus asa dan mencinta
Pada saat yang sama

Dipetik dari buku Gelombang karya Dee Lestari. Karya yang menurut saya luar biasa. Menambah kosa kata bagi saya.