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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> создание приложение в режиме Run-Time, Ошибка... 
V
    Опции темы
2211
Дата 25.10.2009, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Создал приложение в режиме Run-Time. Разместил на форме несколько СheckBox'ов, одну кнопку и Edit. Нужно чтобы Кэпшены выбранных чекбоксов отображались в Эдите по нажанию кнопки.

Код

procedure TManager.MakeForm(form:TForm);
var i:integer;
    MyCheckBox: TCheckBox;
    MyButton: TButton;
    MyEdit: TEdit;
begin
  form.Caption := 'RunTime';
  form.Width := 300;
  form.Height:=300;

  MyButton:= Tbutton.Create(form);
  MyButton.Top:= 112;
  MyButton.Left:=40;
  MyButton.Visible:=True;
  MyButton.Caption:='Generate';
  MyButton.Name:='Button3';
  MyButton.OnClick:= MyButtonClick;
  form.InsertControl(MyButton);

  MyEdit:=TEdit.Create(form);
  MyEdit.Top:=192;
  MyEdit.Left:=8;
  MyEdit.Visible:=True;
  MyEdit.Text:=' ';
  MyEdit.Name:='Edit2';
  form.InsertControl(MyEdit);
  MyEdit.Color:=StringToColor(colorList[0]);
  MyEdit.Font.Color:=clBlue;


  for i:=0 to self.number-1 do
  begin
    MyCheckBox := TCheckBox.Create(form);
    MyCheckBox.Top := (i+1)*20;
    MyCheckBox.Left := 20;
    MyCheckBox.Visible := true;
    MyCheckBox.Caption := captionList[i];
    MyCheckBox.Name :='CheckBox'+ IntToStr(i);
    MyCheckBox.OnMouseDown := MyCheckBoxMouseDown;
    form.InsertControl(MyCheckBox);
  end;
end;

procedure TManager.MyButtonClick(Sender:TObject);
var
MyEdit: TEdit;
begin
MyEdit.Text:=MyEdit.Text+str;
end;


procedure TManager.MyCheckBoxMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
    MyCheckBox:TCheckBox;
    List: String;
begin
  List:=MyCheckBox.caption;
  str := str+ ' ' + List;
end;


Но Кэпшены ЧекБоксов записываются в Кэпшен кнопки, а не в MyEdit.text

Помогите пожалуйста.
PM MAIL   Вверх
2211
Дата 25.10.2009, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



если лень листать код, то вот две функции в которых вся соль:

Код

procedure TManager.MyButtonClick(Sender:TObject);
var
MyEdit: TEdit;
begin
MyEdit.Text:=MyEdit.Text+str;
end;

procedure TManager.MyCheckBoxMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
    MyCheckBox:TCheckBox;
    List: String;
begin
  List:=MyCheckBox.caption;
  str := str+ ' ' + List;
end;



PM MAIL   Вверх
NightmareZ
Дата 25.10.2009, 21:06 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


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

Репутация: -1
Всего: 13




Модератор: Сообщение скрыто.



--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
Данкинг
Дата 25.10.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



2211, а MyEdit глобально объявить не нужно ли? smile 
(это предположение)


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
2211
  Дата 25.10.2009, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если нужно, то как это будет выглядеть?
Попробовал объявить глобально, кнопка перестала вообще реагировать.

Да и зачем? ЧекБоксы же не объявлены глобально. И создание идет в режиме ран-тайм с считыванием некоторых параметров из ини-файла.

  
Код

MyEdit:=TEdit.Create(form);
  MyEdit.Top:=192;
  MyEdit.Left:=8;
  MyEdit.Visible:=True;
  MyEdit.Text:=' ';
  MyEdit.Name:='Edit2';
  form.InsertControl(MyEdit);
  MyEdit.Color:=StringToColor(colorList[0]);
  MyEdit.Font.Color:=clBlue;

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


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



Меня смущает просто, что MyEdit: TEdit; объявлены локально, т.е. для каждой процедуры эта переменная своя.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
2211
Дата 25.10.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



 Спасибо. Да. Действительно. Вся проблема была именно в локальном объявлении. Ступил. Спасибо, Данкинг. 
PM MAIL   Вверх
Данкинг
Дата 25.10.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

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



На здоровье. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Beltar
Дата 25.10.2009, 23:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

procedure TManager.MyButtonClick(Sender:TObject);
var
MyEdit: TEdit;
begin
MyEdit.Text:=MyEdit.Text+str;
end;


И что должно это вообще давать? В лучшем случае AV, в худшем в MyEdit мусор на какой-то доступный участок памяти. И с чек-боксами то же самое. Как вообще можно объявлять локальную переменную класса не инициализируя ее?


--------------------
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. smile(с) я, хотя может и нет
Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере.
PM MAIL   Вверх
1000000dollars
Дата 26.10.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



2211,  
Цитата(2211 @  25.10.2009,  20:38 Найти цитируемый пост)
Создал приложение в режиме Run-Time. Разместил на форме несколько СheckBox'ов, одну кнопку и Edit. Нужно чтобы Кэпшены выбранных чекбоксов отображались в Эдите по нажанию кнопки.


Код

procedure TForm1.Button1Click(Sender: TObject);
VAR
 I : integer;
 CB : TCheckBox;

begin
 Edit1.Clear;
 for i :=0 to Form1.ComponentCount-1 do
  begin
   if ( Components[i] is TCheckBox)
    then begin
          cb := (Components[i] as TCheckBox);
          if Cb.Checked
           then Edit1.Text := Edit1.Text + cb.Caption;
         end;
  end;
end;


Так?
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.1401 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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