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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2011, 10:49   #1
Рик
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 29
По умолчанию Управлять свойствами контролов, созданных Run Time

Здравствуйте. Программно создается массив StaticText'ов
Код:
private
    { Private declarations }
    procedure onMouseUpStaticx(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
//...........................................................................
var
  Form1: TForm1;
   CurDispatch: IDispatch; {save the interface globally }
   MyButtons:array of array of TStaticText;
   timeLim: integer; // time limit of test
   qCount:integer;   // amount of questions
   testName:string;  // test's file name
   testFile:file;    // test file

   ansArr:array of integer;
//.....................................................
//.....................................................
procedure TForm1.btnSetQuestionsClick(Sender: TObject);
 var i, j,x: byte;
 n,k: integer;
 count:String;
begin
count:=inputbox('Test','Enter amount of questions','1');
try
n := StrToInt(count);
qCount:=n;
except
on EConvertError do ShowMessage('Someting is wrong');
end;
setlength(Mybuttons,n,4);
setlength(ansArr,n);
k:=0;
 for i:=0 to n-1 do
  for j:=0 to 3 do begin
   inc(k);
   MyButtons[i,j]:=TStaticText.Create(Panel1);
   MyButtons[i,j].Parent := self;
   MyButtons[i,j].Top:= ((i+1)*25)+33;//((i+1)-1)*Arr3[i,j].Height+50;
   MyButtons[i,j].Left:=((j+1)*20)+830;//((j+1)-1)*Arr3[i,j].Width+800;
   MyButtons[i,j].BorderStyle :=sbsSunken;
   MyButtons[i,j].AutoSize :=false;
   MyButtons[i,j].Alignment := taCenter;
   MyButtons[i,j].Width:=20;
   MyButtons[i,j].Height:=20;
   MyButtons[i,j].Color :=clLime;
   MyButtons[i,j].Tag:=k; 
   MyButtons[i,j].Caption :=IntToStr (k);
   MyButtons[i,j].Font.Size:=10;
   MyButtons[i,j].Name := 'Btn'+intToStr(k);
   TStaticText(MyButtons[i,j]).onMouseUp:=onMouseUpStaticx; {new components event}
end;
 for i:=0 to n-1 do
   for j:=0 to 0  do begin
    MyButtons[i,j].Caption :='a';
end;
for i:=0 to n-1 do
   for j:=1 to 1  do begin
    MyButtons[i,j].Caption :='b';
end;
for i:=0 to n-1 do
   for j:=2 to 2  do begin
    MyButtons[i,j].Caption :='c';
end;
for i:=0 to n-1 do
   for j:=3 to 3  do begin
    MyButtons[i,j].Caption :='d';
end;
end;
//.....................................................
procedure TForm1.onMouseUpStaticx(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
// вот здесь все это должно происходить
end;
//..................................................................
А теперь вопрос: как мне управлять свойством Enabled StaticText'oв, чтобы при выборе одной из ячеек недоступными становились все ячейки в этом ряду( строке) Вернее как это реализовать?
Заранее благодарен

Последний раз редактировалось Рик; 31.03.2011 в 10:55.
Рик вне форума Ответить с цитированием
Старый 31.03.2011, 10:55   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

Цитата:
как мне управлять свойством Enabled StaticText'oв
Цитата:
MyButtons:array of array of TStaticText;
MyButtons[1,2].enabled:=false;
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 31.03.2011, 11:06   #3
Рик
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 29
По умолчанию

и на том спасибо, а поконкретнее можно? То есть как я понимаю:
Код:
//.....................................................
procedure TForm1.onMouseUpStaticx(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var i,j,: integer;
begin
// вот здесь все это должно происходить
for i:=i to i do
  for j:=  to 3 do begin do
     MyButtons[i,j].Enable:=False;
end;
но что-то не пашет(
Рик вне форума Ответить с цитированием
Старый 31.03.2011, 11:18   #4
asmodey1
Подтвердите свой е-майл
 
Регистрация: 19.12.2010
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Рик Посмотреть сообщение
но что-то не пашет(
Бред надобно убрать !
Код:
for i:=i to i do
asmodey1 вне форума Ответить с цитированием
Старый 31.03.2011, 11:29   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

вот так будет разумно...
Код:
MyButtons[i,j].onMouseUp:= onMouseUpStaticx;
...
procedure TForm1.onMouseUpStaticx(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 with (sender as TStaticText) do
   font.color:= font.color xor $8;
  //enabled:= not enabled
end;
на кой управлять свойством enabled для статического текста, если потом нельзя будет получить к нему доступ по нажатиям мыши, т.е. один раз сработает. К тому же, совсем не вижу смысла в управлении доступностью сразу всеми statictext при нажатии на один из них.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 31.03.2011 в 11:31.
raxp вне форума Ответить с цитированием
Старый 31.03.2011, 11:32   #6
Рик
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
вот так будет разумно...
Код:
MyButtons[i,j].onMouseUp:= onMouseUpStaticx;
...
procedure TForm1.onMouseUpStaticx(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
 with (sendes as TStaticText) do
   font.color:= font.color xor $8;
  //enabled:= not enabled
end;
на кой управлять свойством enabled для статического текста, если потом нельзя будет получить к нему доступ по нажатиям мыши, т.е. один раз сработает.
Они играют роль ячеек вариантов ответов:
a b c d
a b c d
Рик вне форума Ответить с цитированием
Старый 31.03.2011, 11:35   #7
Рик
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Рик Посмотреть сообщение
Они играют роль ячеек вариантов ответов:
a b c d
a b c d
К тому доступность их будет определятся в зависимости от того какая кнопка мыши нажата, если левая, то не доступна, если правая от доступна

If button = mbLeft then
//...............................
if button =mbright then
//............................
Рик вне форума Ответить с цитированием
Старый 31.03.2011, 14:56   #8
Рик
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от Рик Посмотреть сообщение
К тому доступность их будет определятся в зависимости от того какая кнопка мыши нажата, если левая, то не доступна, если правая от доступна

If button = mbLeft then
//...............................
if button =mbright then
//............................
При клике на одной из ячеек должны блокироваться остальные ее "сородичи" из этого ряда. Вот как это реализовано в VB
Вложения
Тип файла: rar TestBed.rar (12.2 Кб, 8 просмотров)
Рик вне форума Ответить с цитированием
Старый 31.03.2011, 16:35   #9
Рик
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 29
По умолчанию

Цитата:
Сообщение от asmodey1 Посмотреть сообщение
Бред надобно убрать !
Код:
for i:=i to i do
опечатка, однако
я делал так:

Код:
for i:= 0 to qCount-1 do:
Рик вне форума Ответить с цитированием
Старый 31.03.2011, 18:01   #10
Рик
Пользователь
 
Регистрация: 07.02.2011
Сообщений: 29
По умолчанию

Тему можно закрывать.
Вместо MyButtons[i,j].Tag:=k; пишем MyButtons[i,j].Tag:=i;
Рик вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка событий компонент, созданных в Run-Time Рик Компоненты Delphi 1 29.03.2011 14:50
Создание TImage в Run-time mrbadge Помощь студентам 9 03.02.2011 22:48
Run-time error 13 olimpus Microsoft Office Excel 11 25.12.2010 22:49
Создание компонентов Run Time Serebah Общие вопросы Delphi 13 08.12.2010 22:02
Заполнение cxLookupComboBox в run time fake2 БД в Delphi 0 17.05.2010 08:31