Advertisement
anticlown

Отлов вставки в stringgrid(основа)

Mar 16th, 2023
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.00 KB | None | 0 0
  1. ...
  2.  
  3. Implementation
  4.  
  5. {$R *.dfm}
  6.  
  7. Var
  8.     IsAlreadySubclassing: Boolean = False;
  9.  
  10. ...
  11.  
  12. Function NewEditProc(Window: HWND; uMsg: UINT; WindowParametr: WPARAM; lParam:LPARAM): Integer; Stdcall;
  13. Const
  14.     MIN_VALUE = -99;
  15.     MAX_VALUE = 99;
  16. Var
  17.     Col, Row: Integer;
  18. Begin
  19.     Col := frmMain.strgrSequence.Col;
  20.     Row := frmMain.strgrSequence.Row;
  21.  
  22.     If uMsg = WM_PASTE Then
  23.     Begin
  24.         Try
  25.             If (StrToInt(Clipboard.AsText) < MIN_VALUE) Or (StrToInt(Clipboard.AsText) > MAX_VALUE) Then
  26.             Begin
  27.                 Application.MessageBox(Pchar('В буфере обмена содержится неподходящее значение!'), 'Ошибка', MB_ICONWARNING);
  28.                 Exit;
  29.             End
  30.             Else
  31.             Begin
  32.                 frmMain.strgrSequence.Cells[Col, Row] := Clipboard.AsText; //отобразится в ячейке только когда сменишь фокус.
  33.                                                                             //Т.е.кликнуть куда-то надо после вставки
  34.                 Exit;
  35.             End;
  36.         Except
  37.             Application.MessageBox(Pchar('В буфере обмена находятся неподходящие данные!'), 'Ошибка', MB_ICONWARNING);
  38.             Exit;
  39.         End;
  40.     End
  41.     Else
  42.         Result := CallWindowProc(Pointer(GetWindowLong(Window,GWL_USERDATA)), Window, uMsg, WindowParametr, lParam);
  43. End;
  44.  
  45. Procedure TfrmMain.strgrSequenceGetEditText(Sender: TObject; ACol, ARow: Integer; Var Value: String);
  46. Var
  47.     Window: HWND;
  48. begin
  49.     If Not IsAlreadySubclassing Then // Если сабклассинга не было, то сабклассим. Иначе - ничего,т.к. уже сделано
  50.     Begin
  51.         Window := GetWindow(strgrSequence.Handle, GW_CHILD);
  52.         If IsWindow(Window) Then
  53.             SetWindowLong(Window,GWL_USERDATA,SetWindowLong(Window, GWL_WNDPROC, LPARAM(@NewEditProc)));
  54.         IsAlreadySubclassing := True;
  55.     End;
  56. End;
  57.  
  58. ...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement