Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
1-92978
Linder
2002-11-18 11:49
2002.11.28
В качестве индексов - стринги.


1-92957
Suprime
2002-11-18 13:07
2002.11.28
Как из всех строк в ListBox e удалить начальные три символа?


1-93014
iNew
2002-11-18 08:54
2002.11.28
Как на Canvas формы вывести разноцветную линию используя


14-93247
Дмитрий К.К.
2002-11-10 22:34
2002.11.28
Явно ограниченный набор возможностей форумов


4-93287
sergserg
2002-10-03 17:17
2002.11.28
Активация формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский