Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2013.04.21;
Скачать: [xml.tar.bz2];

Вниз

не получается задать регион элементам окна   Найти похожие ветки 

 
Вася   (2010-01-28 00:08) [0]

необходимо задать регион элементам окна.в частности статику (с картинкою) и кнопке.
хоть MS Spy++ и показывает что всё как надо, но визуально никакого результата...

в одой статейке нашлось упоминание, что регионы нельзя задавать дочерним окнам, но в VCL же это как-то получается...=((


 
Игорь Шевченко ©   (2010-01-28 00:18) [1]

регион можно задавать любому окну


 
Игорь Шевченко ©   (2010-01-28 00:18) [2]

Но ты тоже не уважаешь нас. Зачем тебе отвечать ?


 
Вася   (2010-01-28 00:45) [3]

> Игорь Шевченко ©   (28.01.10 00:18) [2]

о_О?


 
Игорь Шевченко ©   (2010-01-28 00:48) [4]

http://segfault.kiev.ua/smart-questions-ru.html


 
Германн ©   (2010-01-28 01:53) [5]


> Игорь Шевченко ©   (28.01.10 00:48) [4]
>
> http://segfault.kiev.ua/smart-questions-ru.html
>

Это что-то новенькое. :)


 
Вася   (2010-01-28 02:23) [6]

ну и что же не так я спросил?
поиск про регионы мне как раз и дал что регионы нельзя задавать дочерним окнам.
цитирую:

> У функции SetWindowRgn есть ряд особенностей:
> ...
> 3) SetWindowRgn не работает для дочерних окон (окон созданных со стилем WS_CHILD).


 
Игорь Шевченко ©   (2010-01-28 02:41) [7]

Вася   (28.01.10 02:23) [6]

Больше не читай каку.

procedure TForm1.Button1Click(Sender: TObject);
var
 ButtonRect: TRect;
begin
 FButton := CreateWindowEx(0, "BUTTON","_OK_",
   WS_CHILD or WS_VISIBLE or WS_CLIPSIBLINGS or BS_PUSHBUTTON,
   10, 10, 70, 25, Handle, 0, HInstance, nil);
 Windows.GetWindowRect(FButton, ButtonRect);
 OffsetRect(ButtonRect, -ButtonRect.Left, -ButtonRect.Top);
 FButtonRgn := CreateEllipticRgnIndirect (ButtonRect);
 Win32Check((FButtonRgn <> 0) and (SetWindowRgn (FButton, FButtonRgn, true) <> 0));
end;


 
Игорь Шевченко ©   (2010-01-28 02:46) [8]

Насчет того, что ты не так спросил: если ты пишешь, что у тебя чего-то не получается, то приводи код не после наводящих вопросов, а сразу в вопросе, об чем, кстати, написано в ссылке [4].

Если ты где-то что-то прочитал, чего делать нельзя, дай ссылку на этот материал.

Уважай потенциальных отвечающих, им вытягивать из тебя клещами "главную военную тайну" нафиг не сдалось, есть более интересные способы времяпровождения.

unit main;

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   PopupMenu1: TPopupMenu;
   File1: TMenuItem;
   Help1: TMenuItem;
   procedure FormShow(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   FRgn: HRGN;
   FButtonRgn: HRGN;
   FButton: HWND;
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormShow(Sender: TObject);
begin
 FRgn := CreateEllipticRgnIndirect (Button1.ClientRect);
 SetWindowRgn(Button1.Handle, FRgn, true);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 ButtonRect: TRect;
begin
 FButton := CreateWindowEx(0, "BUTTON","_OK_",
   WS_CHILD or WS_VISIBLE or WS_CLIPSIBLINGS or BS_PUSHBUTTON,
   10, 10, 70, 25, Handle, 0, HInstance, nil);
 Windows.GetWindowRect(FButton, ButtonRect);
 OffsetRect(ButtonRect, -ButtonRect.Left, -ButtonRect.Top);
 FButtonRgn := CreateEllipticRgnIndirect (ButtonRect);
 Win32Check((FButtonRgn <> 0) and (SetWindowRgn (FButton, FButtonRgn, true) <> 0));
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 SetWindowLong(Button1.Handle, GWL_STYLE,
   GetWindowLong(Button1.Handle, GWL_STYLE) or BS_MULTILINE);
 Button1.Caption := "Press"#13#10"Me";
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 P: TPoint;
begin
 P := ClientToScreen(Point(Button2.Left, Button2.Top + Button2.Height));
 PopupMenu1.Popup (P.X, P.Y);
end;

end.


object Form1: TForm1
 Left = 191
 Top = 108
 Caption = "Form1"
 ClientHeight = 348
 ClientWidth = 536
 Color = clBackground
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 OnShow = FormShow
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 244
   Top = 268
   Width = 109
   Height = 57
   Caption = "Button1"
   TabOrder = 0
   OnClick = Button1Click
 end
 object Button2: TButton
   Left = 204
   Top = 56
   Width = 75
   Height = 25
   Caption = "Button2"
   TabOrder = 1
   OnClick = Button2Click
 end
 object PopupMenu1: TPopupMenu
   Left = 204
   Top = 88
   object File1: TMenuItem
     Caption = "&File"
   end
   object Help1: TMenuItem
     Caption = "&Help"
   end
 end
end


 
Вася   (2010-01-28 08:39) [9]

интересный код,спасибо...=)
узнал несколько новых приёмов.=))

с кнопками вроде нормально,а вот статик с картинкой всё равно глючит...

procedure TForm1.Button4Click(Sender: TObject);
var StaticRect: TRect;
begin
FStatic:=CreateWindow("Static", "", WS_CHILD or SS_BITMAP or WS_VISIBLE, 10, 70, 0, 0, Handle, 0, HInstance, nil);
FBmp:=LoadImage(HInstance, "C:\pict.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
SendMessage(FStatic, STM_SETIMAGE, IMAGE_BITMAP, FBmp);
Windows.GetWindowRect(FStatic, StaticRect);
OffsetRect(StaticRect, -StaticRect.Left, -StaticRect.Top);
FStaticRgn:=CreateEllipticRgnIndirect(StaticRect);
SetWindowRgn(FStatic, FStaticRgn, true);
end;

в вашем примере только один баг остался - сворачиваю окно, разворачиваю - и снова статик квадратный.вот при перекрытии другими окнами не портится, а наоборот восстанавливается если после сворачивания.
когда на VCL делаю то почему-то всегда лучше получается,у меня наоборот было: на чистом WinAPI написал - и при перекрытии портится...=((

а может я просто что-то не учёл?

program Project1;

uses Windows, Messages, Commctrl;

var WinClass: TWndClass;
   hInst, Handle, Image_01, hFont: HWND; Msg: TMsg;
   Bmp: HBITMAP; rgn: HRGN; rect: TRect;

function WindowProc(HWND, Msg, wParam, lParam: Longint): Longint; Stdcall;
begin
Result:=DefWindowProc(HWND, Msg, wParam, lParam);
Case Msg Of
     WM_MOUSEMOVE:
           ;//Windows.Beep(400, 400);
     WM_DESTROY:
           begin
           DeleteObject(hFont);
           UnRegisterClass("mywndclass", hInst);
           ExitProcess(hInst);
           end;
     end;
end;

begin
hInst:=GetModuleHandle(nil);
with WinClass do
     begin
     Style:=CS_PARENTDC;
     hIcon:=LoadIcon(hInst, MAKEINTRESOURCE("MAINICON"));
     lpfnWndProc:=@WindowProc;
     hInstance:=hInst;
     hbrBackground:=COLOR_BTNFACE+3;
     lpszClassName:="mywndclass";
     hCursor:=LoadCursor(0, IDC_ARROW);
     end;
InitCommonControls;
RegisterClass(WinClass);
Handle:=CreateWindowEx(0, "mywndclass", "testprogram_05", WS_OVERLAPPEDWINDOW Or WS_VISIBLE Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX Or WS_SYSMENU, 400, 200, 400, 400, 0, 0, hInst, nil);
hFont:=CreateFont(-11, 0, 0, 0, 0, 0, 0, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH Or FF_DONTCARE, "MS Sans Serif");
Image_01:=CreateWindow("Static", "", WS_CHILD Or SS_BITMAP Or WS_VISIBLE, 120, 180, 200, 100, Handle, 1, hInst, Nil);
//SendMessage(Image_01, WM_SETFONT, hFont, 0);
Bmp:=LoadImage(hInst, "C:\pict.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
SendMessage(Image_01, STM_SETIMAGE, IMAGE_BITMAP, Bmp);
Windows.GetWindowRect(Image_01, rect);
OffsetRect(rect, -rect.Left, -rect.Top);
rgn:=CreateEllipticRgnIndirect(rect);
SetWindowRgn(Image_01, rgn, True);
while (GetMessage(Msg, 0, 0, 0)) do
     begin
     TranslateMessage(Msg);
     DispatchMessage(Msg);
     end;
end.


 
Leonid Troyanovsky ©   (2010-01-28 11:55) [10]


> Вася   (28.01.10 08:39) [9]

> FStatic:=CreateWindow("Static", "", WS_CHILD or SS_BITMAP
> or WS_VISIBLE, 10, 70, 0, 0, Handle, 0, HInstance, nil);

or WS_CLIPSIBLINGS.

--
Regards, LVT.


 
Вася   (2010-01-29 07:30) [11]

спасибо!=)
так совсем нормально стало...^__^

* ушёл учить флаги стилей *



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

Форум: "WinAPI";
Текущий архив: 2013.04.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
15-1356418098
Nicolas C.
2012-12-25 10:48
2013.04.21
Выбор Бд


15-1356228928
makz
2012-12-23 06:15
2013.04.21
Курсор мыши


15-1356325818
Андреевич
2012-12-24 09:10
2013.04.21
sql-запрос


9-1194462751
Babooin
2007-11-07 22:12
2013.04.21
DirectX vs OpenGL


4-1264626524
Вася
2010-01-28 00:08
2013.04.21
не получается задать регион элементам окна





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