Посл.ответ |
Сообщение |
 Ранг: 107.6 (ветеран) Активность: 0.11↘0 Статус: Участник
|
Создано: 15 июня 2007 20:54 · Личное сообщение · #1
Привет всем!
Слышал, что существует АПИ-функция, позволяющая перемещать окно за любую область. Кто-нить о такой знает?
И вообще, как такое на Borland C++ реализовать?
----- программистом не рождаются - им умирают | Сообщение посчитали полезным: |
|
 Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 15 июня 2007 20:58 · Личное сообщение · #2
то есть "за любую область"? SetWindowPos() ?
| Сообщение посчитали полезным: |
Ранг: 309.8 (мудрец), 21thx Активность: 0.17↘0 Статус: Участник
|
Создано: 15 июня 2007 21:02 · Личное сообщение · #3
из DialogProc:
.elseif [wParam]==WM_LBUTTONDOWN
invoke ReleaseCapture
invoke SendMessage,[hWin],WM_SYSCOMMAND,0F012h,0 ; Magic number =)
----- Shalom ebanats! | Сообщение посчитали полезным: |
 Ранг: 260.9 (наставник) Активность: 0.12↘0 Статус: Участник John Smith
|
Создано: 15 июня 2007 21:02 · Личное сообщение · #4
а мне кажется за любое место в диалоге таскать. ждём вразумительного описания воппроса...
----- Недостаточно только получить знания:надо найти им приложение | Сообщение посчитали полезным: |
Ранг: 226.0 (наставник), 67thx Активность: 0.16↘0 Статус: Участник
|
Создано: 15 июня 2007 21:08 · Поправил: SergX · Личное сообщение · #5
Нужно обрабатывать сообщения.
На делфи можно так:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
//Form1.AlphaBlend:=True; Form1.AlphaBlendValue:=180;
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
//Form1.AlphaBlend:=False; Form1.AlphaBlendValue:=245;
end;
Или так:
Function XXX(hWin: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM): bool; stdcall;
Begin
Case uMsg of
WM_LBUTTONDOWN:
Begin
Result:=BOOL(DefWindowProc(hWin, uMsg, wp, lp));
PostMessage(hWin, WM_SYSCOMMAND, $f012, 0);
End;
.
.
.
WM_DESTROY, WM_CLOSE: PostQuitMessage(0);
End;
End;
| Сообщение посчитали полезным: |
Ранг: 115.1 (ветеран), 3thx Активность: 0.07↘0 Статус: Участник
|
Создано: 15 июня 2007 21:10 · Личное сообщение · #6
format PE GUI 4.0
entry start
include '%fasminc%\win32a.inc'
IDC_EXIT = 100
HTCAPTION = 2
macro WM_CASE reg, [msg]
{
forward
cmp reg, WM_#msg
je .#msg
}
section '.rsrc' code readable writeable executable
data resource
; resource directory
directory RT_DIALOG,dialogs,
RT_ICON, icons,
RT_GROUP_ICON, group_icons
; resource subdirectories
resource dialogs,
200, LANG_ENGLISH+SUBLANG_DEFAULT, main_dialog
resource icons,
1, LANG_NEUTRAL, icon_data
resource group_icons,
400, LANG_NEUTRAL, main_icon
dialog main_dialog,'Test',0,0,164,140,DS_MODALFRAME+DS_CENTER+WS_POPUP+WS_VIS IBLE+WS_CAPTION+WS_SYSMENU,
WS_EX_DLGMODALFRAME, ,'Tahoma',8
dialogitem 'BUTTON','Exit',IDC_EXIT,115,120,42,14,WS_VISIBLE+WS_TABSTOP+BS_DEFPUS HBUTTON
enddialog
icon main_icon, icon_data, 'ida.ico'
end data
align 4
proc DlgProc, hDlg, uMsg, wParam, lParam
mov eax, [uMsg]
WM_CASE eax, INITDIALOG, COMMAND, CLOSE, LBUTTONDOWN
.r0:
xor eax, eax
jmp .return
.INITDIALOG:
invoke LoadIcon, [hInstance], 400
invoke SendMessage, [hDlg], WM_SETICON, ICON_BIG, eax
jmp .r1
.COMMAND:
mov eax, [wParam]
cmp ax, IDCANCEL
je .exit
cmp ax, IDC_EXIT
jne .r0
.exit:
invoke SendMessage, [hDlg], WM_CLOSE, 0, 0
jmp .r1
.LBUTTONDOWN:
invoke SendMessage, [hDlg], WM_NCLBUTTONDOWN, HTCAPTION, [lParam]
jmp .r1
.CLOSE:
invoke EndDialog, [hDlg], 0
.r1:
xor eax, eax
inc eax
.return:
ret
endp
start:
invoke GetModuleHandle, NULL
mov [hInstance], eax
invoke DialogBoxParam, eax, 200, 0, DlgProc, 0
invoke ExitProcess, 0
hInstance dd ?
data import
library kernel32,'KERNEL32.DLL',
user32,'USER32.DLL'
include '%fasminc%\APIA\KERNEL32.INC'
include '%fasminc%\APIA\USER32.INC'
end data
| Сообщение посчитали полезным: |
Ранг: 161.0 (ветеран) Активность: 0.12↘0 Статус: Участник
|
Создано: 15 июня 2007 21:34 · Личное сообщение · #7
private
{ Private declarations }
procedure WMNCHitTest(var M: TWMNCHitTest);
message wm_NCHitTest;
procedure TForm1. WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
with M do
if M.Result = htClient then
M.Result := htCaption;
end;
| Сообщение посчитали полезным: |
 Ранг: 107.6 (ветеран) Активность: 0.11↘0 Статус: Участник
|
Создано: 15 июня 2007 23:09 · Поправил: Gambit · Личное сообщение · #8
Фига се.. ответов!
s0larian пишет:
то есть "за любую область"? SetWindowPos() ?
Rascal пишет:
а мне кажется за любое место в диалоге таскать
Я имел ввиду следующий случай. Есть простое окно (типа того, что описано в одном из первых туторов айсилона). Стиль окна WS_OVERLAPPEDWINDOW, т.е. оно имеет заголовок и все, что на нем полагается. Перемещать окно (при помощи крысы) можно только за заголовок. Что можно сделать, чтобы была возможность перемещать окно мышкой не только за заголовок, но и за любую его область?
SLV
Пасиба!!!
С асма перевел на С++, если кому интересно, это выглядит так:
case WM_LBUTTONDOWN:
{
SendMessage (hWnd,WM_SYSCOMMAND,61458,0);
}
И ЭТО РАБОТАЕТ
----- программистом не рождаются - им умирают | Сообщение посчитали полезным: |
Ранг: 17.3 (новичок), 1thx Активность: 0.01↘0 Статус: Участник
|
Создано: 16 июня 2007 01:56 · Личное сообщение · #9
Я делал как __ на fasm. Если в кратце, то:
WM_NCLBUTTONDOWN equ 0a1h
HTCAPTION equ 2
...
proc DialogProc,hwnddlg,msg,wparam,lparam
...
cmp [msg],WM_LBUTTONDOWN
je move
...
move:
invoke SendMessage,[hwnddlg],WM_NCLBUTTONDOWN,HTCAPTION, 0
jmp processed
...
processed:
xor eax,eax
ret
| Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 16 июня 2007 08:40 · Личное сообщение · #10
Gambit пишет:
case WM_LBUTTONDOWN:
{
SendMessage (hWnd,WM_SYSCOMMAND,61458,0);
}
а ReleaseCapture?
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
Ранг: 26.1 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 июня 2007 09:32 · Поправил: tum0rc0re · Личное сообщение · #11
Еще как вариант
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
ReleaseCapture;
Perform(WM_SYSCOMMAND, SC_MOVE or HTCAPTION, 0);
end;
end;
| Сообщение посчитали полезным: |
 Ранг: 107.6 (ветеран) Активность: 0.11↘0 Статус: Участник
|
Создано: 16 июня 2007 11:13 · Личное сообщение · #12
Icelot пишет:
а ReleaseCapture?
А это обязательно? У меня без него работает =\
----- программистом не рождаются - им умирают | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 16 июня 2007 11:19 · Личное сообщение · #13
Gambit желательно сделать, в мсдн почитай чего она делает.
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 107.6 (ветеран) Активность: 0.11↘0 Статус: Участник
|
Создано: 16 июня 2007 11:55 · Личное сообщение · #14
Да нет, я ни одной ф-ции не использую без того чтобы в мсдн залезть)) Вот только я так и не понял: зачем она в моем случае, если и без нее моя прога работает ?
ЗЫ: Причем, работает даже на Win98 (только что на VMware проверил)...
----- программистом не рождаются - им умирают | Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 16 июня 2007 13:13 · Личное сообщение · #15
Эта функция освобождает окно от захвата сообщений мыши. У тебя работает нормально, т.к. захват не был установлен до этого. Если вдруг будет(SetCapture) то хз, как окно тогда будет перемещаться. Судя по всему не правильно)
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 107.6 (ветеран) Активность: 0.11↘0 Статус: Участник
|
Создано: 16 июня 2007 13:46 · Личное сообщение · #16
Icelot пишет:
Если вдруг будет(SetCapture) то хз, как окно тогда будет перемещаться.
Но ведь SetCapture на мое окно могу установить только я и получается, что если я не вызывал эту апишку, то и ReleaseCapture мне не нужен, так?)
----- программистом не рождаются - им умирают | Сообщение посчитали полезным: |
Ранг: 26.1 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 16 июня 2007 14:00 · Личное сообщение · #17
Gambit пишет:
Но ведь SetCapture на мое окно могу установить только я и получается, что если я не вызывал эту апишку, то и ReleaseCapture мне не нужен, так?)
Кто мешает другому узнать HWND твоего окна и сделать SetCapture?  Почетче выражайся ;)
| Сообщение посчитали полезным: |
 Ранг: 85.4 (постоянный) Активность: 0.08↘0 Статус: Участник
|
Создано: 16 июня 2007 14:24 · Личное сообщение · #18
ИМХО надёжность дороже пары байт ;)
----- radio uno in ibisa ... | Сообщение посчитали полезным: |
 Ранг: 107.6 (ветеран) Активность: 0.11↘0 Статус: Участник
|
Создано: 16 июня 2007 14:45 · Личное сообщение · #19
Лана, лана, пожалуй правда надежность дороже)
----- программистом не рождаются - им умирают | Сообщение посчитали полезным: |
 Ранг: 107.6 (ветеран) Активность: 0.11↘0 Статус: Участник
|
Создано: 17 июня 2007 22:50 · Личное сообщение · #20
Нигде не могу найти нормальный тутор, как вручную создавать и прикреплять ресурсы на Borland C++.  Подскажите, плиз, где можно найти?
----- программистом не рождаются - им умирают | Сообщение посчитали полезным: |
 Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 17 июня 2007 23:23 · Поправил: Hellspawn · Личное сообщение · #21
не знаю как в Borland C++, но в дельфях можно сделать полу-автоматически)))
кликаешь project -> Add to Project -> выбираешь тип файла *.rc и открываешь test.rc
test.rc:
имя_ресурса тип_ресурса сам_ресурс
Test RCDATA test.exe
всё) дальше в папке появится test.res а в юните {$R 'test.res' 'test.rc'}
а создать можно ресур хакером
----- [nice coder and reverser] | Сообщение посчитали полезным: |
 Ранг: 107.6 (ветеран) Активность: 0.11↘0 Статус: Участник
|
Создано: 17 июня 2007 23:36 · Личное сообщение · #22
Hellspawn пишет:
кликаешь project -> Add to Project -> выбираешь тип файла
Не-е  Я мазохист ;)
Мне интересно именно как это делать полностью ручками. А "полу-автоматически" - таких у меня статей дцать точно есть
----- программистом не рождаются - им умирают | Сообщение посчитали полезным: |
 Ранг: 107.6 (ветеран) Активность: 0.11↘0 Статус: Участник
|
Создано: 30 июня 2007 10:12 · Поправил: Gambit · Личное сообщение · #23
Если кому интересно, то нормальное описание подключения ресурсов здесь:
_http://www.tiflocomp.ru/docs/programming/bcc_free.php
----- программистом не рождаются - им умирают | Сообщение посчитали полезным: |