Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.08.05;
Скачать: CL | DM;

Вниз

Привязка переменной к объекту.   Найти похожие ветки 

 
Скарамуш ©   (2007-07-08 11:42) [0]

Уважаемые мастера! Прошу Вас помочь мне в одной небольшой, но очень даже неразрешимой для меня проблеме.
Требуется одной и той же переменной (скажем I) придавать различные значения в зависимости от того, на какую картинку (Image) кликаем, причём сохранять изменения в привязке к картинке.
Пример: Скажем, для  Image1, значение I=10, по Image2 - значение I=20, при определённом процессе (скажем, нажатии на кнопку), значение для I в привязке к Image1 должно стать 5 и сохраниться таким для последующих операций, т.е. при щелчке по Image1 I должна становиться уже не 10, а 5.
При этом нужно учитывать, что Имэйджек может быть очень много и заводить для каждой отдельную переменную, для сохранения значения I очень проблематично.
Заранее благодарю Вас за участие.


 
Virgo_Style ©   (2007-07-08 12:06) [1]

TImage.Tag ?


 
Скарамуш ©   (2007-07-10 01:13) [2]

Да, хорошо бы, но если переменных надо много? И не только числовых?
А их надо много.
Всё же спасибо. Но нельзя ли как-нибудь ещё?


 
Германн ©   (2007-07-10 01:34) [3]


> Скарамуш ©   (10.07.07 01:13) [2]
>
> Да, хорошо бы, но если переменных надо много? И не только
> числовых?
> А их надо много.
>

Указатель по размеру ничем не отличается от Integer. Поэтому в Tag можно сохранять указатель на некую структуру содержащую сколько угодно данных.


 
Джо ©   (2007-07-10 03:36) [4]

> [0] Скарамуш ©   (08.07.07 11:42)
> При этом нужно учитывать, что Имэйджек может быть очень
> много и заводить для каждой отдельную переменную, для сохранения
> значения I очень проблематично.
> Заранее благодарю Вас за участие.

Никто не мешает завести массив, индекс в котором будет соответствовать номерам экземпляров TImage.
Также никто не мешает (а даже советовали в этой ветке) использовать свойство Tag у самого компонента TImage.


 
{RASkov} ©   (2007-07-10 09:06) [5]

Примеры к [3,4]:
Можно такую вот "штуку" создать
Type TImageData = record
     Name: String;    //Например название картинки
     Value: Integer;  //ее значение
    end;
    TImageDatas = array [0..<Кол-во Имагесов>] of TImageData

И В свойстве Tag Имэйджа хранить индекс массива.... можно хранить и указатель на структуру PImageData = ^TImageData (сложнее)...
Или так:
Type TImageData = record
     Image: TImage;  //Сама картинка
     Name: String;   //название картинки
     Value: Integer; //значение
    end;
    TImageDatas = array [0..<Кол-во Имагесов>] of TImageData;

Т.е. и сами имиджи хранить в массиве.....
Например картинок (TImage) 10 штук.
type  TImData = record
  ImName: String;
  ImVal: Integer;
 end;
const ImData: array [0..9] of TImData = ((ImName: "First"; ImVal:2), (ImName:"Вторая"; ImVal:15),....);
var Ims: TImageDatas;
...........
Setlength(Ims, 10);
for N:=0 to 9 do begin
Ims[N].Image:=TImage.Create(self)
with Ims[N].Image do begin
 Задаем параметры Имэйджам (Picture, left, Top, Width,...)
end;
Ims[N].Name:=ImData[N].ImName;
Ims[N].Value=ImData[N].ImVal;
end;

Ну и в этом духе.... Можно еще кучу способов придумать...


 
tesseract ©   (2007-07-10 10:24) [6]


> Также никто не мешает (а даже советовали в этой ветке) использовать
> свойство Tag у самого компонента TImage.


Также никто не мешает относледовать TCustomImage  и добавить в потомок всё, что приспичит.


 
Скарамуш ©   (2007-07-10 11:49) [7]

Эх... Спасибо огромное, но так я видимо плохо объяснил, что мне нужно, что никто не понял...
Меня интересует именно привязка переменной к объекту или другой переменной, а картинки - это частный случай, который используется у меня, как одно из звеньев цепочки.
Прошу простить великодушно, что излагаю так плохо, просто всегда с этим делом туго было...
Так вот - нельзя ли сделать так, чтобы получилось вроде а от b? Ну, в матанализе помню было же что-то вроде того a(b)? Правда, надо признаться, я всегда плохл посещал матанализ...
А вот ещё можно примерчик подробный насчёт

> Type TImageData = record
>      Name: String;    //Например название картинки
>      Value: Integer;  //ее значение
>     end;
>     TImageDatas = array [0..<Кол-во Имагесов>] of TImageData

Ибо не зря я вопрос задал в конференции "Начинающим", вроде вот что-то типа того, а не догоняю, как потом использовать?... Не серчайте...


 
iXT ©   (2007-07-10 11:57) [8]

> [7] Скарамуш ©   (10.07.07 11:49)

Тебе предложили указатель хранить в свойстве Tag

Можешь создать свой класс унаследованный от TImage (или чего там надо) и включить в него новое свойство!


 
ЮЮ ©   (2007-07-10 12:12) [9]

> При этом нужно учитывать, что Имэйджек может быть очень
> много и заводить для каждой отдельную переменную, для сохранения
> значения I очень проблематично.

Для этого есть массивы/списки:
 1) два массива/списка одной длины и "связка" по индексу
 2) двумерный массив, "связанные" эдементы в одной строке
3)
type
 TRef = record
   First: <тип>;
   Second: <тип>;
 end;
"связанные" объекты хранятся в одном record-е
множество связей в массиве  
 TRefDynArray = array of TRef;
или создавать динамически и помещать в список


 
Плохиш ©   (2007-07-10 12:15) [10]


> Привязка переменной к объекту. [D7, XP]
>
> Скарамуш ©   (08.07.07 11:42)

Ненадо привязывать переменные к объекту, надо создать свой объект, который хранит всё что ему надо в себе...


 
{RASkov} ©   (2007-07-10 12:47) [11]

> [7] Скарамуш ©   (10.07.07 11:49)
> А вот ещё можно примерчик подробный насчёт
>
> > Type TImageData = record
> >      Name: String;    //Например название картинки
> >      Value: Integer;  //ее значение
> >     end;
> >     TImageDatas = array [0..<Кол-во Имагесов>] of TImageData

Ты лучше не этот пример смотри, а
> Или так:
> Type TImageData = record
>     Image: TImage;  //Сама картинка
>     Name: String;   //название картинки
>     Value: Integer; //значение
>    end;
>    TImageDatas = array [0..<Кол-во Имагесов>] of TImageData;
>
> Т.е. и сами имиджи хранить в массиве.....

И что ты имеешь ввиду:

> А вот ещё можно примерчик подробный насчёт

В [5] все вроде подробно.... Или тебе про массивы рассказать или про записи или вообще все?
Что конкретно не понятно? Так же уже посоветовали свои классы создавать со своими полями(переменными, данными)....


 
Скарамуш ©   (2007-07-10 12:52) [12]

Да, да, я уже понял, что дурак я и всё такое... Но просто рабочий пример с использованием Ваших предложений можно? Чтобы я посмотрел и разобрал от а до я, а то ведь непонятно так, снизойдите пожалуйста.
Я уже понял, что надо с type-ом работать, а как потом использовать это дело? Я подобным образом никогда не делал и мне просто так не допереть...
Всем ОГРОМНОЕ спасибо!


 
Плохиш ©   (2007-07-10 12:55) [13]

Не, я пасс, книжку "делфи за 21 секунду для чайников" сюда перепечатывать...


 
{RASkov} ©   (2007-07-10 12:57) [14]

> [12] Скарамуш ©   (10.07.07 12:52)

Ты прикалываешься? :)
Все что ниже
> > Или так:
в [5] посте это и есть подробный пример :)

Замени в [0..<Кол-во Имагесов>] выражение <Кол-во Имагесов> на 9 и используй :) ну еще параметры имиджей выставь или это тоже сложно для тебя и требует объяснения? Тогда книжки.... F1 тоже весчь...)


 
Скарамуш ©   (2007-07-10 13:04) [15]

Да нет, Это я всё сделал, я просто пример просил... Чтобы мозги не грузить.
Ладно, не сердитесь, постараюсь сам разобраться. Ещё раз всем спасибо.


 
{RASkov} ©   (2007-07-10 13:15) [16]

> [15] Скарамуш ©   (10.07.07 13:04)
> Ладно, не сердитесь

А что нам сердиться? Лично мне до лампочки :)

> постараюсь сам разобраться

проблемы? У тебя одна проблема - не можешь спросить, что у тебя конкретно не получается....


 
Скарамуш ©   (2007-07-10 15:03) [17]

Так оно и не получается! Ладно, вот уж точнее не скажешь - у нас есть 48 картинок. Все разные.
При щелчке на картинку Im1, мы заносим её в отдельную переменную Hds:TImage; следует щелчёк по другой картинке Im2, она придаётся переменной Hdm:TImage.
Далее следует процедура Prov, проверяющая значение искомой I относительно Hds  и Hdm (это упрощённо, там много чего проверяет, но суть одна и алгоритм общий). Если у Hdm значение I выше, то из I(Hds) вычитаем I(Hdm) (а также ещё ШЕСТЬ значений, поэтому Tag и не годится, к сожалению...).
Вот. Далее, при щелчке на Im1 когда-нибудь в следующий раз, значение I(и остальных параметров) должно быть тем, которое мы получили в результате процедуры Prov.
Вот и всё собственно, яснее некуда.
Может чего неграмотно написал, прошу прощения.
Надеюсь, теперь ясно.


 
Плохиш ©   (2007-07-10 15:17) [18]


> Надеюсь, теперь ясно.

Ничего не понял, ну и ладно, не мои проблемы...


 
{RASkov} ©   (2007-07-10 19:20) [19]

> [18] Плохиш ©   (10.07.07 15:17)

:) такая же фигня...

> [17] Скарамуш ©   (10.07.07 15:03)

:(

hds=5 номера картинок...
hdm=7 из массива
Из [5] поста:
if Ims[hdm].Val>Ims[hds] then Ims[hds].Val:=Ims[hds].Val-Ims[hdm].Val;
Добавлю немного в пример из [5]:
в описании формы добавить метод:
 private
   procedure ImClick(Sender: TObject); Обработчик для имиджей
....

.........
//Создание имиджей и наполнение данных массива
 for N:=0 to 47 do begin
   Ims[N].Image := TImage.Create(self)
   with Ims[N].Image do begin
    Задаем параметры Имэйджам (Picture, left, Top, Width,...)
    Tag := N; // Здесь будет храниться индекс картинки и данных в массиве....
    OnClick := ImClick;  //Присваеваем обработчик
   end;
.....
 end;
.......

procedure ImClick(Sender: TImages);
begin
//  (Sender as TComponent).Tag <-Здесь индекс из массива
end;

Этот вариант, помоему, самый простой для тебя, нежели создавать новые классы(компоненты) или работа с указателями...
Все.... больше отвечать тебе не буду :) Если нормально не будешь спрашивать.... [17] - я не осилил в плане "нормального" понимания :(


 
Скарамуш ©   (2007-07-10 19:31) [20]

Спасибо, получилось всё. Уррраа!!!А, кстати. Самое-то главное, что я всё хотел сказать - IMAGE-ы уже есть, их Creat-ить не нужно было. Вот.
Всем спасибо. В следующий раз постараюсь чётче выражать свои мысли.



Страницы: 1 вся ветка

Текущий архив: 2007.08.05;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.021 c
2-1184076465
Knob
2007-07-10 18:07
2007.08.05
Выгрузка данных из таблицы Excel


2-1184055061
AZIZE
2007-07-10 12:11
2007.08.05
поддержка длииных имён файлов


2-1183357698
Washington
2007-07-02 10:28
2007.08.05
Удаление таблицы Access


1-1180103569
DevilDevil
2007-05-25 18:32
2007.08.05
TTabControl VS Manifest


15-1184064242
de.
2007-07-10 14:44
2007.08.05
ValueListEditor