Форум: "Основная";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];
ВнизПеретаскивание формы за контент руками Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c