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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2015, 06:57   #1
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию Создание форм

Дан код:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Forms, StdCtrls, Classes;

type
  tClick = class
    procedure Button0Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ButtonClick(Sender: TObject);
  end;

var
  Form1,Form2:tForm;
  cl:tClick;
  aLeft:integer=0;

procedure FormCreate;
begin
   Form2:=tForm.Create(Application);
   Form2.Caption:='show';
   Form2.Left:=aLeft;
   aLeft:=aLeft+350;
   With tButton.Create(Form2) do
   begin
      Parent:=Form2;
      Caption:='Click';
      OnClick:=cl.ButtonClick;
   end;
   With tLabel.Create(Form2) do
   begin
      Parent:=Form2;
      Caption:='random';
      Name:='Labels';
      Top:=30;
   end;
   Form2.Show;
end;

{ tClick }

procedure tClick.Button0Click(Sender: TObject);
var i:byte;
begin
   For i:=0 to 2 do
      FormCreate;
end;

procedure tClick.Button1Click(Sender: TObject);
begin
   tLabel(Form2.FindComponent('Labels')).Caption:=IntToStr(Random(100));
end;

procedure tClick.Button2Click(Sender: TObject);
begin
   tLabel(Form2.FindComponent('Labels')).Caption:=IntToStr(Random(100));
end;

procedure tClick.Button3Click(Sender: TObject);
begin
   tLabel(Form2.FindComponent('Labels')).Caption:=IntToStr(Random(100));
end;

procedure tClick.ButtonClick(Sender: TObject);
var f:tComponent;
begin
   f:=(Sender as tButton).Owner;
   tLabel((f as tForm).FindComponent('Labels')).Caption:=IntToStr(Random(100));
end;

begin
   Form1:=tForm.Create(Application);
   Form1.Caption:='main';
   Form1.Left:=300;
   Form1.Top:=300;
   With tButton.Create(Form1) do
   begin
      Parent:=Form1;
      Caption:='Create';
      OnClick:=cl.Button0Click;
   end;
   With tButton.Create(Form1) do
   begin
      Parent:=Form1;
      Caption:='Click 1';
      Top:=30;
      OnClick:=cl.Button1Click;
   end;
   With tButton.Create(Form1) do
   begin
      Parent:=Form1;
      Caption:='Click 2';
      Top:=60;
      OnClick:=cl.Button2Click;
   end;
   With tButton.Create(Form1) do
   begin
      Parent:=Form1;
      Caption:='Click 3';
      Top:=90;
      OnClick:=cl.Button3Click;
   end;
   Form1.ShowModal;
end.
При нажатии кнопок на формах "show" меняются Label. При нажатии кнопок "Click 1", "Click 2", "Click 3" на форме "main" меняется Label только 3-го окна "show".

Как сделать, чтобы принажатии кнопки "Click 1" изменялся Label в 1-м окне, при нажатии кнопки "Click 2" изменялся Label во 2-м окне?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 20.03.2015, 07:06   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Код:
procedure tClick.Button1Click(Sender: TObject);
begin
   tLabel(Form2.FindComponent('Labels')).Caption:=IntToStr(Random(100));
end;

procedure tClick.Button2Click(Sender: TObject);
begin
   tLabel(Form2.FindComponent('Labels')).Caption:=IntToStr(Random(100));
end;

procedure tClick.Button3Click(Sender: TObject);
begin
   tLabel(Form2.FindComponent('Labels')).Caption:=IntToStr(Random(100));
end;
При нажатии кнопок на формах "show" меняются Label. При нажатии кнопок "Click 1", "Click 2", "Click 3" на форме "main" меняется Label только 3-го окна "show".

Как сделать, чтобы принажатии кнопки "Click 1" изменялся Label в 1-м окне, при нажатии кнопки "Click 2" изменялся Label во 2-м окне?
Вам не кажется, что все 3 кнопки работают с одной и той же формой?
Streletz вне форума Ответить с цитированием
Старый 20.03.2015, 07:54   #3
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Кажется. Но как получить доступ с главной формы "main" к первой или ко второй форме?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 20.03.2015, 08:27   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Кажется. Но как получить доступ с главной формы "main" к первой или ко второй форме?
Нужно каким-либо образом однозначно идентифицировать каждую форму.
Как вариант. Создать массив из TForm и работать с элементами этого массива.
Streletz вне форума Ответить с цитированием
Старый 20.03.2015, 08:31   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
как получить доступ с главной формы "main" к первой или ко второй форме?
В Uses пропиши модули форм, и используй из них переменные этих форм.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.03.2015, 11:26   #6
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Выражение Form: array of tForm мне не желательно использовать!
Тогда другой вопрос: через Handle возможно получить доступ?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 20.03.2015, 11:56   #7
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Тогда другой вопрос: через Handle возможно получить доступ?
Если Вам проще иметь дело с Win API...
Опять же, скорее всего, будет массив, но уже не из TForm, а из Handle. Только, если при работе с TForm можно легко выполнять любые манипуляции с окнами своей программы средствами этого класса, то при "доступе через Handle" всё это придётся делать с помощью функций WinAPI со всеми вытекающими.
В прочем, Вам виднее...

Последний раз редактировалось Streletz; 20.03.2015 в 12:09.
Streletz вне форума Ответить с цитированием
Старый 20.03.2015, 12:01   #8
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

В принципе понятно. Спасибо!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 20.03.2015, 13:51   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
через Handle возможно получить доступ?
Есть Screen.Forms - это массив форм приложения.
Только я чет перестал терь понимать зачем это понадобилось
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.03.2015, 13:56   #10
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Ладно, попробую и этот вариант!
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание дочерных форм Vladya Общие вопросы Delphi 1 11.08.2014 15:43
БД Создание запроса и форм Lena_ Помощь студентам 0 18.10.2012 14:39
Создание форм Михаил Юрьевич Общие вопросы Delphi 5 16.07.2012 03:41
Создание нескольких форм Лера123 Общие вопросы Delphi 4 16.10.2010 18:16
Создание форм DeNyS=) Microsoft Office Access 2 13.12.2009 15:30