|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.11.2011, 16:36 | #1 |
Пользователь
Регистрация: 31.03.2008
Сообщений: 10
|
ScrollBox скроллинг через сообщения
Всем добрый день!!! Вот такой вопрос.
Решил сделать прокрутку в скролбоксе мышой. Колесо вверх,вниз - вертикальная прокрутка, а если с нажатым шифтом - горизонтальная прокрутка. Решил с помощьё мессаджей. Получилось так: unit MainForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, ExtCtrls, ExtDlgs, StdCtrls; Type TKeystatus=(up,down); TForm6 = class(TForm) MainMenu1: TMainMenu; MenuFile: TMenuItem; MFNew: TMenuItem; MFOpen: TMenuItem; MFSave: TMenuItem; Panel1: TPanel; Panel2: TPanel; ScrollBox1: TScrollBox; Image1: TImage; OpenPictureDialog1: TOpenPictureDialog; procedure MFOpenClick(Sender: TObject); procedure OrientationDesign; procedure FormCreate(Sender: TObject); private { Private declarations } KeyShiftstatus:TKeystatus; ImageWidth:integer; ImageHeight:integer; ImageRect:TRect; procedure DrawImageActiveBorder; procedure WMMOUSEWHEEL(var Msg: TWMMouseWheel); message WM_MOUSEWHEEL; public { Public declarations } end; var Form6: TForm6; implementation {$R *.dfm} procedure TForm6.DrawImageActiveBorder; var rect:TRect; begin image1.Canvas.Brush.Color:=clred; image1.Canvas.Brush.Style:=bsCross; image1.Canvas.FrameRect(ImageRect); end; procedure TForm6.FormCreate(Sender: TObject); begin OrientationDesign; end; procedure TForm6.MFOpenClick(Sender: TObject); begin if openpicturedialog1.Execute then begin image1.Picture.LoadFromFile(openpic turedialog1.FileName); image1.Width:=image1.Picture.Width; image1.Height:=image1.Picture.Heigh t; ImageWidth:=Image1.Width; ImageHeight:=Image1.Height; Image1.Width:=Image1.Width+150; image1.Height:=image1.Height+150; ImageRect.Left:=0; ImageRect.Right:=ImageWidth; ImageRect.Top:=0; ImageRect.Bottom:=ImageHeight; end; end; procedure TForm6.OrientationDesign; begin image1.Left:=scrollbox1.ClientRect. Left; image1.Top:=scrollbox1.ClientRect.T op; end; procedure TForm6.WMMOUSEWHEEL(var Msg: TWMMouseWheel); var zDelta: Integer; begin inherited; if (Msg.Keys=0) then begin if WindowFromPoint(Mouse.CursorPos) <> scrollbox1.Handle then Exit; if Msg.WheelDelta < 0 then zDelta := -10 else zDelta := 10; with scrollbox1 do begin if ((VertScrollBar.Position = 0) and (zDelta > 0)) or ((VertScrollBar.Position = VertScrollBar.Range - ClientHeight) and (zDelta < 0)) then Exit; ScrollBy(0, zDelta); VertScrollBar.Position := VertScrollBar.Position - zDelta; end; end else if (Msg.Keys=1) then begin if WindowFromPoint(Mouse.CursorPos) <> scrollbox1.Handle then Exit; if Msg.WheelDelta < 0 then zDelta := -10 else zDelta := 10; with scrollbox1 do begin if ((HorzScrollBar.Position = 0) and (zDelta > 0)) or ((HorzScrollBar.Position = HorzScrollBar.Range - ClientWidth) and (zDelta < 0)) then Exit; ScrollBy(zDelta, 0); HorzScrollBar.Position := HorzScrollBar.Position - zDelta; end; end; end; end. Всё работает отлично, крутится, но если добавляю кнопку на форму, просто без реакций даже, то прокрутка (горизонтальная) в ауте. Обнаружил, что без кнопки в Msg.Keys=1(это shift и есть), а с кнопкой передаётся Msg.Keys=4 (это дефаулт вроде). Подскажите, где протупил???? |
06.11.2011, 18:48 | #2 |
Пользователь
Регистрация: 31.03.2008
Сообщений: 10
|
if WindowFromPoint(Mouse.CursorPos) = scrollbox1.Handle then begin
Scrollbox1.SetFocus; Всё разобрался, надо при наведении мыши фокус поставить.... |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Отправка e-mail сообщения с форматированием через SMTP | chandrasecar | Работа с сетью в Delphi | 1 | 10.09.2014 21:29 |
Socket не отсылает сообщения через SEND и не принимает | vaan.sk | C/C++ Сетевое программирование | 1 | 22.06.2011 20:57 |
Скроллинг ScrollBox. Интересная идея. | Vova777 | Общие вопросы Delphi | 3 | 31.05.2011 19:16 |
Отправка сообщения через компонент RzSendMessage | artemavd | Работа с сетью в Delphi | 0 | 01.04.2010 07:43 |
Ребята собирают сообщения к статус картинкам в QIP`е. Как оказалось, у народа фантизия хлещет через край | Alar | Свободное общение | 8 | 02.06.2008 16:43 |