Перейти к содержанию
Fire Monkey от А до Я

Kikoma

Пользователи
  • Постов

    31
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Весь контент Kikoma

  1. Примерно таким образом воспользовался тут, но это не рационально и слишком трудоемко.
  2. Здравствуйте. Стоит задача: Кастомизированный TListBoxItem содержит TText.Price, TSpinBox.SBCount, TText.Sum. т.е. есть цена, изменяем кол-во получаем сумму и все это в TListBoxItem. Вешаем обработчик на TSpinBox.SBCountChange, но встает вопрос, каким образом узнать в каком TListBoxItem произошло событие? procedure TForm2.SBCountChange(Sender: TObject); var Item: TListBoxItem; SB: TSpinBox; s1, s2: string; begin SB := Sender as TSpinBox; // Получили Sender из TSpinBox if Assigned(SB) and (SB is TSpinBox) then begin Item := ?????? //Узнаем из какого итема была вызван эта процедура s1 := StringReplace(Item.StylesData['TextPrice'].ToString,'.',',',[rfReplaceAll, rfIgnoreCase]); //Тут обертка точку на запятую меняю s2 := StringReplace(Item.StylesData['SBCount.Text'].ToString,'.',',',[rfReplaceAll, rfIgnoreCase]); Item.StylesData['TextSum.Text'] := IntToStr(Round(StrToFloat(s1) * StrToInt(s2))); end; end;
  3. :D Я не то что прикинул, я на своем довольно шустром Galaxy Note 2 заметил торможение при прокрутке. Была мысль через tag сделать, но решил что это както примитивно и есть способ лучше. Но видимо через tag пока само лучше.
  4. После многих эксперементов вопрос решен следующим кодом: procedure TForm2.SBCountChange(Sender: TObject); var Item: TListBoxItem; SB: TSpinBox; s1, s2: string; begin SB := Sender as TSpinBox; // Получили Sender из TSpinBox if Assigned(SB) and (SB is TSpinBox) then begin Item := (((((SB.Parent).Parent).Parent).Parent).Parent) as TListBoxItem; //Соответствует структуре стиля s1 := StringReplace(Item.StylesData['TextPrice'].ToString,'.',',',[rfReplaceAll, rfIgnoreCase]); //Тут обертка точку на запятую меняю s2 := StringReplace(Item.StylesData['SBCount.Text'].ToString,'.',',',[rfReplaceAll, rfIgnoreCase]); Item.StylesData['TextSum.Text'] := IntToStr(Round(StrToFloat(s1) * StrToInt(s2))); end; end; По поводу (((((SB.Parent).Parent).Parent).Parent).Parent) as TListBoxItem; у меня структура Стиля несколько вложенных TRectangle для автоматического выравнивания, поэтому пришлось из каждого идти выше аж 5 раз. Не претендую на идеальное решение, но работает отлично Кстати, в стиле при использовании TPanel вместо TRectangle StyleData['StyleName'] не работало. Поменяв TPanel на TRectangle все стало работать. Коментарии приветствуются. Вопрос решен
  5. 1. Обработчик заработал, спасибо. единственной загадкой остался синтаксис '<TNotifyEvent>' из ListBoxItem1.StylesData['spinbox.OnChange'] := TValue.From<TNotifyEvent>(SBCountChange); 2. Как определить Item, из которого был вызван обработчик? Как в самом Item добраться до объектов заданными по стилю - я понял, а сам Item как определить? procedure TForm2.SBCountChange(Sender: TObject); var Item: TListBoxItem; begin Item:= ???????????; //Определяем Item, в котором есть SpinBox, который в свою очередь вызвал эту обработку //Получив Item делаем с ним что захотим, в том числе и обращаемся к объектам под StyleData ShowMessage('Item.tag='+IntToStr(Item.tag)); end;
  6. Здравствуйте, подскажите направление решения следующей проблемы: Есть стилизовнный ListBoxItem, содержащий два поля: TText: [styleName = 'TextPrice' и 'TextSum'] TSpinBox: [styleName = 'Count'] Каким образом: Можно повесить обработчик на SpinBox.OnChange, чтобы рассчитывать Sum? И как обратиться к значению SpinBox.Text? Код обработчика события изменения SpinBox: procedure TFormMain.SBCountChange(Sender: TObject); // Какой вызов и где его назначить? var Item: TListBoxItem; begin Item:= ??? //Определение того итема, в котором был изменен TListBox [Name=StyleName='SBCount'] Item.StylesData['TextSum'] := StrToInt( Item.StylesData['TextPrice'] ) * StrToInt( ??? SBCount.Text ); end Подскажите, пожалуйста, а то только туманные решения
×
×
  • Создать...