Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перемещение динамически созданной формы, не за заголовок!!! 
:(
    Опции темы
asad
Дата 16.2.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.12.2008

Репутация: нет
Всего: нет



У меня такая проблема: нужно перемещать форму не за заголовок, потому что его нету.
Я создаю динамически форму, с Image и Label. BorderStyle у этой формы должен быть bsNone. В общем как это сделать мне понятно, когда форма создаётся не динамически. А вот когда динамически я не пойму, что куда и как писать =( 
Помогите пожалуйста!!!!
PM MAIL   Вверх
THandle
Дата 16.2.2009, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



asad, А чем отличается динамическое создание формы от нединамического в данном случае? Ведь все события и обработчики остаются те же. Сделай такой обработчик OnMouseDown в design-time:
Код


procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
  begin
    ReleaseCapture;
    Perform(WM_SYSCOMMAND, $F012, 0);
  end;
end;


А форму с ним создавай как хочется. smile
PM   Вверх
Poseidon
Дата 17.2.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Можно отлавливать WM_NCHITTEST и "говорить" системе что вся форма это и есть заголовок.

Код
private
  procedure WMNCHITTEST(var Msg: TMessage); message WM_NCHITTEST;

{...}

procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_STYLE,
                             GETWINDOWLONG(Handle, GWL_STYLE) and (not WS_CAPTION));
  Height := ClientHeight;
end;

procedure TForm1.WMNCHITTEST(var Msg: TMessage);
begin
  inherited;
  Msg.Result := HTCAPTION;
end;


Если на форме нет кнопок и др. компонентов от TWinControl, то работать будет как надо smile


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
bems
Дата 17.2.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 18
Всего: 88



THandle, А без черной магии никак? Вариант Poseidon имхо лучше


--------------------
Обижено школьников: 8
PM MAIL   Вверх
asad
Дата 17.2.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.12.2008

Репутация: нет
Всего: нет



Всё дело в том , что на форме1(главная форма), я нажимаю на кнопку, открывается форма2. там я опять нажимаю на кнопку и на форме1, появляется формаN.  И таких формN может быть неограниченное количество.  Из-за этого я не пойму куда прописать эту процедуру.
Код

private
  procedure WMNCHITTEST(var Msg: TMessage); message WM_NCHITTEST;
{...}
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_STYLE,
                             GETWINDOWLONG(Handle, GWL_STYLE) and (not WS_CAPTION));
  Height := ClientHeight;
end;
procedure TForm1.WMNCHITTEST(var Msg: TMessage);
begin
  inherited;
  Msg.Result := HTCAPTION;
end;



PM MAIL   Вверх
Poseidon
Дата 18.2.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 9
Всего: 133



Цитата(asad @  17.2.2009,  21:11 Найти цитируемый пост)
и на форме1, появляется формаN
Форма появляется на форме? Что-то ты перечитал видимо.

Цитата(asad @  17.2.2009,  21:11 Найти цитируемый пост)
.  Из-за этого я не пойму куда прописать эту процедуру.
Прописываешь это для той формы, которую и хочешь "тягать".



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
asad
Дата 18.2.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.12.2008

Репутация: нет
Всего: нет



Я создаю массив форм. Их то я и хочу двигать. 
Покажите пожалуйста, что куда вписать. А то я недогоняю=((
Код

unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    Panel1: TPanel;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    Image1: TImage;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    UpDown1: TUpDown;
    Label3: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    MaskEdit1: TMaskEdit;

    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  NewImage: Array of TImage;
  NewLabel: Array of TLabel;
  NewForm: Array of TForm;
  n,i, w:integer;
implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
  n:=Random(0)+1;
SetLength(NewForm,n);
SetLength(Newimage,n);
SetLength(Newlabel,n);
for i:=0 to n-1 do

   begin
   NewForm[i]:=TForm.Create(Self);
   NewForm[i].Show;
   NewForm[i].SetBounds(300,300,80,110);
   newform[i].parent:=Form1;
   newform[i].BorderStyle:=bsnone;
   newform[i].Color:=clwhite;

       newimage[i]:=TImage.Create(self);
       newimage[i].Parent:=newform[i];
       Newimage[i].Left:=10;
       Newimage[i].Top:=10;
       newimage[i].Height:=100;
       newimage[i].Width:=100;
       newimage[i].Picture.LoadFromFile('computer.bmp');

           newlabel[i]:=tlabel.Create(self);
           newlabel[i].parent:=newform[i];
           newlabel[i].Left:=30;
           newlabel[i].Top:=0;
           newlabel[i].Caption:=edit1.Text;



end;
   close;
end;
procedure TForm2.BitBtn2Click(Sender: TObject);
begin
 close;
end;

end.

PM MAIL   Вверх
THandle
Дата 18.2.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 50
Всего: 372



asad, Создай новую форму (Пусть её класс будет TMYNewForm), через File->New->Form.
Кинь на нее Image, Label, что там еще у тебя в массивах лежит и создается для каждой формы. Сделай у этой формы  обработку какую дал Poseidon(ну или местный черный маг), а потом массив уже делай не TForm'ов, а TMYNewForm'ов:

Код

  NewForm: Array of TMyNewForm;


И создавай их в цикле как это делаешь. Только уже не надо будет создавать компоненты - они уже лежат на форме.
PM   Вверх
asad
Дата 19.2.2009, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 3.12.2008

Репутация: нет
Всего: нет



Цитата(THandle @ 18.2.2009,  15:50)
asad, Создай новую форму (Пусть её класс будет TMYNewForm), через File->New->Form.
Кинь на нее Image, Label, что там еще у тебя в массивах лежит и создается для каждой формы. Сделай у этой формы  обработку какую дал Poseidon(ну или местный черный маг), а потом массив уже делай не TForm'ов, а TMYNewForm'ов:

Код

  NewForm: Array of TMyNewForm;


И создавай их в цикле как это делаешь. Только уже не надо будет создавать компоненты - они уже лежат на форме.

Не получается smile  =((( Дельфи постоянно ругается. Объясните пожалуйста по подробнее, как поменять класс...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0853 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.