Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как определить Handle родительского окна для контрола [D6, Win2k]


Страницы:   1 2

Grrey ©   (2003-04-02 12:56:00) 

Есть такая функция DrawFocusRect. Мне нужно написать компоненту ActiveX чтобы она могла перемещаться на форме. Для DrawFocusRect нужен Handle родительского окна. Owner.Canvas.Handle не работает. Может чего-нибудь посоветуете?


Grrey   (2003-04-03 14:00:00) [1]

Спасибо!
Я это увидел!


nikkie   (2003-04-03 13:21:00) [2]

The GetWindowDC function retrieves the device context (DC) for the entire window, including title bar, menus, and scroll bars.

The GetDC function retrieves a handle to a display device context (DC) for the client area of a specified window or for the entire screen.


Grrey   (2003-04-03 10:36:00) [3]

to Songoku>Это не прога, а компонент. Нужно сделать возможность добавлять в программу копоненты без перекомпиляции. Я решил использовать ActiveX.
to nikkie> Спасибо. Это, чего я искал. Но эта функция тоже возвращает Handle окна, а мне нужен (как оказалось) DC.

И еще один вопрос меня беспокоит. Почему координаты при обращении к Canvas"у не совпадают с координатами при обращении к DC окна?


nikkie   (2003-04-03 00:20:00) [4]

GetParent(Handle)


Songoku   (2003-04-02 19:26:00) [5]

а ЧТО ЗА прога???


Grrey   (2003-04-02 19:25:00) [6]

Все дошло!
DrawFocusRect(GetWindowDC(GetActiveWindow),RECT(0,0,X,Y));
Спасибо всем!


Songoku   (2003-04-02 19:21:00) [7]

Скинь мне исходник ....


Grrey   (2003-04-02 19:15:00) [8]

Никаких результатов.
Опять не рисуется. Может и правда настрйки не правильные. Хотя, если делать с явным определением Canvas"a, то рисуется правильно!


Songoku   (2003-04-02 18:53:00) [9]

ПО пробуй GetFocus ...


Grrey   (2003-04-02 18:35:00) [10]

Скорее надо использовать GetForegroundWindow, но с ней также ничего не рисуется!


Grrey   (2003-04-02 18:31:00) [11]

Посмотрел по документации, и мне кажется, что эта функция возвращает Handle Рабочего стола. А мне он совсем не нужен.
Конечно я попробовал. Но ничего не рисуется.


Songoku   (2003-04-02 18:05:00) [12]

Так ты что компанет пишешь???

А ты в место Handle по пробуй GetDesktopWindow


Grrey   (2003-04-02 17:58:00) [13]

to Songoku-> Ты здесь напрямую используешь handle окна. Я этого сделать не могу, т.к. при компиляции не извесно какое окно (и вообще окно ли) будет содержать в себе мою компоненту.
Если есть функции для определения Child Control"a, то, наверное, должны быть функции для определения Parent Control"a.


Grrey   (2003-04-02 17:49:00) [14]

Не рисуется скорее потому, что это ActiveX компонента, и проверяю ее я на VB.


Songoku   (2003-04-02 17:48:00) [15]

Я делал это так .... если поможет напиши!!!

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
CheckBox1: TCheckBox;
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
xx,yy,d,index,index2,i:Integer;
Rects:array [0..256] of TRect;
Points:array [0..256] of TRect;
implementation

{$R *.DFM}

procedure DrawLine(DC:HDC;Color,x,y,xc,yc:Integer);
var Pen:HPen;
begin
Pen:=CreatePen(PS_SOLID, 1, Color);
SelectObject(DC,Pen);
MoveToEx(DC, x, y, nil);
LineTo(DC, xc, yc);
DeleteObject(Pen);
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if CheckBox1.Checked=False then begin
if d=23 then begin
Form1.RePaint;
DrawFocusRect(GetDC(Handle),RECT(xx,yy,x,y));
if x<xx then DrawFocusRect(GetDC(Handle),RECT(x,yy,xx,y));
if y<yy then DrawFocusRect(GetDC(Handle),RECT(xx,y,x,yy));
if (y<yy)and(x<xx) then DrawFocusRect(GetDC(Handle),RECT(x,y,xx,yy));
end;end else begin
if d=23 then begin
Form1.RePaint;
DrawLine(GetDC(Handle),0,xx,yy,x,y);
end;
end;
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
d:=23;
xx:=x;
yy:=y;

end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if CheckBox1.Checked=False then begin
if d=23 then begin
Rects[index]:=Rect(xx,yy,x,y);
if x<xx then Rects[i]:=Rect(x,yy,xx,y);
if y<yy then Rects[i]:=Rect(xx,y,x,yy);
if (y<yy)and(x<xx) then Rects[i]:=Rect(x,y,xx,yy);
index:=index+1;
end; end else
begin
Points[index2]:=Rect(xx,yy,x,y);
index2:=index2+1;
end;
d:=0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
For i:=0 to index do
DrawFocusRect(GetDC(Handle),Rects[i]);
For i:=0 to index2 do
DrawLine(GetDC(Handle),0,Points[i].Left,Points[i].Top,Points[i].Right,Points[i].Bottom);
end;

end.


NAlexey   (2003-04-02 17:38:00) [16]

Не рисуется методом TCanvas.DrawFocusRect. скорее из затого, что неправильный цвет Brush или Rect твой непонятно где, или опять же
TCanvas.Brush.Style у тебя bsClear.


NAlexey   (2003-04-02 17:34:00) [17]

ParentControl скорее всего есть Parent для компонента. Owner тот кто владеет и уничтожает. Parent это тот в кого вставлен твой компонент.


Grrey   (2003-04-02 17:26:00) [18]

Неужели никто помочь не сможет?


Grrey   (2003-04-02 13:26:00) [19]

Вместо этих строк можно вставить чего-нибудь вроде:
DrawFocusRect(ParentControl.Handle,rec)
Как получить этот ParentControl?


Grrey   (2003-04-02 13:22:00) [20]

procedure TMovButton.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
inherited MouseMove(Shift,X,Y);
if (IsMouseDown and ((abs(x-x0)>5) or (abs(y-y0)>5))) then
begin
(Owner as TCustomForm).Canvas.DrawFocusRect(rec); //этот код не работает в ActiveX, построенном на этом компоненте.
with rec do begin
left:=Left+x-x0;
top:=Top+y-y0;
right:=right+x-x0;
bottom:=bottom+y-y0;
x0:=x;
y0:=y;
end;
(Owner as TCustomForm).Canvas.DrawFocusRect(rec); //и этот тоже
Moving:=true;
end else
begin
//Select
end;
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо