kbdutil.pp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. unit kbdutil;
  2. {$MODE objfpc}{$H+}
  3. interface
  4. type
  5. TKey = record
  6. X, Y: Integer;
  7. YTop, YBottom: Integer;
  8. KeyLabel: ansistring;
  9. end;
  10. TKeys = array of TKey;
  11. TKeyboard = record
  12. Keys: TKeys;
  13. end;
  14. function ReadKeyboardFromFile(const FileName: ansistring): TKeyboard;
  15. implementation
  16. function ReadKeyboardFromFile(const FileName: ansistring): TKeyboard;
  17. var
  18. SaveCtrlZMarksEOF: Boolean;
  19. InF: TextFile;
  20. KeyX, KeyY, KeyY1, KeyY2: Integer;
  21. KeyStr: ansistring;
  22. begin
  23. SaveCtrlZMarksEOF := CtrlZMarksEOF;
  24. try
  25. CtrlZMarksEOF := False;
  26. FillChar(Result, SizeOf(Result), 0);
  27. AssignFile(InF, FileName);
  28. Reset(InF);
  29. while not EoF(InF) do
  30. begin
  31. Read(InF, KeyX);
  32. if KeyX <> -1 then
  33. begin
  34. Readln(InF, KeyY, KeyStr);
  35. Delete(KeyStr, 1, 1);
  36. SetLength(Result.Keys, Length(Result.Keys) + 1);
  37. with Result.Keys[High(Result.Keys)] do
  38. begin
  39. X := KeyX;
  40. Y := KeyY;
  41. YTop := KeyY;
  42. YBottom := KeyY;
  43. KeyLabel := KeyStr;
  44. end;
  45. end
  46. else
  47. begin
  48. Readln(InF, KeyX, KeyY1, KeyY2, KeyY, KeyStr);
  49. Delete(KeyStr, 1, 1);
  50. SetLength(Result.Keys, Length(Result.Keys) + 1);
  51. with Result.Keys[High(Result.Keys)] do
  52. begin
  53. X := KeyX;
  54. Y := KeyY;
  55. YTop := KeyY1;
  56. YBottom := KeyY2;
  57. KeyLabel := KeyStr;
  58. end;
  59. end;
  60. end;
  61. CloseFile(InF);
  62. finally
  63. CtrlZMarksEOF := SaveCtrlZMarksEOF;
  64. end;
  65. end;
  66. end.