Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.28;
Скачать: CL | DM;

Вниз

Перетаскивание формы за контент руками   Найти похожие ветки 

 
han_malign ©   (2002-11-18 12:41) [0]

Напоролся на непонятный глюк
форма: BorderStyle=bsNone, на форме лежит Label на всю клиентскую область.
1. Label - оказалась не прозразчной для событий мыши(сама не обрабатывает и форме не отдает), не факт что это глюк, но пришлось протаскивать руками(ComponentStyle менял - не лечит).
2. При перетаскивании формы, сначала прыгает к краю экрана(противоположному направлению перетаскиваня), потом встает на задуманное место(сколько раз это делал, проблем не было). Во время перетаскивания получается след прорисовок от края экрана.

unit frmHexTable;

interface

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

type
THexTableForm = class(TForm)
lbHexTable: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDblClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure lbHexTableMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure lbHexTableMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure lbHexTableMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
F_ptOldPos : TPoint;
F_dwKeySwitch,
F_dwKeyClose: Integer;
F_dwIDSwitch,
F_dwIDClose: DWORD;
procedure HotyKey(var msg:TMessage); message WM_HOTKEY;
public
{ Public declarations }
end;

var
HexTableForm: THexTableForm;

implementation

{$R *.DFM}

procedure THexTableForm.FormCreate(Sender: TObject);
type TLR= packed record
Lo,Hi: word;
end;
begin
TLR(F_dwKeySwitch).Lo:=MOD_CONTROL;
TLR(F_dwKeySwitch).Hi:=byte("H");
TLR(F_dwKeyClose).Lo:=MOD_CONTROL+MOD_ALT;
TLR(F_dwKeyClose).Hi:=byte("H");

F_dwIDSwitch:=GlobalAddAtom("Malign_Hex_HKSwitch");
RegisterHotKey(handle,F_dwIDSwitch,MOD_CONTROL,byte("H"));

F_dwIDClose:=GlobalAddAtom("Malign_Hex_HKClose");
RegisterHotKey(handle,F_dwIDClose,MOD_CONTROL+MOD_ALT,byte("H"));

lbHexTable.ControlStyle:=
lbHexTable.ControlStyle{-[csCaptureMouse,csClickEvents,csDoubleClicks,csNoStdEvents]};
end;

procedure THexTableForm.FormDblClick(Sender: TObject);
begin
//
end;

procedure THexTableForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
UnRegisterHotKey(handle,F_dwIDSwitch);
UnRegisterHotKey(handle,F_dwIDClose);
end;

procedure THexTableForm.FormMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
MouseCapture:=true;
F_ptOldPos:=Point(X,Y);
end;

procedure THexTableForm.FormMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if(MouseCapture)then begin
Left:=Left+(F_ptOldPos.x-x);
Top:=Top+(F_ptOldPos.y-y);
end;
end;

procedure THexTableForm.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseCapture:=false;
end;

procedure THexTableForm.HotyKey(var msg:TMessage);
begin
if(msg.LParam=F_dwKeySwitch)then begin
Visible:=not Visible

end else if(msg.LParam=F_dwKeyClose)then Close;
end;

procedure THexTableForm.lbHexTableMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FormMouseDown(Sender,Button,Shift,X,Y);
end;

procedure THexTableForm.lbHexTableMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
FormMouseMove(Sender,Shift,X,Y);
end;

procedure THexTableForm.lbHexTableMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
FormMouseUp(Sender,Button,Shift,X,Y);
end;

end.


 
KoluChi ©   (2002-11-18 13:24) [1]

> Label - оказалась не прозразчной для событий мыши(сама не >обрабатывает и форме не отдает),
Очень странно, то что "не прозразчной" - это понятно, но "сама не обрабатывает" - такого не может быть (события прописаны?).
Насчет кода отвечу потом.


 
han_malign ©   (2002-11-18 13:36) [2]

сама не обрабатывает- в контексте не прозрачной, по идее если контрол не обрабатывает событий то должен отдавать их предку. А так то - само собой работает.


 
KoluChi ©   (2002-11-18 14:16) [3]

Перемещать форму лучше так
procedure THexTableForm.FormMouseMove1(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
ReleaseCapture;
SendMessage(Handle, WM_SysCommand, $F012, 0);
end;





Страницы: 1 вся ветка

Текущий архив: 2002.11.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
1-93083
Назаров Евгений
2002-11-16 14:37
2002.11.28
Вывод на печать в дельфи7.0


1-93138
cosinus
2002-11-18 10:58
2002.11.28
Создание алгоритма димминга


4-93296
__q1
2002-10-17 17:48
2002.11.28
Работа с консолью


3-92917
Skolotovich
2002-11-11 15:58
2002.11.28
проблема с редактированием БД


6-93158
Дмитрий К.К.
2002-10-01 15:52
2002.11.28
Веб-браузер