Прикол с TColor [Решено]

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

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

Прикол с TColor [Решено]

Сообщение leo_bsv » 02.01.2012 01:42:18

Создаю форму, кидаю кнопку, в обработчике пишу:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var  x: TColor;
begin
  Button1.Color:=x;
end;

нажимаю на кнопку - цвет меняется... :?:
почему?
как сделать чтобы не менялся?
предопределить?
каким образом если это свойство типа?
Последний раз редактировалось leo_bsv 02.01.2012 12:06:55, всего редактировалось 1 раз.
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Прикол с TColor

Сообщение Little_Roo » 02.01.2012 02:17:14

leo_bsv писал(а):как сделать чтобы не менялся?

Задать начальное значение глобально?
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

Re: Прикол с TColor

Сообщение leo_bsv » 02.01.2012 02:21:15

Little_Roo писал(а):Задать начальное значение глобально?

хотя-бы... обычно при определении переменной типа она имеет какое-то начальное значение... -1 например или nil... тут же какая-то фигня... ( создаёшь переменную типа TColor и каждый раз разное начальное значение чтоли? Т.е. не nil не что-то другое а именно значение? Разное? :shock: а мне нужно вот отследить изменялась ли переменная - как это сделать с переменной этого типа :?:
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Прикол с TColor

Сообщение Kitayets » 02.01.2012 09:01:08

ну есть функции по извлечению из TColor значения компонент RGB и наоборот присваиванию TColor цвета закодированному в компонентах RGB.
Если хочешь, чтобы цвет не менялся, то сделай так:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
const
   R= <значение от 0 до 255>; G= <значение от 0 до 255>; B= <значение от 0 до 255>;
var  x: TColor;
begin
  x:= RGBToColor(R, G, B);
  Button1.Color:=x;
end;


ну и собственно если нужно отследить изменения в цвете, запоминай компоненты и сравнивай их извлекая текущие значения из TColor с помощью функций function Blue(rgb: TColor): BYTE; function Green(rgb: TColor): BYTE; function Red(rgb: TColor): BYTE;

короче вот ссылка: http://wiki.lazarus.freepascal.org/Colors
Kitayets
постоялец
 
Сообщения: 171
Зарегистрирован: 05.05.2010 21:15:24

Re: Прикол с TColor

Сообщение Mr.Smart » 02.01.2012 11:04:05

leo_bsv в FPC локальные переменные не инициализируются. Если нужно - указываем конкретное значение:
Код: Выделить всё
var  x: TColor = 0;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Прикол с TColor

Сообщение leo_bsv » 02.01.2012 11:52:27

Mr.Smart писал(а):leo_bsv в FPC локальные переменные не инициализируются. Если нужно - указываем конкретное значение:

Код:
var x: TColor = 0;


я в курсе, как указать конкретное значение если код не такой как выше а такой:
Код: Выделить всё
type
  MyType=record
    x:TColor;
    ...
  end;   
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Прикол с TColor

Сообщение Brainenjii » 02.01.2012 12:00:02

MyType.x := Button1.Color в начале тела метода?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Прикол с TColor

Сообщение leo_bsv » 02.01.2012 12:05:39

ок.... помогло принудительное присвоение 0 нужному свойству типа TColor перед заполнением переменной типа, т.е. значение установлено в ноль перед предполагаемыми изменениями, т.о. если не изменилось, то остаётся 0.
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Прикол с TColor

Сообщение Mr.Smart » 02.01.2012 12:06:40

Код: Выделить всё
type
  MyType=record
    x:TColor;
    y: Integer;
    ...
  end;   

var
  R: MyType = (x: 0; y: -1; ...);

Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Прикол с TColor [Решено]

Сообщение leo_bsv » 02.01.2012 12:12:30

Mr.Smart писал(а):Mr.Smart » 02.01.2012 12:06:40

тип используется для описания свойства класса, у типа 18 свойств различных типов... использовать предложенный вами способ не представляется возможным :) но всё-равно спасибо что напомнили :)
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола

Re: Прикол с TColor [Решено]

Сообщение sign » 02.01.2012 12:47:23

Поставьте инициируемые свойства в начале:
Код: Выделить всё
type pp1 = record
       F1, F2, F3, F4, F5, F6: Integer;
     end;

var pp2: pp1 = (F1: 2; F2: 1);       
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Прикол с TColor [Решено]

Сообщение Mr.Smart » 02.01.2012 12:52:26

leo_bsv писал(а):у типа 18 свойств различных типов... использовать предложенный вами способ не представляется возможным

Как вариант:
Код: Выделить всё
FillByte(r,SizeOf(MyType),0);
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Прикол с TColor [Решено]

Сообщение leo_bsv » 02.01.2012 12:54:55

sign писал(а):Поставьте инициируемые свойства в начале:

Супер! Спасибо! То что надо!

Добавлено спустя 1 минуту 41 секунду:
Mr.Smart писал(а):Как вариант:

да... тоже вариант :)
Аватара пользователя
leo_bsv
постоялец
 
Сообщения: 276
Зарегистрирован: 04.08.2010 16:26:10
Откуда: Йошкар-Ола


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru