home *** CD-ROM | disk | FTP | other *** search
/ Delphi 4 Bible / Delphi_4_Bible_Tom_Swan_IDG_Books_1998.iso / source / TELNAME / MAIN.PAS < prev    next >
Pascal/Delphi Source File  |  1998-04-10  |  4KB  |  151 lines

  1. unit Main;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, Windows, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, StdCtrls, Buttons, Mask;
  8.  
  9. type
  10.   TMainForm = class(TForm)
  11.     Label1: TLabel;
  12.     Label2: TLabel;
  13.     ListBox1: TListBox;
  14.     CloseBitBtn: TBitBtn;
  15.     NamesBitBtn: TBitBtn;
  16.     NumberBitBtn: TBitBtn;
  17.     NameEdit: TEdit;
  18.     NumbEdit: TEdit;
  19.     procedure FormCreate(Sender: TObject);
  20.     procedure NumberBitBtnClick(Sender: TObject);
  21.     procedure NamesBitBtnClick(Sender: TObject);
  22.     procedure NumbEditKeyPress(Sender: TObject; var Key: Char);
  23.     procedure NameEditKeyPress(Sender: TObject; var Key: Char);
  24.   private
  25.     { Private declarations }
  26.     function TelNameToNum(TelName: String): String;
  27.     procedure ListNames(TelNum: String);
  28.   public
  29.     { Public declarations }
  30.   end;
  31.  
  32. var
  33.   MainForm: TMainForm;
  34.  
  35. implementation
  36.  
  37. {$R *.DFM}
  38.  
  39. var
  40. { Array of telephone dialog letters }
  41.   TelDial: array[0 .. 9] of String;
  42.  
  43. { Return telephone digit that corresponds to C }
  44. function DigitToLetter(C: Char): Char;
  45. var
  46.   I, J: Integer;
  47. begin
  48.   C := Upcase(C);
  49.   for I := 0 to 9 do
  50.     for J := 1 to 3 do
  51.       if (C = TelDial[I][J]) then
  52.       begin
  53.         Result := Chr(I + Ord('0'));
  54.         Exit;
  55.       end;
  56.   Result := C;  { Default }
  57. end;
  58.  
  59. { Return ordinal value of digit character C }
  60. function ValueOfChar(C: Char): Integer;
  61. begin
  62.   Result := Ord(C) - Ord('0');
  63. end;
  64.  
  65. { Return number for a telephone alphabetic name }
  66. function TMainForm.TelNameToNum(TelName: String): String;
  67. var
  68.   I: Integer;
  69. begin
  70.   Result := '';
  71.   for I := 1 to Length(TelName) do
  72.     Result := Result + DigitToLetter(TelName[I]);
  73. end;
  74.  
  75. procedure TMainForm.ListNames(TelNum: String);
  76. var
  77.   S: String;  { Temporary string }
  78.  
  79.   { Find N alphabetic permutations of digits in TelNum }
  80.   procedure Permute(N: Integer);
  81.   var
  82.     I, Digit: Integer;
  83.   begin
  84.     Digit := ValueOfChar(TelNum[N]);
  85.     for I := 1 to 3 do
  86.     begin
  87.       S[N] := TelDial[Digit][I];  { Insert letter }
  88.       if (N = Length(TelNum)) then
  89.         ListBox1.Items.Add(S)     { Add string to ListBox }
  90.       else
  91.         Permute(N + 1);  { Call Permute recursively }
  92.     end;
  93.   end; { Permute }
  94.  
  95. begin
  96.   if Length(TelNum) > 0 then
  97.   begin
  98.     S := TelNum;    { Assign to temporary string }
  99.     Permute(1);     { Start permutations }
  100.   end;
  101. end;
  102.  
  103. { Initialize global variables }
  104. procedure TMainForm.FormCreate(Sender: TObject);
  105. begin
  106.   TelDial[0] := '   ';  TelDial[1] := '   ';
  107.   TelDial[2] := 'ABC';  TelDial[3] := 'DEF';
  108.   TelDial[4] := 'GHI';  TelDial[5] := 'JKL';
  109.   TelDial[6] := 'MNO';  TelDial[7] := 'PRS';
  110.   TelDial[8] := 'TUV';  TelDial[9] := 'WXY';
  111. end;
  112.  
  113. { Do Number button click }
  114. procedure TMainForm.NumberBitBtnClick(Sender: TObject);
  115. begin
  116.   NumbEdit.Text := TelNameToNum(NameEdit.Text);
  117.   NumbEdit.SetFocus;
  118. end;
  119.  
  120. { Do Names button click }
  121. procedure TMainForm.NamesBitBtnClick(Sender: TObject);
  122. begin
  123.   ListBox1.Clear;
  124.   ListNames(NumbEdit.Text);
  125.   ListBox1.SetFocus;
  126. end;
  127.  
  128. { Click Names button for Enter key in Number Edit object }
  129. procedure TMainForm.NumbEditKeyPress(Sender: TObject;
  130.   var Key: Char);
  131. begin
  132.   if Key = #13 then
  133.   begin
  134.     NamesBitBtn.Click;
  135.     Key := #0;
  136.   end;
  137. end;
  138.  
  139. { Click Number button for Enter key in Name Edit object }
  140. procedure TMainForm.NameEditKeyPress(Sender: TObject;
  141.   var Key: Char);
  142. begin
  143.   if Key = #13 then
  144.   begin
  145.     NumberBitBtn.Click;
  146.     Key := #0;
  147.   end;
  148. end;
  149.  
  150. end.
  151.