Главная страница
    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.009 c
3-92947
CS
2002-11-12 11:26
2002.11.28
удаление дубликатов записей


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


14-93232
Grande
2002-11-10 17:18
2002.11.28
Zeoslib для Delphi7


1-93018
Kazad
2002-11-19 07:52
2002.11.28
Оформление


3-92941
Alexandr1
2002-11-06 10:11
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский