Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.04.21;
Скачать: CL | DM;

Вниз

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

 
Вася   (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 вся ветка

Текущий архив: 2013.04.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
15-1356292928
Павел Калугин
2012-12-24 00:02
2013.04.21
Опять анкеты?


15-1356121802
Юрий
2012-12-22 00:30
2013.04.21
С днем рождения ! 22 декабря 2012 суббота


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


8-1231501163
Б
2009-01-09 14:39
2013.04.21
Обрезка растра


9-1194534206
NetSkipper
2007-11-08 18:03
2013.04.21
Нужен OpenGL учебник. Не Краснова.