![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
![]() Здравствуйте, уважаемые форумчане!
Помогите, пожалуйста, с такой проблемой. Не работает следующий код (Начал разбираться с работой массивов): Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, ComCtrls; type TForm1 = class(TForm) PNR_work: TPageControl; TabSheet1: TTabSheet; TabSheet2: TTabSheet; Label1: TLabel; ComboBox1: TComboBox; RichEdit1: TRichEdit; RichEdit2: TRichEdit; RichEdit3: TRichEdit; RichEdit4: TRichEdit; RichEdit5: TRichEdit; RichEdit6: TRichEdit; RichEdit7: TRichEdit; RichEdit8: TRichEdit; RichEdit9: TRichEdit; RichEdit10: TRichEdit; RichEdit11: TRichEdit; RichEdit12: TRichEdit; RichEdit13: TRichEdit; RichEdit14: TRichEdit; RichEdit15: TRichEdit; RichEdit16: TRichEdit; Label2: TLabel; procedure FormCreate(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; RichEdit: array[1..16] of TRichEdit; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); var i : byte; begin for i:=1 to High(RichEdit) do begin RichEdit[i] := TRichEdit.Create(Self); // <имя массива>[i]:=<имя класса>.Create(Self); RichEdit[i].Parent := Self; // <имя массива>[i].Parent:=Self; //за объект ответит форма, на которой он создан // Эти две строки создают компонент, далее произвольные действия RichEdit[i].Visible := False; end; end; Необходимо сделать так, чтобы при создании формы все компоненты TRichEdit изменили свойство "Visible" с "True" на "False". Далее, в зависимости от того, что будет выбрано в TComboBox, компоненты TRichEdit будут изменять свойство "Visible" с "False" на "True". На данный момент при создании формы на ней появляются все компоненты TRichEdit сразу. Заранее спасибо за ответ! |
#2
|
||||
|
||||
![]() Код:
procedure TForm1.FormCreate(Sender: TObject); var i: Integer; begin ComboBox1.Items.Clear; ComboBox1.Items.Add('Show all'); ComboBox1.Items.Add('Hide all'); for i := Low(Buttons) to High(Buttons) do begin Buttons[i] := TButton.Create(Self); with Buttons[i] do begin Parent := Self; SetBounds(10 + (i - Low(Buttons)) * 80, 50, 70, 25); Caption := 'Buttons[' + IntToStr(i) + ']'; ComboBox1.Items.AddObject(Caption, Pointer(i)); Show; end; end; ComboBox1.ItemIndex := 0; end; procedure TForm1.ComboBox1Change(Sender: TObject); var i: Integer; begin for i := Low(Buttons) to High(Buttons) do if ComboBox1.ItemIndex in [0, 1] then Buttons[i].Visible := ComboBox1.ItemIndex = 0 else Buttons[i].Visible := Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]) = i; end; Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. Последний раз редактировалось dr. F.I.N., 04.05.2018 в 13:10. |
Этот пользователь сказал Спасибо dr. F.I.N. за это полезное сообщение: | ||
ffpereverzev (04.05.2018)
|
#3
|
||||
|
||||
![]() Спасибо большое за ответ!!!
Цитата:
Появилось несколько вопросов по коду: 1. Код:
for i := Low(Buttons) to High(Buttons) do begin Buttons[i] := TButton.Create(Self); with Buttons[i] do begin Parent := Self; SetBounds(10 + (i - Low(Buttons)) * 80, 50, 70, 25); Caption := 'Buttons[' + IntToStr(i) + ']'; ComboBox1.Items.AddObject(Caption, Pointer(i)); Show; 2. Вот эта конструкция Код:
if ComboBox1.ItemIndex in [0, 1] then Buttons[i].Visible := ComboBox1.ItemIndex = 0 работает только с двумя записями в ComboBox. У меня их, пока что, 16 и будет не совсем удобно перечислять все 16 с условиями отображения. |
#4
|
||||
|
||||
![]() 1. Вы просили помощи - она Вам оказана. RichEdit изменен на Button. Заполнение Combobox и его реакция на изменение показана в коде. Разберитесь с тем как это происходит.
По Вашему коду я сначала подумал, что Вы создаете динамически RichEdit-ы. Код:
for i:=1 to High(RichEdit) do begin RichEdit[i] := TRichEdit.Create(Self); // <имя массива>[i]:=<имя класса>.Create(Self); RichEdit[i].Parent := Self; // <имя массива>[i].Parent:=Self; //за объект ответит форма, на которой он создан // Эти две строки создают компонент, далее произвольные действия RichEdit[i].Visible := False; end; Полагаю Вы не понимаете толком что делаете. Коль нужно просто "засунуть" имеющиеся RichEdit-ы в массив - так и делайте: Код:
RichEdit[1] := RichEdit1; ... RichEdit[16] := RichEdit16; 2. И Вы опять неправы: Цитата:
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. Последний раз редактировалось dr. F.I.N., 04.05.2018 в 14:52. |