Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > RichEdit и Графика 3D


Автор: Antares21 12.5.2009, 12:49
Здравствуйте Уважаемые Форумчане. Я разрабатываю программку и появилась небольшая проблема. На форме присутствует 

компонент RichEdit - в него будет загружаться текстовый файл. Также на форме присутствует трехмерное изображение 

(параллелипипед) OpenGL. С этим Пипедом я могу делать что угодно, вращая колесико мышки я программирую увеличение 

или уменьшение Пипеда. Только вот при компоненте RichEdit мне это делать не удается. Потому что как только я начинаю 

крутить колесо, прокрутка активизируется в RichEdit. И вот мне непонятно как сделать так, чтобы при вращении колеса 

происходило следующее: Если указатель мыши находится над компонентом RichEdit, то прокрутка осуществляется в этом 

компоненте, а если указатель мыши находится не над компонентом RichEdit, то прокрутка в RichEdit не осуществляется и 

происходит обработка события FormMouseWheel, т.е. над моим Пипедом. Код прилагается. Если зажать клавишу курсора 

2вверх" или "вниз", и сразу зажать среднюю клавишу мышки и поводить ею по столу, то можно увидеть вращение пипеда. 

Но как сделать это без зажатия клавиш курсора. Еще вопрос: как сделать перемещение пипеда, относительно зажатой 

клавиши мыши (допустим правой) и движения мыши??? Заранее спасибо.

Автор: Snowy 12.5.2009, 16:51
Допустим на форме лежат 2 панели.
На первой лежит RichEdit, на второй вывод изображения.
Тогда обработчик выглятит так:
Код
procedure TForm1.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  if ControlAtPos(ScreenToClient(MousePos), true, true) <> RichEdit1.Parent then
  begin
    // что-то делаем
    Handled := True;
  end; // иначе ничего не делаем - крутится рич

Автор: Snowy 12.5.2009, 17:14
В данном конкретном случае делаем так:
Код
procedure TMainForm1.FormMouseWheelDown(Sender: TObject;
  Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  if ControlAtPos(ScreenToClient(MousePos), True, true) <> RichEdit1 then
  begin
    ViewAngle := ViewAngle - 5;
    FormResize (nil);
    Handled := True;
  end;
end;

procedure TMainForm1.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  MousePos: TPoint; var Handled: Boolean);
begin
  if ControlAtPos(ScreenToClient(MousePos), True, true) <> RichEdit1 then
  begin
    ViewAngle := ViewAngle + 5;
    FormResize (nil);
    Handled := True;
  end;
end;
Ибо тут всё лежит прямо на форме.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)