Arsip: Buat class di Delphi untuk sebagai manager

 
user image
more 13 years ago

hendra_sir84

Hallo teman2. Saya mau nanya, gimana caranya kita membuat class di Delphi dimana class tersebut nantinya akan menerima object2 yang akan di manipulasi. Contohnya : ada class A yang isinya button dgn nama btnOK, kemudian class A akan memanggil class C. Class C ini akan menerima objek bntOK, dan dalam class tersebut terdapat procedure Z untuk btnOK.Enable := false. Nah dari class A kita dapat mengakses procedure Z dengan memparsing objek yang akan dimanipulasi dan statusnya. Gimana cara membuat class C tersebut dan procedure Z nya??? Bantu dong, saya kurang tau.
user image
more 13 years ago

cikumiyu

Untuk mengatur sekumpulan object dari type data yang sama memang sebaiknya dibuat sebuah class yang berfungsi seperti halnya seorang manager. Class ini, kita sebut saja misalnya class manager akan bertanggung jawab untuk menjalankan segala operasi yang berkenaan dengan object² yang dimanage-nya. Agar lebih jelas, saya telah buatkan sebagai contoh sebuah class manager TTableManager yang akan mengatur kumpulan object bertipe date TTable.

unit TestManagerUnit;
interface
uses Classes;
type
  TTable = class
  private
    FTableId: string;
    FNumberOfSeats: Integer;
  public
    constructor Create(ANumberOfSeats: Integer);
    
    property TableId: string read FTableId write FTableId;
    property NumberOfSeats: Integer read FNumberOfSeats write FNumberOfSeats;
  end;
  
  TTableManager = class
  private
    FTtables: TList;
  public
    constructor Create;
    destructor Destroy; override;
    
    procedure AddTable(ATableId: string; ANumberOfSeats: Integer);
    function GetTable(ATableId: string): TTable;
    procedure DeleteTable(ATableId: string);
    procedure SetNumberOfSeats(ATableId: string; ANewNumberOfSeats: Integer);
    
    property Tables: TList read FTables write FTables;
  end;
  
implementation
{ TTable }
constructor TTable.Create(ANumberOfSeats: Integer);
begin
  FNumberOfSeats := ANumberOfSeats;
end;
{ TTableManager }
constructor TTableManager.Create;
begin
  FTables := TList.Create;
end;
destructor TTableManager.Destroy; 
begin
  FTables.Free;
  inherited;
end;
procedure AddTable(ATableId: string; ANumberOfSeats: Integer);
var
  table: TTable;
begin
  table := TTable.Create(ANumberOfSeats);
  table.TableId := ATableId;
  
  FTables.Add(table);
end;
function TTableManager.GetTable(ATableId: string): TTable;
var
  i: Integer;
  entry: TTable;
begin
  Result := nil;
  for i := 0 to FTables.Count-1 do 
  begin
    entry := FTables[i];
    if entry <> nil then 
      if entry.TableId = ATableId then 
      begin
        Result := entry;
        Exit;
      end;  
  end;
end;
procedure TTableManager.DeleteTable(ATableId: string);
var
  theTable: TTable;
begin
  theTable := GetTable(ATableId);
  if theTable <> nil then 
  begin
    FTables.Remove(theTable);
    theTable.Free;
  end;
end;
procedure TTableManager.SetNumberOfSeats(ATableId: string; ANewNumberOfSeats: Integer);
var
  entry: TTable;
begin
  entry := GetTable(ATableId);
  if entry <> nil then 
    entry.NumberOfSeats := ANewNumberOfSeats;
end;
end.
Source dari file projectnya bisa dilihat sebagai berikut:

program TestManager;
{$APPTYPE CONSOLE}
uses 
  SysUtils,
  TestManagerUnit in 'TestManagerUnit.pas';
 
const
  MAX_NUMBER_OF_TABLES = 10;
  NUMBER_OF_SEATS = 10
  
var
  tableManager: TTableManager;
  i: Integer;
  tableId: string;
begin
  tableManager := TTableManager.Create;
  
  { Menambahkan object table dari class TTable }
  for i := 0 to MAX_NUMBER_OF_TABLES-1 do 
  begin
    tableId := 't-' + IntToStr(i);
    tableManager.AddTable(tableId, NUMBER_OF_SEATS);
  end;
  
  { Mengubah property NumberOfSeats dari salah satu table dengan id 't-5' menjadi 2. }
  tableManager.SetNumberOfSeats('t-5', 2);
  
  { Tampilkan isi container dari table manager }
  for i := 0 to tableManager.Tables.Count-1 do 
  begin
    Writeln(TTable(tableManager.Tables[i]).TableId, '   ', TTable(tableManager.Tables[i]).NumberOfSeats);
  end;
  
  Readln;
end;
Semoga cukup jelas dan bisa membantu. Mohon maaf kalau ada compiled-error. Saya buatnya pake Notepad2. Ngga ada IDE Delphi nih. :D
user image
more 13 years ago

hendra_sir84

Aduh terima kasiih banyak ya "cikumiyu". Thx banget ya.
user image
more 13 years ago

cikumiyu

Sama-sama, senang bisa membantu. :)
more ...
  • Pages:
  • 1
Share to

Random Topic

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com