Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2009, 00:23   #1
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию tagMSG

Всем привет.
Сильна нужна помощь, никак сам не могу разобраться.
Есть процедура, которая заставляет работать колесо мыши при прокручивании данных в DBGrid.

Необходимо обращаться к этой процедуре с разных DBGrid и с разных форм.
Код:
procedure TForm1.ApplicationEvents1Message(Msg:tagMSG; Handled:Boolean; Form_my:TForm; DBGrid_my:TCustomGrid);
begin
   if Form_my.DBGrid_my.Focused then
   if Msg.message=WM_MOUSEWHEEL then  
      begin
         Msg.message:=WM_KEYDOWN;
         Msg.lParam:=0;
         if Msg.wParam>0 then Msg.wParam:=VK_UP else Msg.wParam:=VK_DOWN;
         Handled:=False;
      end;
end;
Используя эту процедуру из других мест программы
Form1.ApplicationEvents1Message(что сюда нужно написать, и что здесь нужно выставить true?, Form2, DBGrid2);

Помогите пожалуйста разобраться.
AndreyF вне форума Ответить с цитированием
Старый 23.10.2009, 09:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну опиши переменку такого типа и подставляй ее:
Код:
var ttg:tagMSG;
...
Form1.ApplicationEvents1Message(ttg, Form2, DBGrid2);
А насчет
Цитата:
что здесь нужно выставить true
Это я не знаю что ты там хочеш навернуть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2009, 12:56   #3
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию

Я так уже пробовал, так не компилируется
Код:
var Msg:tagMSG;
Form1.ApplicationEvents1Message(Msg, true, Form3, DBGrid1);
теперь в самой процедуре
Код:
procedure TForm1.ApplicationEvents1Message(Msg:tagMSG; Handled:Boolean; Form_my:TForm; DBGrid_my:TCustomGrid);
begin
   if Form_my.DBGrid_my.Focused then
   if Msg.message=WM_MOUSEWHEEL then  
      begin
         Msg.message:=WM_KEYDOWN;
         Msg.lParam:=0;
         if Msg.wParam>0 then Msg.wParam:=VK_UP else Msg.wParam:=VK_DOWN;
         Handled:=False;
      end;
end;
пишет что не знает DBGrid_my и
undeclared identifier: DBGrid_my
?
AndreyF вне форума Ответить с цитированием
Старый 23.10.2009, 13:38   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Правильно пишет.
DBGrid_my - это параметр, а ты зачем то к нему форму прилепил...
Код:
procedure TForm1.ApplicationEvents1Message(Msg:tagMSG; Handled:Boolean; Form_my:TForm; DBGrid_my:TCustomGrid);
begin
   if DBGrid_my.Focused then
   if Msg.message=WM_MOUSEWHEEL then  
      begin
         Msg.message:=WM_KEYDOWN;
         Msg.lParam:=0;
         if Msg.wParam>0 then Msg.wParam:=VK_UP else Msg.wParam:=VK_DOWN;
         Handled:=False;
      end;
end;
Ферштеен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2009, 20:47   #5
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию

Нет не ферштеен!
Никак не могу усвоить информацию,
мне надо воспользоваться этой процедурой
Код:
var   
Handled: boolean;
Msg: tagMSG;

procedure TForm1.ApplicationEvents1Message(Msg:tagMSG; Handled:Boolean; DBGrid_my:TCustomGrid);
begin
   if DBGrid_my.Focused then 
   if Msg.message=WM_MOUSEWHEEL then
      begin
         Msg.message:=WM_KEYDOWN;
         Msg.lParam:=0;
         if Msg.wParam>0 then Msg.wParam:=VK_UP else Msg.wParam:=VK_DOWN;
         Handled:=False;
      end;
end;
с Form2, Form3, Form4 и ...
на каждой из них есть по одному DBGrid.

затем обращаюсь к этой процедуре с другой формы так
Код:
procedure TForm4.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   Form1.ApplicationEvents1Message(Msg, true, DBGrid1);
end;
Все формы кроме Form1, являются MDIchild - формами.

Как только я не пытался, никак не могу добиться, чтоб колесо мыши заработало на всех DBGrid.
AndreyF вне форума Ответить с цитированием
Старый 24.10.2009, 09:33   #6
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Кидаете на основную форму ApplicationEvents1 ( если его еще нет )
устанавливаете ему обработчик события ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); и пишете
Код:
procedure TForm2.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  form: TForm;
  control: TWinControl;
begin
  if Msg.message = WM_MOUSEWHEEL then
  begin
    form := Screen.ActiveForm;
    if Assigned(form) and Assigned(form.ActiveMDIChild) then
    begin
      if form.ActiveMDIChild.ActiveControl is TCustomGrid then
      begin
         Msg.message:=WM_KEYDOWN;
         Msg.lParam:=0;
         if Msg.wParam>0 then Msg.wParam:=VK_UP else Msg.wParam:=VK_DOWN;
         Handled:=False;
      end;
    end;
  end;
end;
s.Creator вне форума Ответить с цитированием
Старый 24.10.2009, 10:23   #7
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию

ApplicationEvents1 - конечно же был на Form1 - MDIForm.
Я как понимаю теперь на любой активной MDIchild форме если есть DBGrid,
то должно колесу мыши присваиваться VK_UP и VK_DOWN?
Если так то не работает всё равно, может где то ещё что то надо написать?
AndreyF вне форума Ответить с цитированием
Старый 24.10.2009, 10:48   #8
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Цитата:
Сообщение от AndreyF Посмотреть сообщение
ApplicationEvents1 - конечно же был на Form1 - MDIForm.
Я как понимаю теперь на любой активной MDIchild форме если есть DBGrid,
то должно колесу мыши присваиваться VK_UP и VK_DOWN?
Если так то не работает всё равно, может где то ещё что то надо написать?
Должно на любой активной если наследник TCustomGrid в фокусе.
Если фокус на другом элементе, например кнопке, то прокрутки не будет.
Попробуйте щелкнуть на любой ячейке DBGrid и покрутить колесиком.
Проверял, правда, на обычных формах и обычном гриде ( StringGrid1 )

Последний раз редактировалось s.Creator; 24.10.2009 в 10:54.
s.Creator вне форума Ответить с цитированием
Старый 24.10.2009, 12:42   #9
AndreyF
Пользователь
 
Регистрация: 15.10.2008
Сообщений: 44
По умолчанию

У меня получается наследник не TCustomGrid, а TDBGrid.
Фокус на DBGrid1 и всё равно не работает прокрутка...
Код:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
var
  Form: TForm;
  control: TWinControl;
begin
   if Msg.message=WM_MOUSEWHEEL then
      begin
         Form:=Screen.ActiveForm;
         if Assigned(Form) and Assigned(Form.ActiveMDIChild) then
            begin
               if Form.ActiveMDIChild.ActiveControl is TDBGrid then 
                  begin
                     Msg.message:=WM_KEYDOWN;
                     Msg.lParam:=0;
                     if Msg.wParam>0 then Msg.wParam:=VK_UP else Msg.wParam:=VK_DOWN;
                     Handled:=False;
                  end;
            end;
      end;
end;
?
AndreyF вне форума Ответить с цитированием
Старый 24.10.2009, 15:03   #10
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

На сколько помню TDBGrid - наследник от TCustomGrid (во всяком случае в D7 )/
Попробуй пошагово выполнить.
А вообще если при выделенном TDBGrid нажимать клавиши вверх/вниз это работает?
s.Creator вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц