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

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

Размеры и положение окна в OpenDialog и т.п. [D7, WinXP]


Jenyok ©   (2012-04-09 10:29:00) 

Delphi 7
Вот такой пример, взятый из архива форума.
.

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   OpenDialog1: TOpenDialog;

   procedure OpenDialog1Show(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
   FDlgHandle : THandle;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function Mover(var H: THandle): LongInt; stdcall;
begin
 repeat
   if H <> 0 then
   begin
     MoveWindow(H, 1, 1, 500, 500, true);
     ExitThread(0);
   end;
  sleep(1);
 until false;
end;

procedure TForm1.OpenDialog1Show(Sender: TObject);
begin
 FDlgHandle:=GetParent((Sender as TOpenDialog).Handle);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 ID: LongInt;
begin
 FDlgHandle:=0;
 CreateThread(nil, 0, @Mover, @FDlgHandle, 0, ID);
 OpenDialog1.Execute;
end;

end.

.
Выдает следующую ошибку при трансляции.
[Error] Unit1.pas(52): Types of actual and formal var parameters must be identical
.
Перечитал много раз Help по функции CreateThread, попробовал разные параметры поменять, ничего не помогает.
.
У кого какие соображения есть на этот счет ?


Jenyok   (2012-04-09 19:10:00) [1]

Вот еще пример...
.
unit Unit2;

interface

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

const
 WMCDP = WM_User + 301;

type
 TForm1 = class(TForm)
   Button1: TButton;
   OpenDialog1: TOpenDialog;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   procedure CDP(var Msg: TMessage); message WMCDP;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 PostMessage(handle, WMCDP, 0, 0);
 OPenDialog1.Execute;
end;

procedure TForm1.CDP(var Msg: TMessage);
var
 r: TRect;
begin
 GetWindowRect(GetParent(OpenDialog1.Handle), r);

 SetWindowPos(GetParent(OpenDialog1.Handle), HWND_TOP,
              Form1.Left + (Form1.Width - (r.Right - r.Left)) div 2,
              Form1.Top + (Form1.Height - (r.Bottom - r.Top)) div 2, 0, 0,
              SWP_NOZORDER + SWP_NOACTIVATE);
end;

end.


Jenyok   (2012-04-09 12:34:00) [2]

Спасибо большое...


Anatoly Podgoretsky   (2012-04-09 12:04:00) [3]

SetWindowPos


begin...end   (2012-04-09 11:55:00) [4]

> Jenyok   (09.04.12 11:03) [2]
> А Вы бы как сделали ?

Возможно, попробовал бы поменять оконную процедуру диалога. Пример:
http://forum.sources.ru/index.php?showtopic=341847
Только в Вашем случае флаг SWP_NOSIZE в SetWindowPos не нужен.


Jenyok   (2012-04-09 11:06:00) [5]

begin...end ©
.
Что необходимо.
1. Изменить положение окна TOpenDialog и т.п.
2. Изменить размеры окна TOpenDialog и т.п.


Jenyok   (2012-04-09 11:03:00) [6]

begin...end ©
.
Спасибо за подсказку.
.
А Вы бы как сделали ?
Что в коде не так то или плохо ?


begin...end   (2012-04-09 10:54:00) [7]

> ID: LongInt
ID: Cardinal

В целом же код оставляет тягостное впечатление.


Наверх

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