Обращение к форме unit-a 1 с unit-a 2

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Обращение к форме unit-a 1 с unit-a 2

Сообщение Буржуй » 25.03.2008 11:27:40

Всем салют!

Вопрос собственно в Теме, что и где нужно прописать что бы иметь возможность обращаться (на прямую конечно) к компонентам на форме с другого юнита не имеющего формы. (напрмимер проверить положение CheckBox-a )
А то приходиться засорять юнит с формой промежуточными переменными и делать обращение к ним :(

Поможите кто чем может...
Буржуй
незнакомец
 
Сообщения: 9
Зарегистрирован: 09.03.2008 21:47:57
Откуда: Архангельск

Сообщение Attid » 25.03.2008 12:23:09

что-то я тебя в Теме не видел . . .
=)

uses unit2;

if Form2.checkbox1.checken then
Form2.label1.text := 'novui caption';
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Буржуй » 25.03.2008 13:07:40

На что лазарь пишет
Project raised exception class 'External: SIGSEGV '

Если не трудно можно полный код двух юнитов привести?
Буржуй
незнакомец
 
Сообщения: 9
Зарегистрирован: 09.03.2008 21:47:57
Откуда: Архангельск

Сообщение Padre_Mortius » 25.03.2008 13:39:24

Пример можно увидеть который вызывает ошибку?
Скорее всего ошибка в Вашем коде
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение alexs » 25.03.2008 13:55:10

скорее всего пытаешся обратиться к форме2, а саму форму2 ты ешё не создал - вот и ошибка.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Буржуй » 25.03.2008 16:02:11

Unit1 голый юнит с формой, чек боксом, и лейблом
Unit2
Код: Выделить всё
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Unit1;

implementation
begin
If Form1.CheckBox1.Checked then
Form1.Label1.Caption:='It works' ;

end.

Project
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Interfaces, // this includes the LCL widgetset
  Forms
  { you can add units after this }, Unit1, Unit2;

begin

  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Буржуй
незнакомец
 
Сообщения: 9
Зарегистрирован: 09.03.2008 21:47:57
Откуда: Архангельск

Сообщение Attid » 25.03.2008 16:07:59

Код: Выделить всё
implementation
begin
If Form1.CheckBox1.Checked then
Form1.Label1.Caption:='It works' ;

end.


у тя код вне класа формы два
кнопку брось на вторую форму типа так

Код: Выделить всё
implementation
begin
form2.button1.click()
begin
If Form1.CheckBox1.Checked then
Form1.Label1.Caption:='It works' ;
end;
end.


ну или оншоу используй
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Padre_Mortius » 25.03.2008 16:11:35

А где создание второй формы?
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение v-t-l » 25.03.2008 21:51:18

Код: Выделить всё
implementation
begin
If Form1.CheckBox1.Checked then
Form1.Label1.Caption:='It works' ;

end.

Странно, что это компилируется. А где функция или процедура какая-нибудь? Видно компилятор воспринимает это, как initialization-секцию. Соответственно, выполняется этот код еще до того, как начинает работатать Application.Initialize, CreateForm и т.д.
v-t-l
энтузиаст
 
Сообщения: 735
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Сообщение alexs » 25.03.2008 22:02:11

Это старая нотация - ещё из 5-го турбо-паскаля.
initialization/finalization появились только в 1-й дельфи
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Буржуй » 26.03.2008 09:44:00

Мужики! В вопросе же написано - второй юнит не имеет формы!
Запихивание
Код: Выделить всё
If Form1.CheckBox1.Checked then
Form1.Label1.Caption:='It works'

в процедуру результат не меняет. :(
Буржуй
незнакомец
 
Сообщения: 9
Зарегистрирован: 09.03.2008 21:47:57
Откуда: Архангельск

Сообщение alexs » 26.03.2008 11:09:54

Ещё раз опиши начальные условия - только пожалуста подробно и правильно, чтобы исключить не верное толкование твоего письма. И можно код добавить.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Сообщение Attid » 26.03.2008 12:24:18

тогда вместо биттонклик ставь процедуру и покажи где ты её вызываешь и как обьявляешь.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение Буржуй » 26.03.2008 12:36:54

Извиняюсь за возможно невнятный вопрос. Дело значит такое:
Имеется программа состоящая из двух юнитов. Первый юнит содержит форму (главный) второй юнит форму не содержит (тоесть был создан не как ...New Form а как ...New Unit) по тому как дополнительная форма мне ненужна а код большой, что требует его разноса на несколько юнитов. На форме лежит CheckBox (к приемру)
Вопрос! Что и где нужно прописать что бы иметь возможность обращения к чек боксу из второго юнита, на прямую?
На прямую иметеся в виду без промежуточных переменных (можно создать булевую переменную и в первом юните приравнять её к чек боксу а во втором юните написать

Uses Unit1

и во втором юните уже проверять переменную а не чек бокс, что кстати работает! но появляется лишнаяя переменная и дополнительный код)
Коды юнитов были приведены выше.
Буржуй
незнакомец
 
Сообщения: 9
Зарегистрирован: 09.03.2008 21:47:57
Откуда: Архангельск

Сообщение alexs » 26.03.2008 12:57:37

Если я тебя правильно понял - тебе лучше использовать include-файлы
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

Рейтинг@Mail.ru