home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programming Unleashed / Delphi_Programming_Unleashed_SAMS_Publishing_1995.iso / chap20 / dsevents / main.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-20  |  3KB  |  137 lines

  1. unit Main;
  2.  
  3. { Program copyright (c) 1994 by Charles Calvert }
  4. { Project Name: DSEVENTS }
  5.  
  6. { This program shows how you can use the built in
  7.   Delphi events to create ersatz data aware controls.
  8.   In short, it converts standard TEdit controls and
  9.   makes them act as if they were TdbEdit controls.
  10.   All the action is done programmatically in
  11.   the program. That is, I am not changint the behavior
  12.   of class TEdit.
  13.  
  14.   When you Post, you need to be sure the DataSource1DataChange
  15.   method does not get called. I use a Boolean value called
  16.   UpDating to enforce this rule. }
  17.  
  18. interface
  19.  
  20. uses
  21.   WinTypes, WinProcs, Classes,
  22.   Graphics, Forms, Controls,
  23.   DB, StdCtrls, DBCtrls,
  24.   DBTables, SysUtils, ExtCtrls;
  25.  
  26. type
  27.   TForm1 = class(TForm)
  28.     Table1: TTable;
  29.     DataSource1: TDataSource;
  30.     Edit1: TEdit;
  31.     Edit2: TEdit;
  32.     Edit3: TEdit;
  33.     Edit4: TEdit;
  34.     Edit: TButton;
  35.     Insert: TButton;
  36.     Label1: TLabel;
  37.     Label3: TLabel;
  38.     Label4: TLabel;
  39.     Label5: TLabel;
  40.     Label2: TLabel;
  41.     Edit5: TEdit;
  42.     First: TButton;
  43.     Prior: TButton;
  44.     Next: TButton;
  45.     Last: TButton;
  46.     Post: TButton;
  47.     Panel1: TPanel;
  48.     Label6: TLabel;
  49.     Cancel: TButton;
  50.     Delete: TButton;
  51.     procedure FormCreate(Sender: TObject);
  52.     procedure AnyButtonClick(Sender: TObject);
  53.     procedure DataSource1StateChange(Sender: TObject);
  54.     procedure Edit1KeyDown(Sender: TObject; var Key: Word;
  55.       Shift: TShiftState);
  56.     procedure DataSource1UpdateData(Sender: TObject);
  57.     procedure DataSource1DataChange(Sender: TObject; Field: TField);
  58.   private
  59.     UpDating: Boolean;
  60.     Edits: array[1..5] of TEdit;
  61.   end;
  62.  
  63. var
  64.   Form1: TForm1;
  65.  
  66. implementation
  67.  
  68. {$R *.DFM}
  69. procedure TForm1.FormCreate(Sender: TObject);
  70. var
  71.   i: Integer;
  72. begin
  73.   for i := 1 to 5 do
  74.     Edits[i] := TEdit(FindComponent('Edit' + IntToStr(i)));
  75.   Table1.First;
  76. end;
  77.  
  78. procedure TForm1.DataSource1UpdateData(Sender: TObject);
  79. var
  80.   i: Integer;
  81. begin
  82.   for i := 1 to 5 do
  83.     Table1.Fields[i - 1].AsString := Edits[i].Text;
  84. end;
  85.  
  86.  
  87. procedure TForm1.DataSource1StateChange(Sender: TObject);
  88. var
  89.   S: String;
  90. begin
  91.   case Table1.State of
  92.     dsInactive: S := 'Inactive';
  93.     dsBrowse: S := 'Browse';
  94.     dsEdit: S := 'Edit';
  95.     dsInsert: S := 'Insert';
  96.     dsSetKey: S := 'SetKey';
  97.   end;
  98.   Label6.Caption := S;
  99. end;
  100.  
  101. procedure TForm1.AnyButtonClick(Sender: TObject);
  102. begin
  103.   case (Sender as TButton).Tag of
  104.     1: Table1.First;
  105.     2: Table1.Prior;
  106.     3: Table1.Next;
  107.     4: Table1.Last;
  108.     5: Table1.Edit;
  109.     6: Table1.Insert;
  110.     7: begin
  111.       UpDating := True;
  112.       Table1.Post;
  113.       UpDating := False;
  114.     end;
  115.     8: Table1.Cancel;
  116.     9: Table1.Delete;
  117.   end;
  118. end;
  119.  
  120. procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  121.   Shift: TShiftState);
  122. begin
  123.   if DataSource1.State <> dsEdit then
  124.     Table1.Edit;
  125. end;
  126.  
  127. procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
  128. var
  129.   i: Integer;
  130. begin
  131.   if UpDating then Exit;
  132.   for i := 1 to 5 do
  133.     Edits[i].Text := Table1.Fields[i - 1].AsString;
  134. end;
  135.  
  136. end.
  137.