16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:担当者メンテ開発記"
この発言は #01255 ぺけでび さんのRE:担当者メンテ開発記 に対するコメントです
この発言に対し以下のコメントが寄せられています
#01258 よたろう さん RE^2:担当者メンテ開発記
#01259 よたろう さん RE^2:担当者メンテ開発記
で、追加と修正が出来るようになったのが以下のソースです。
FILE:PTANTOU.DPR
program PTANTOU;
uses
Forms,
UTANTOU in 'UTANTOU.pas' {Form1};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
変わっていない。
FILE:UTANTOU.DFM
object Form1: TForm1
Left = 192
Top = 107
Width = 544
Height = 375
Caption = 'Form1'
Color = clBtnFace
Font.Charset = SHIFTJIS_CHARSET
Font.Color = clWindowText
Font.Height = -12
Font.Name = 'MS Pゴシック'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 12
object Label1: TLabel
Left = 16
Top = 48
Width = 66
Height = 12
Caption = '担当者コード'
end
object Label2: TLabel
Left = 16
Top = 80
Width = 48
Height = 12
Caption = '担当者名'
end
object Label3: TLabel
Left = 96
Top = 16
Width = 4
Height = 12
end
object Edit1: TEdit
Left = 96
Top = 48
Width = 121
Height = 20
MaxLength = 2
TabOrder = 0
OnExit = Edit1Exit
OnKeyDown = Edit1KeyDown
OnKeyPress = Edit1KeyPress
end
object Edit2: TEdit
Left = 96
Top = 80
Width = 121
Height = 20
MaxLength = 20
TabOrder = 1
OnKeyDown = Edit2KeyDown
OnKeyPress = Edit2KeyPress
end
object Table1: TTable
Active = True
IndexName = 'CODE'
TableName = 'TANTOU.DBF'
Left = 480
Top = 8
end
end
イベントの部分が追加されていますね。
これもインスベクタで指定しただけ。
FILE:UTANTOU.PAS
unit UTANTOU;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, DBTables;
type
TForm1 = class(TForm)
Table1: TTable;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Edit2: TEdit;
function CheckCode: Boolean;
procedure DataGet; // フィールドの値を読み込む
procedure DataWrite; // レコードの追加または修正
procedure Edit1KeyPress(Sender: TObject; var Key: Char); // 入力された時
procedure Edit1KeyDown(Sender: TObject; var Key: Word; // キーを押した時
Shift: TShiftState);
procedure Edit1Exit(Sender: TObject); // フォーカスが他に移った時
procedure Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.CheckCode: Boolean; // 不当な入力かどうかをチェック
begin
Result := True; Label3.Caption := '';
if (Length(Trim(Edit1.Text)) <> 2) then begin
Result := False;
Label3.Caption := 'コードは2桁入力して下さい';
end else begin
if (Edit1.Text < '01') or (Edit1.Text > '99') then begin
Result := False;
Label3.Caption := 'コードは01〜99の範囲を入力して下さい';
end;
end;
end;
procedure TForm1.DataGet; // テーブルにコードがあればフィールドの値を読み込む
begin
Table1.SetKey; // 検索の準備
Table1.FieldByName('TAN_CD').AsString := Edit1.Text; // 検索条件のセット
Table1.GotoNearest; // 同じか近いレコードにポインタを移動
if (Table1.FieldByName('TAN_CD').AsString = Edit1.Text) then begin
Edit2.Text := Table1.FieldByName('TAN_NAME').AsString; // 見つかったらフィールドの値をセット
end else begin
Edit2.Text := ''; // 見つからなければヌルをセット
end;
end;
procedure TForm1.DataWrite;
begin
Table1.SetKey;
Table1.FieldByName('TAN_CD').AsString := Edit1.Text;
Table1.GotoNearest;
if (Table1.FieldByName('TAN_CD').AsString = Edit1.Text) then begin
Table1.Edit; // 見つかったら修正モードに
end else begin
Table1.Append; // 見つからない場合は新規レコードを追加する
Table1.FieldByName('TAN_CD').AsString := Edit1.Text;
end;
Table1.FieldByName('TAN_NAME').AsString := Edit2.Text;
Table1.Post; // 実際にテーブルに登録される
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key = #13) then begin // Enterキーか?
if CheckCode then begin
DataGet; Edit2.SetFocus; // 期待した入力だったので担当者名の編集に移動
end;
end;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_Down) then begin // ↓キーか?
if CheckCode then begin
DataGet; Edit2.SetFocus;
end;
end;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
if (not CheckCode) then Edit1.SetFocus; // 不当な入力ではフォーカスを移動させない
end;
procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_Up) then begin // ↑キーか?
Edit1.SetFocus;
end;
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if (key = #13) then begin // Enterキーか?
DataWrite; // 入力データの登録
Edit1.SetFocus;
end;
end;
end.
削除はまだ組込んでいません。 確認が無いとか、いろいろ不満
が出そうですが、とにかくキーボードのみで操作するようにしたい
のです。
- FDELPHI MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/01/29 -
Original document by ぺけでび 氏 ID:(YQJ03146)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|