Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.08.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
Скарамуш ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.052 c
4-1171734916
XMaC
2007-02-17 20:55
2007.08.05
MSGina Wrapper: "I Need Help..."


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


2-1183895720
_user
2007-07-08 15:55
2007.08.05
Изменить пароль на Access


2-1183957164
vogel max
2007-07-09 08:59
2007.08.05
подскажите аналог getclassname, только для получения имени


3-1177424576
alpha5
2007-04-24 18:22
2007.08.05
Как узнать позицию маркера (индикатора) в dxDBGrid ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский