Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ...
- Implementation
- {$R *.dfm}
- Var
- IsAlreadySubclassing: Boolean = False;
- ...
- Function NewEditProc(Window: HWND; uMsg: UINT; WindowParametr: WPARAM; lParam:LPARAM): Integer; Stdcall;
- Const
- MIN_VALUE = -99;
- MAX_VALUE = 99;
- Var
- Col, Row: Integer;
- Begin
- Col := frmMain.strgrSequence.Col;
- Row := frmMain.strgrSequence.Row;
- If uMsg = WM_PASTE Then
- Begin
- Try
- If (StrToInt(Clipboard.AsText) < MIN_VALUE) Or (StrToInt(Clipboard.AsText) > MAX_VALUE) Then
- Begin
- Application.MessageBox(Pchar('В буфере обмена содержится неподходящее значение!'), 'Ошибка', MB_ICONWARNING);
- Exit;
- End
- Else
- Begin
- frmMain.strgrSequence.Cells[Col, Row] := Clipboard.AsText; //отобразится в ячейке только когда сменишь фокус.
- //Т.е.кликнуть куда-то надо после вставки
- Exit;
- End;
- Except
- Application.MessageBox(Pchar('В буфере обмена находятся неподходящие данные!'), 'Ошибка', MB_ICONWARNING);
- Exit;
- End;
- End
- Else
- Result := CallWindowProc(Pointer(GetWindowLong(Window,GWL_USERDATA)), Window, uMsg, WindowParametr, lParam);
- End;
- Procedure TfrmMain.strgrSequenceGetEditText(Sender: TObject; ACol, ARow: Integer; Var Value: String);
- Var
- Window: HWND;
- begin
- If Not IsAlreadySubclassing Then // Если сабклассинга не было, то сабклассим. Иначе - ничего,т.к. уже сделано
- Begin
- Window := GetWindow(strgrSequence.Handle, GW_CHILD);
- If IsWindow(Window) Then
- SetWindowLong(Window,GWL_USERDATA,SetWindowLong(Window, GWL_WNDPROC, LPARAM(@NewEditProc)));
- IsAlreadySubclassing := True;
- End;
- End;
- ...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement