![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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;Последний раз редактировалось 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. И Вы опять неправы: Цитата:
Последний раз редактировалось dr. F.I.N., 04.05.2018 в 14:52. |