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

Aleks133

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

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

  • Посещение

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

  1. Aleks133

    Связи LiveBindings

    Подскажите возможно ли переключаться между списками связей. У меня есть ListView в котором 5 Text Item'ов и есть БД в которой в двое больше столбцов. Вопрос:Как сделать так чтобы в Runtime можно было(например по выбору checkbox) менять связи т.е если галочка стоит то этим 5-и Text Item была присвоена одна половина столбцов БД а если галочка снята то другая половина БД Можно было бы на listview подобавлять еще кучу item'ов а потом скрывать ненужные и показывать нужные,но не хочу увеличивать высоту строчки listview.Если только не накладывать TTextObjectAppearance один на другой.
  2. Долго я искал как это сделать в DynamicAppearance. procedure TForm1.Button2Click(Sender: TObject); var i: integer; begin Memo1.Lines.Clear; for i := 0 to ListView1.ItemCount - 1 do begin if ListView1.Items.Objects.FindObjectT<TListItemAccessory>('Accessory2') .Visible = true then begin Memo1.Lines.Add('Индекс отмеченного итема= ' + inttostr(i) + ',Значение = ' + ListView1.Items.Objects.FindObjectT<TListItemText>('Text3').Text ); end; end; end;
  3. procedure TForm1.ListView1UpdateObjects(const Sender: TObject; const AItem: TListViewItem); var i: integer; begin for i := 0 to ListView1.ItemCount - 1 do begin if ContainsText(ListView1.Items.Objects.FindObjectT<TListItemText> ('Text4').Text, '-') = true then begin ListView1.Items.Objects.FindObjectT<TListItemText>('Text4').TextColor := TAlphacolors.Red; ListView1.Items.Objects.FindObjectT<TListItemText>('Text4').TextAlign := TTextAlign.Trailing; end else begin ListView1.Items.Objects.FindObjectT<TListItemText>('Text4').TextColor := TAlphacolors.Green; ListView1.Items.Objects.FindObjectT<TListItemText>('Text4').TextAlign := TTextAlign.Leading; end; if ListView1.Items.Objects.FindObjectT<TListItemText>('Text3').Text = 'бензин' then begin ListView1.Items.Objects.FindObjectT<TListItemText>('Text3').TextColor := TAlphacolors.Blueviolet; end; end; end; А после FDQuery1.activ:=False; FDQuery1.activ:=True; Получается что последняя запись не соответствует условию. Не пойму почему.
  4. Вот так работает, но теперь почему-то другие записи стали белыми if (TOpenColumn(Column).Index = 1) then if (StringGrid1.Cells[1, Row] = 'работа') then // условие 1 Canvas.Fill.Color := TAlphaColors.Blueviolet // задаем цвет текста else if (StringGrid1.Cells[1, Row] = 'бензин') then // условие 2 Canvas.Fill.Color := TAlphaColors.Blue // задаем цвет текста else Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей if (TOpenColumn(Column).Index = 2) then if (StringGrid1.Cells[2, Row] = '-850') then // условие 1 Canvas.Fill.Color := TAlphaColors.Red // задаем цвет текста else if (StringGrid1.Cells[2, Row] = '3000') then // условие 2 Canvas.Fill.Color := TAlphaColors.Green // задаем цвет текста else Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей
  5. Вы гений!))Спасибо!Весь день экспериментирую . А можно ли теперь сделать тоже самое для суммы чтобы цвет другой поставить, а то цвет распространяется на всю строку а мне нужно только на определенный столбец? Условие есть for i := 1 to length(ansilowercase(Grid.Cells[1, Row])) do // если столбец 2 и строка 1 if (TOpenColumn(Column).Index = 1) and (Row = 1) and // и если символ + найден на позиции i (pos('+', ansilowercase(Grid.Cells[1, Row])) = i) then но куда его подставить не пойму, попробую конечно поэкспериментировать по такому же принципу как и Вы показали, но мне кажется будет мешать тот факт что цвет меняется для всей строки а не для определенного столбца.
  6. Подскажите пожалуйста как выполнить выравнивание(для каждой ячейке свое) для того примера что показал Ярослав в своем примере? Чтобы красные записи были справа, а зеленые слева. И еще вопрос: Как задать цвет текста в другом столбце для каждой ячейки свой?Дублировать код или можно более компактно сделать? Правильно ли я понял что для каждой ячейки нужно создавать отдельный TLayout? Чтобы в итоге получить вот это. Ну и еще один вопрос: Можно ли для компактности как-то вывести код отрисовки в отдельную процедуру а потом вызывать ее в событии? Что-то вроде такого implementation procedure smena_cveta(TStringrid,TAlphaColors); ... а потом ее вызвать в событии procedure TForm1.Grid2DrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); begin procedure smena_cveta(stringgrid1.cells[1,Row], Red); end; Еще пытаюсь делать по другому методу // задаем параметры текста f := TFont.Create; f.Family := StringGrid1.TextSettings.Font.Family; f.Size := StringGrid1.TextSettings.Font.Size; f.Style := StringGrid1.TextSettings.Font.Style; // [TFontStyle.fsBold]; Canvas.Font.Assign(f); // присваиваем канве параметры текста(как в гриде) if (StringGrid1.Cells[1, Row] = 'работа') then // условие 1 Canvas.Fill.Color := TAlphaColors.Blueviolet // задаем цвет текста else Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей if (StringGrid1.Cells[1, Row] = 'бензин') then // условие 2 Canvas.Fill.Color := TAlphaColors.Blue // задаем цвет текста else Canvas.Fill.Color := TAlphaColors.Black; // цвет для всех других записей Canvas.FillText(Bounds, Value.AsString, False, 50, [], StringGrid1.TextSettings.HorzAlign, ttextalign.Center); // отрисовка текста по левому краю как в гриде f.Free; Но в итоге закрашивается только текст "бензин"т.к он второе условие и перекрывает первое. Я так понимаю нужна еще одна канва для второго условия?Но как ее внедрить в код? Заранее премного благодарен.
  7. Я это уже читал.Но я хотел именно в корень внутренней памяти свою папку(как например yandex карты делают). В этой http://delphifmandroid.blogspot.com/2014/02/blog-post_16.html статье, в комментариях Павел Алхимов пишет как он это делает, но я не пойму как этим воспользоваться.
  8. Всем добрый день. Как в сделать развертывание файлов(например ini или картинки) по адресу: /storage/emulated/0/MyFolder/123.ini или 123.jpg (т.е. корень внутренней памяти/моя папка/мой файл) пробовал в deployment указать такой путь, но файл не появился. и как мне потом с ним работать?какой путь к нему указывать? например так image1.Bitmap.LoadFromFile(system.iOUtils.TPath.Combine (system.iOUtils.TPath.??????????,'MyFolder/123.jpg')); Или как-то иначе? Может нужно вообще как-то по другому все это делать? Заранее благодарен.
×
×
  • Создать...