Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проверка текста при вставки из буфера в TStringGri, какое событие надо обрабатывать и как? 
:(
    Опции темы
Ptica_Oz
Дата 1.6.2007, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



на форме лежит компанент TStringGrid в ячейки которого надо вводить числа. при обработке события KeyPress я могу запретить пользователю вводить буквы и пр., но хитрый пользователь может вставить текст из буфера! как предотвратить такое подлое поведение со стороны пользователя?  smile 
изначально в ячейке стоит 0, хорошо бы что бы он там и оставался при вызове пользователем команды "Вставить" из контекстного меню, а ещё лючше если можно проводить анализ вставляемого текста и если это число, то вставлять его, а если нет, то не вставлять
направте на путь истинный...
PM MAIL   Вверх
Sunvas
Дата 1.6.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Вот, набросал на примере Эдита - будут вставляться только числа. Может можно оптимизировать.
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,Clipbrd;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function NewEditProc(wnd:HWND; uMsg:UINT; wParam:WPARAM; lParam:LPARAM):integer; stdcall;
var  T: TClipboard;
     olds,s:string;
     i:word;
begin
 if uMsg=wm_paste then
 begin
   T:=TClipboard.Create;
   olds:=T.AsText;
   s:=olds;
   for i:=length(s) downto 1 do
    begin
      if not (s[i] in ['0'..'9']) then delete(s,i,1);
    end;
   t.AsText:=s;
   result:=CallWindowProc(Pointer(GetWindowLong(wnd,GWL_USERDATA)),wnd,uMsg,wParam,lParam);
   t.AsText:=olds;
   T.Free;
 end else
   result:=CallWindowProc(Pointer(GetWindowLong(wnd,GWL_USERDATA)),wnd,uMsg,wParam,lParam);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(edit1.Handle,GWL_USERDATA,SetWindowLong(edit1.Handle,GWL_WNDPROC, LPARAM(@NewEditProc)));
end;

end.



Это сообщение отредактировал(а) Sunvas - 1.6.2007, 19:06


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Ptica_Oz
Дата 4.6.2007, 06:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 1.3.2007

Репутация: нет
Всего: нет



Sunvas, спасибо, пример хороший и на Эдите работает замечательно, только вот на TStringGrid'е нет  smile не срабатывает условие if uMsg=wm_paste then. подскажите как быть?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0992 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.