Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2012, 17:30   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно примерно так
Код:
//Счетчики, в Private главной формы
 xLeft,xTop: Integer;
...
//Начальные значения, в OnCreate главной формы
  xLeft:=0; xTop:=0;
...
//процедура создания формы
  Form:=TForm.Create(Self);
  Form.Height:=220;
  Form.Width:=200;
  Form.Position:=poDesigned;
  Inc(xLeft,20);
  if xLeft+Form.Width>Screen.Width then begin
    xLeft:=0;
    Inc(xTop,20);
  end;
  Form.Top:=xTop;
  Form.Left:=xLeft;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2012, 17:57   #12
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Аватар, здорово, спасибо! только первая форма начинает создаваться не левого верхнего угла рабочего стола. Для этого надо написать так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
 xLeft:=Screen.Left;
 xTop:=Screen.Top;
end;
?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.06.2012, 18:52   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно просто начальное значение ; xLeft:=-20;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2012, 19:15   #14
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Да, Аватар, логично . Спасибо . Вот такой теперь вопрос (тоже относится к этой теме). Создал я еще панельку на форме:
Код:
//создаю панельку
   Panel:=TsPanel.Create(Form);
   Panel.Align:=alTop;
   Panel.Height:=25;
   Panel.SkinData.CustomColor:=True;
   Panel.BevelOuter:=bvNone;
   Panel.Color:=StringToColor(Form1.pFIBQuery2.FieldByName('COLOR').AsString);
   Panel.Parent:=Form;

//создаю кнопочку
   Buttonchik:=TsButton.Create(Form);
   Buttonchik.Align:=alRight;
   Buttonchik.Images:=Form1.sAlphaImageList1;
   Buttonchik.ImageIndex:=17;
   Buttonchik.Font.Style:=[fsBold];
   Buttonchik.ShowHint:=True;
   Buttonchik.Hint:='Закрыть';
   Buttonchik.Reflected:=True;
   Buttonchik.Width:=23;
   Buttonchik.SkinData.SkinSection:='TOOLBUTTON';
   Buttonchik.Parent:=Panel;
//   Buttonchik.OnClick(Action.Free);
мне нужно для всех созданных кнопок прописать одно событие - закрытие формы, на которой находится эта кнопка.
Либо, если вышенаписанное нельзя сделать, то другой вопрос: как назначить событие программно стандартному крестику закрытия, который создается на форме? Мне нужно в него добавить, чтобы программа уведомляла пользователя, что он хочет закрыть форму.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.06.2012, 19:42   #15
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
...
  private
    procedure ChildrenFormClose(Sender: TObject; var Action: TCloseAction);
...

procedure TForm1.ChildrenFormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;

procedure TForm1.ButtonClick(Sender: TObject);
var Form: TForm;
begin
  Form:=TForm.Create(Self);
  ...
  Form.OnClose:=ChildrenFormClose;
  ...
end;
Примерно в этом же направлении для любых других обработчиков событий динамически создаваемых объектов
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2012, 20:27   #16
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Чего-то я не догнал. У меня же кнопка создается тоже динамически и я не смогу открыть во время работы программы и написать туда код. Или я не понял?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.06.2012, 20:34   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А чего ButtonClick пугаться. Это просто процедура главной формы, в которой создаются твои динамические формы. Убери если не нравится, в другом месте создавай Не в этом же главный момент, а в Form.OnClose:=ChildrenFormClose;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2012, 20:53   #18
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Вроде и понял и не понял наполовину. Смотри:
Код:
...
  private
    procedure ChildrenFormClose(Sender: TObject; var Action: TCloseAction);
...

procedure TForm1.ChildrenFormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action:=caFree;
end;

procedure TForm1.sSpeedButton14Click(Sender: TObject);
var
 Form: TForm;
 Buttonchik: TsSpeedButton;
begin
 fFormName:=0;
//создаю форму динамически
   Form:=TForm.Create(Self);
   Form.BorderIcons:=[biSystemMenu];
   Form.Caption:=' ';
   Form.Height:=220;
   Form.Width:=200;
   Form.Position:=poDesigned;
   Inc(xLeft,205);
   if xLeft + Form.Width > Screen.Width then
   begin
     xLeft:=0;
     Inc(xTop,50);
   end;
   Form.Top:=xTop;
   Form.Left:=xLeft;
   Inc(fFormName);
   Form.Name:='Form' + IntToStr(fFormName);
   Form.Caption:='№' + IntToStr(fFormName);
   Form.Icon.Empty;
   Form.BorderStyle:=bsNone;
   CreateParams(Params);
   Form.Color:=clRed;

//создаю кнопку
   Buttonchik:=TsSpeedButton.Create(Form);
   Buttonchik.Name:='sSpeedButton' + IntToStr(fFormName);
   Buttonchik.Align:=alRight;
   Buttonchik.Images:=Form1.sAlphaImageList1;
   Buttonchik.ImageIndex:=17;
   Buttonchik.Font.Style:=[fsBold];
   Buttonchik.ShowHint:=True;
   Buttonchik.Hint:='Закрыть заметку';
   Buttonchik.SkinData.CustomColor:=True;
   Buttonchik.SkinData.SkinSection:='TOOLBUTTON';
   Buttonchik.Width:=23;
   Buttonchik.Parent:=Panel;
//   Buttonchik.OnClick:=ChildrenFormClose; <<-- так надо написать??

end;
так???
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 05.06.2012, 21:23   #19
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не, я пример без буттона привел, а что бы динамическая форма просто крестом закрывалась. Так проще. Можно и с буттоном, но для него добавить свой обработчик событий, в котором метод Close формы вызывать. И все равно для динамической формы OnClose из моего примера нужен будет, caFree как-то нужно форме передать.

CreateParams зачем явно вызывать? Форма сама к нему обратится
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.06.2012, 05:19   #20
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Тогда вопрос:
1. Ладно, вот я назначил один обработчик закрытия для всех созданных форм. Тогда как мне получить имя формы, которую я хочу закрыть?
Мне надо в дальнейшей менять цвет у выбранной формы, а для этого мне надо знать имя этой формы.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очистка сразу нескольких StringGrid Artamos Компоненты Delphi 7 13.05.2011 13:58
Установка нескольких атрибутов сразу Shouldercannon Общие вопросы Delphi 7 01.05.2011 22:49
обращение к именам компонентов в цикле JK0 Помощь студентам 7 23.09.2010 14:10
заполнение сразу нескольких однотипных значений Domanoff БД в Delphi 2 22.04.2010 13:37
Создание сразу нескольких txt файлов Nice42ru Помощь студентам 11 11.02.2010 18:35