+62 812-1171-5379 Fast Respond

Tips dan Trik Delphi

Menambahkan tombol enter sebagai ganti tab / Form / Windows / Delphi 7 - XE


procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     if Key=VK_RETURN then
        sendmessage(handle,wm_nextdlgctl,0,0);
end;

atau juga bisa membuat sendiri seperti dibawah ini :

Function TFPelangganEntry.NextkeyEdit(var Key: Word; namakomponen : TEdit): Boolean;
begin
     if Key = VK_RETURN then
     begin
          if namakomponen.Enabled = True  then
             namakomponen.SetFocus;
     end;
end;

Mengunci tombol huruf pada edit / Form / Windows / Delphi 7 - XE


procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
     if not (key in ['0'..'9',#8,'.',',']) then
     Begin
          key := #0;
     End;
end;

Menampilkan isi file pada folder / Files / Windows / Delphi 7 - XE


procedure ListFileDir(Path: string; FileList: TStrings);
var
  SR: TSearchRec;
begin
  if FindFirst(Path + '*.*', faAnyFile, SR) = 0 then
  begin
    repeat
      if (SR.Attr <> faDirectory) then
      begin
        FileList.Add(SR.Name);
      end;
    until FindNext(SR) <> 0;
    FindClose(SR);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ListFileDir('C:\WINDOWS\', ListBox1.Items);
end;

Autosize kolom DBGrid / Database / Windows / Delphi 7 - XE


procedure SetGridColumnWidths(Grid: Tdbgrid);
const
  DEFBORDER = 10;
var
  temp, n: Integer;
  lmax: array [0..30] of Integer;
begin
  with Grid do
  begin
    Canvas.Font := Font;
    for n := 0 to Columns.Count - 1 do
      //if columns[n].visible then
      lmax[n] := Canvas.TextWidth(Fields[n].FieldName) + DEFBORDER;
    grid.DataSource.DataSet.First;
    while not grid.DataSource.DataSet.EOF do 
    begin
      for n := 0 to Columns.Count - 1 do 
      begin
        //if columns[n].visible then begin
        temp := Canvas.TextWidth(trim(Columns[n].Field.DisplayText)) + DEFBORDER;
        if temp > lmax[n] then lmax[n] := temp;
        //end; { if }
      end; {for}
      grid.DataSource.DataSet.Next;
    end; { while }
    grid.DataSource.DataSet.First;
    for n := 0 to Columns.Count - 1 do
      if lmax[n] > 0 then
        Columns[n].Width := lmax[n];
  end; { With }
end; {SetGridColumnWidths  }

procedure TForm1.Button1Click(Sender: TObject);
begin
  SetGridColumnWidths(dbgrid3);
end;



Scroll pada DBGrid / Database / Windows / Delphi 7 - XE


//...
private
  OldGridProc: TWndMethod;
  procedure GridWindowProc(var Message: TMessage);
//...

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldGridProc        := DBGrid1.WindowProc;
  DBGrid1.WindowProc := GridWindowProc;
end;

procedure TForm1.GridWindowProc(var Message: TMessage);
var
  Pos: SmallInt;
begin
  OldGridProc(Message);
  if Message.Msg = WM_VSCROLL then  //or WM_HSCROLL
  begin
    Pos          := Message.WParamHi;  //Scrollbox position
    Table1.RecNo := Pos;
  end;
end;


Membaca file CSV dan memasukkan ke Stringgrid / Tool / Windows / Delphi 7 - XE


Function ListGetAt(List: string; const Position: integer; const Delimiter: string = ';'): string;
var
 i, NP, DL: integer;
Begin
     NP := 1;
     DL := Length(Delimiter);
     for i := 1 to Position do
     Begin
          List := Copy(List, NP, Length(List)-NP+1);
          NP := Pos(Delimiter, List)+DL;
          if i = Position then
          begin
             if Pos(Delimiter, List) = 0 then Break;
             Delete(List, NP-DL, Length(List)-(NP-DL-1));
          End Else
          if NP = DL then
          begin
               List := '';
               Break;
          end;
     End;
     Result := List;
End;

Function ListSetAt(List: string; const Position: integer; const Value: string; const Delimiter: string = ';'): string;
var
   i, NP, DL: integer;
   BegStr, EndStr: string;
Begin
     NP := 1;
     DL := Length(Delimiter);
     BegStr := '';
     EndStr := '';
     For i := 1 to Position do
     Begin
          if i > 1 then
             BegStr := BegStr+Copy(List, 1, Pos(Delimiter, List)+DL-1);

          List := Copy(List, NP, Length(List)-NP+DL);
          NP := Pos(Delimiter, List)+DL;
          if (NP = DL) and (i < Position) then
          Begin
               List := List + Delimiter;
               NP := Pos(Delimiter, List)+DL;
          End;
          if i = Position then
          Begin
              if Pos(Delimiter, List) = 0 then
                 Break;
              EndStr := Copy(List, NP-DL, Length(List)-(NP-DL-1));
          End;
     End;
     Result := BegStr + Value + EndStr;
End;

Function ListLen(List: string; const Delimiter: string): integer;
var DL: integer;
Begin
     DL := Length(Delimiter);
     Result := Ord(List > '');
     While Pos(Delimiter, List) > 0 do
     Begin
          Delete(List, 1, Pos(Delimiter, List) + DL-1);
          Inc(Result);
     End;
End;

procedure ProcessData(namaSTG: TStringGrid; Value1, Value2, Value3, Value4, Value5, Value6, value7, value8, value9, value10, value11: string);
Begin
     namaSTG.Cells[0,Barisimport]:= (Value1);
     namaSTG.Cells[1,Barisimport]:= (Value2);
     namaSTG.Cells[2,Barisimport]:= (Value3);
     namaSTG.Cells[3,Barisimport]:= (Value4);
     namaSTG.Cells[4,Barisimport]:= (Value5);
     namaSTG.Cells[5,Barisimport]:= (Value6);
     namaSTG.Cells[6,Barisimport]:= (Value7);
     namaSTG.Cells[7,Barisimport]:= (Value8);
     namaSTG.Cells[8,Barisimport]:= (value9);
     namaSTG.Cells[9,Barisimport]:= (Value10);
     namaSTG.Cells[10,Barisimport]:= (value11);
End;

procedure TForm1.Button1Click(Sender: TObject);
Var
     MyCSVData: TStringList;
begin
     if OpenDialog1.Execute Then
     Begin
          MyCSVData := TStringList.Create;
          MyCSVData.LoadFromFile(OpenDialog1.FileName);
          Barisimport := 0;
          For Barisimport := 1 to MyCSVData.Count-1 do
          Begin
               ProcessData(StgHeader,
                           ListGetAt(MyCSVData[Barisimport -1], 1),
                           ListGetAt(MyCSVData[Barisimport -1], 2),
                           ListGetAt(MyCSVData[Barisimport -1], 3),
                           ListGetAt(MyCSVData[Barisimport -1], 4),
                           ListGetAt(MyCSVData[Barisimport -1], 5),
                           ListGetAt(MyCSVData[Barisimport -1], 6),
                           ListGetAt(MyCSVData[Barisimport -1], 7),
                           ListGetAt(MyCSVData[Barisimport -1], 8),
                           ListGetAt(MyCSVData[Barisimport -1], 9),
                           ListGetAt(MyCSVData[Barisimport -1], 10),
                           ListGetAt(MyCSVData[Barisimport -1], 11));
               StgHeader.RowCount := Barisimport + 2;
          End;
     End;
End;

Memeriksa foldernya kosong / Files / Windows / Delphi 7 - XE


function DirectoryIsEmpty(Directory: string): Boolean;
var
  SR: TSearchRec;
  i: Integer;
begin
  Result := False;
  FindFirst(IncludeTrailingPathDelimiter(Directory) + '*', faAnyFile, SR);
  for i := 1 to 2 do
    if (SR.Name = '.') or (SR.Name = '..') then
      Result := FindNext(SR) <> 0;
  FindClose(SR);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if DirectoryIsEmpty('C:\test') then
    Label1.Caption := 'empty'
  else
    Label1.Caption := 'not empty';
end;

Mengetahui bulan berapa sekarang / Tool / Windows / Delphi 7 - XE


function DaysInMonth: Integer;
var
  Year, Month, Day: Word;
begin
  DecodeDate(Now, Year, Month, Day);
  Result := MonthDays[IsLeapYear(Year), Month];
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(DaysInMonth));
end;


Konversi dari pengurangan tanggal menjadi jumlah menit / Tool / Windows / Delphi 7 - XE


Function TForm1.konversitanggalkemenit(Dari, Sampai : Tdatetime) : Double;
Var Hasil_Temp, Hasil_Selisih, Hasil_belakangkoma : Double;
    Hasil_Str_Temp : String;
    menit : Ttime;
Begin
     Hasil_Selisih := Sampai - dari;
     if Hasil_Selisih >= 0.0000000000000001 then
     Begin
          hasil_temp := ((Hasil_Selisih * 24 * 60));
          Result := Trunc(hasil_temp);
     End Else
     Begin
          menit := Timeof(Sampai) - TimeOf(dari);
          Result := menit;
     End;
End;

// Cara memanggilnya
Edit3.Text := FloatToStr(konversitanggalkemenit(StrToDateTime(EdtDari.text), StrToDateTime(EdtSampai.text)));

Konversi dari pengurangan tanggal menjadi jumlah jam / Tool / Windows / Delphi 7 - XE


Function konversitanggalkejam(Dari, Sampai : Tdatetime) : Double;
Var Hasil_Temp, Hasil_Selisih, Hasil_belakangkoma : Double;
    Hasil_Str_Temp : String;
    Jam : Ttime;
Begin
     Hasil_Selisih := Sampai - dari;
     if Hasil_Selisih >= 0.0001 then
     Begin
          hasil_temp := ((Hasil_Selisih * 24) + 0.000000001);

          Hasil_Str_Temp := FormatFloat('0#.00', hasil_temp);
          if length(Hasil_Str_Temp) >= 3 then
          begin
               Hasil_belakangkoma := StrToFloat(copy(Hasil_Str_Temp,4,2));
               Hasil_belakangkoma := (Hasil_belakangkoma * 0.6) /100;
               Hasil_Str_Temp := FormatFloat('0#.00', Hasil_belakangkoma);
               Result := Trunc(hasil_temp) + Strtofloat(Hasil_Str_Temp);
          end else
          begin
               Result := Trunc(hasil_temp);
          end;
     End Else
     Begin
          Jam := Timeof(Sampai) - TimeOf(dari);
          Result := Jam;
     End;
End;

Cara memanggilnya :
Edit3.Text := FloatToStr(konversitanggalkejam(StrToDateTime(EdtDari.text), StrToDateTime(EdtSampai.text)));