Aleks133
-
Постов
38 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Aleks133
-
-
Долго я искал как это сделать в 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;
-
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;
Получается что последняя запись не соответствует условию. Не пойму почему.
-
Вот так работает, но теперь почему-то другие записи стали белыми
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; // цвет для всех других записей -
Вы гений!))Спасибо!Весь день экспериментирую .
А можно ли теперь сделать тоже самое для суммы чтобы цвет другой поставить, а то цвет распространяется на всю строку а мне нужно только на определенный столбец?
Условие есть
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но куда его подставить не пойму, попробую конечно поэкспериментировать по такому же принципу как и Вы показали, но мне кажется будет мешать тот факт что цвет меняется для всей строки а не для определенного столбца.
-
Подскажите пожалуйста как выполнить выравнивание(для каждой ячейке свое) для того примера что показал Ярослав в своем примере?
Чтобы красные записи были справа, а зеленые слева.
И еще вопрос: Как задать цвет текста в другом столбце для каждой ячейки свой?Дублировать код или можно более компактно сделать?
Правильно ли я понял что для каждой ячейки нужно создавать отдельный 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 часов назад, mazayhin сказал:
Вот статья, что куда деплоить надо, и как получить доступ к этому
http://delphifmandroid.blogspot.com/2014/02/deployment-manager.html
Я это уже читал.Но я хотел именно в корень внутренней памяти свою папку(как например yandex карты делают).
В этой http://delphifmandroid.blogspot.com/2014/02/blog-post_16.html статье, в комментариях Павел Алхимов пишет как он это делает, но я не пойму как этим воспользоваться.
-
Всем добрый день. Как в сделать развертывание файлов(например ini или картинки) по адресу:
/storage/emulated/0/MyFolder/123.ini или 123.jpg (т.е. корень внутренней памяти/моя папка/мой файл)
пробовал в deployment указать такой путь, но файл не появился.
и как мне потом с ним работать?какой путь к нему указывать? например так
image1.Bitmap.LoadFromFile(system.iOUtils.TPath.Combine
(system.iOUtils.TPath.??????????,'MyFolder/123.jpg'));Или как-то иначе?
Может нужно вообще как-то по другому все это делать?
Заранее благодарен.
Связи LiveBindings
в Прочие вопросы
Опубликовано · Изменено пользователем Aleks133
Подскажите возможно ли переключаться между списками связей.
У меня есть ListView в котором 5 Text Item'ов и есть БД в которой в двое больше столбцов.
Вопрос:Как сделать так чтобы в Runtime можно было(например по выбору checkbox) менять связи
т.е если галочка стоит то этим 5-и Text Item была присвоена одна половина столбцов БД
а если галочка снята то другая половина БД
Можно было бы на listview подобавлять еще кучу item'ов а потом скрывать ненужные и показывать нужные,но не хочу увеличивать высоту строчки listview.Если только не накладывать TTextObjectAppearance один на другой.