Garis Cross-Hair (penunjuk pada grafik) Delphi

Garis cross-hair merupakan garis silang pada "kotak" grafik ketika mouse berada di atas grafik tersebut dan posisinya akan berubah mengikuti perubahan posisi mouse. Garis cross-hair dapat dipakai untuk mengetahui nilai suatu titik dalam suatu grafik. Buatlah sebuah form baru dan pada form tersebut, pasang sebuah komponen TChart, komponen TLabel, komponent TPanel, komponen TCheckBox dan ubah propertinya sebagai berikut :
Langkah Pertama :
Klik ganda komponen TChart dan buat sebuah TChartSeries bertipe Line dua dimensi (Tanda centang pada parameter 3D dihilangkan). Deklarasikan beberapa variabel pada bagian public dengan tipe data seperti berikut :
Public
OldX, OldY : LongInt;
CrossHairColor: Tcolor;
CrossHairStyle: TPenStyle;
end;

Variable OldX digunakan untuk menyimpan posisi horisontal (x) mouse sebelum digeser, sedangkan posisi vertikalnya (Y) disimpan dalam variabel OldY. Nilai variabel CrossHairColor bertype TColor digunakan untuk mengisi warna pena (property Color) yang akan dipakai saat melukis garis Cross-Hair pada komponen TChart. Property style pena tersebut berasal dari nilai variabel CrossHairStyle.

Procedure Even OnCreate pada TForm1 (TForm1)
Kode program yang dideklarasikan dalam procedure even OnCreate hanya dijalankan sekali, yaitu saat form dibangun. Klik ganda sel di sebelah kanan even OnCreate form sehingga muncul sebuah procedure pada jendela code editor.
Procedure TForm1.FormCreate(sender: TObject);
Begin
series1.FillSampleValues(30); // akan memberikan nilai acak pada TChartSeries dengan rentang data sebanyak dalam kurung 
OldX := -1 ;
CrossHairColor := clAqua;
CrossHairStyle := psSolid;
CCrossClick(sender);
end;

Posisi horizontal yang lama di-reset dengan memberi nilai -1 pada variabel OldX. Warna pertemuan kedua garis Cross-Hair ketika form1 pertamakali ditampilkan bernilai clAqua dan disimpan dalam variabel CrossHairColor. Garis cross-Hair ditampilkan solid (tidak terputus-putus) dengan memberi nilai psSolid pada properti style pena (menjadi nilai variabel CrossHairStyle). Procedure CrossClick untuk menjalankan perintah event OnClick komponen TCeckBox1.

Procedure EvenOnClick pada komponen TCeckBox1
Komponen TCheckBox berfungsi untuk mengubah kursor ketika mouse berada di daerah komponen TChart. Kursor ditampilkan apabila property Checked komponen TCheckBox bernilai true dan jika sebaliknya kursor berbentuk default. Ketikkan code program berikut pada komponen TChekBox :

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then Chart1.Cursor := crCross else
  chart1.cursor := crDefault;;
  chart1.OriginalCursor := chart1.Cursor;
end;
Properti OriginalCursor me-reset kursor komponen Tchart ketika mouse bergerak melewati TChartSeries yang ada di dalamnya. 

Procedure Event OnMouseMove pada komponent TChart (Chart1)
Procedure Event OnMouseMove berguna untuk menangani kejadian ketika mouse digerakkan di atas komponent TChart. Buatlah procedure local DrawCross pada procedure event OnMouseMove yang berisi perintah-perintah untuk melukis garis Cross-Hair dengan properti canvas komponent TChart. Klik TChart dan pada properti event double klik pada OnMouseMove dan ketikkan code sebagai berikut :

procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure DrawCross (ax, ay : Integer);
begin
with chart1, canvas do begin
pen.Color :=CrossHairColor;
pen.Style :=CrossHairStyle;
pen.Width:=1;
pen.Mode:=pmXor;
MoveTo(ax, ChartRect.Top-Height3D);
LineTo (ax, ChartRect.Bottom-Height3D);
MoveTo(ChartRect.Left+Width3D, ay);
LineTo(ChartRect.Right+Width3D, ay);
end;
end;
var valueX, ValueY: Double;
begin
if (oldx<>-1) then begin
DrawCross(oldx,oldy);
oldx:=-1;
end;
if PtInrect(chart1.ChartRect, point(X-chart1.Width3D, Y+chart1.Height3D)) then begin DrawCross(X,Y);
oldx:=x;
oldy:=y;
with series1 do begin GetCursorValues(ValueX, ValueY);
label1.Caption:='Koordinat sumbu X/Y = '+ gethorizaxis.LabelValue(ValueX) + '/'+getvertaxis.LabelValue(ValueY);
end;
end else
label1.Caption:='';
end;

Procedure Event OnAfterValue pada Tchart series (series 1)
Event OnAfterValue terjadi setelah data diplot dalam TChartSeries, yaitu mereset posisi (x,y) mouse. Perintah ini berguna ketika plot data dilakukan secara on-lin
procedure TForm1.Chart1AfterDraw(Sender: TObject);
begin
oldX:=-1;
end;
Masalah yang terjadi adalah terjadinya error dimana CCrossClick(sender); tidak dikenali maka kita dapat menonaktifkannya. Ketika checkbox dicentang, maka tampilan kursor pada grafik akan seperti pada gambar di atas. Apabila checkbox  tidak dicentang akan menampilkan kursor dengan defaul tanda panah.

Code ASCII


Database Terbuka Otomatis Pada Delphi

Maksud dari tulisan kali ini adalah, ketika kita membuat aplikasi database, maka data base tersebut masih tetap dapat terbuka ketika software kita pindahkan ke komputer lain. Kebanyakan aplikasi akan mengalami error dikarenakan file lokasi data base yang tidak sesuai.

kita tidak perlu melakukan pengaturan properti pada kommponen :
1. ADOconnection1
2. ADOTable1
3. DataSource1
4. RvDataSetConnection1
5. RvProject1
cukup dengan mengetikkan code berikut pada form1

procedure TForm1.FormCreate(Sender: TObject);
var alamatdb : WideString;
begin
alamatdb := ExtractFilePath(Application.ExeName) + 'database.mdb';  //Tulisan merah nama file data base
  with ADOConnection1 do begin
    Connected := False;
    LoginPrompt := False;
    Mode := cmShareDenyNone;
    ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' +alamatdb+ ';
    Persist Security Info=False';   // penentuan alamat database
  end;
  ADOConnection1.Connected := True;
  ADOtable1.Connection:= ADOConnection1;
  ADOtable1.TableName:='dataTemperature';  // penentuan nama table. ini adalah nama tabel dalam file data base yang telah kita buat

  ADOtable1.Active:=true;
  Datasource1.DataSet:= ADOTable1;
  DBGrid1.DataSource:=  DataSource1;

  RvProject1.ProjectFile:='project1.rav' ;  // ini adalah file reporting rave report. Tulisan merah nama file report
  form1.Position := poDesktopCenter;   //agar formnya pas tengah desktop
//listbox1.Visible := false;           //agar listbox1 tidak terlihat,tapi kalo mau ditampilkan boleh.
//label7.Caption:=timetostr(time);
end;
Persratan dari program diatas adalah dengan menyimpan semua file project dan data base kedalam satu folder.

Catatan :
Terdapat sebuah kasus biasanya ketika membuat file report, tidak dapat menampilkan hasil pembacaan data base. untuk mengatasi hal ini adalah dengan melakukan pengaturan pada komponen pendukung pada no 1 hingga 5. Jika telah melakukan pengaturan maka kembalikan seperti semula agar tidak terjadi error. Pengaturan ini dilakukan agar database dapat terbuka ketika dipindahkan pada komuter lain. untuk lebih jelasnya coba ikuti sesuai tabel dibawah dan  isi program sesuai cara di atas.