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

Aleks133

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

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

  • Посещение

Сообщения, опубликованные Aleks133

  1. Подскажите возможно ли переключаться между списками связей.

    У меня есть ListView в котором 5 Text Item'ов  и есть БД в которой в двое больше столбцов.

    Вопрос:Как сделать так чтобы в Runtime можно было(например по выбору checkbox) менять связи

    т.е если галочка стоит то этим 5-и Text Item была присвоена одна половина столбцов БД

    а если галочка снята то другая половина БД 

    Можно было бы  на listview подобавлять еще кучу item'ов а потом скрывать ненужные и показывать нужные,но не хочу увеличивать высоту строчки listview.Если только не накладывать TTextObjectAppearance один на другой.

    image.png.d68d809ffe8f1a0806f95c46bc14743c.png

  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. image.png.f5ca114935c326dcf1b38745c5daff74.png

    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;

    Получается что последняя запись не соответствует условию. Не пойму почему.

    image.png.411fea7d87a1d26f033036020c9f9d05.png

  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; // цвет для всех других записей

    image.png.97cce51d87d558c3a1b50508f4149804.png

  5. Вы гений!))Спасибо!Весь день экспериментирую . 

    image.png.b9b77a6bd44078dcb8e3d3d1c9545e14.png

    А можно ли теперь сделать тоже самое для суммы чтобы цвет другой поставить, а то цвет распространяется на всю строку а мне нужно только на определенный столбец?

    Условие есть

    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. Подскажите пожалуйста как выполнить выравнивание(для каждой ячейке свое) для того примера что показал Ярослав в своем примере?

     

    Чтобы красные записи были справа, а зеленые слева.

     image.png.031dc815bc2b0157c0d1e1916aec55d0.png 

    И еще вопрос: Как задать цвет текста в другом столбце для каждой ячейки свой?Дублировать код или можно более компактно сделать?

    Правильно ли я понял что для каждой ячейки нужно создавать отдельный TLayout? 

    Чтобы в итоге получить вот это.

    image.png.ae836d12916118c2637db1b56c049939.png

    Ну и еще один вопрос: Можно ли для компактности как-то вывести код отрисовки в отдельную процедуру а потом вызывать ее в событии?

    Что-то вроде такого

    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. 7 часов назад, mazayhin сказал:

    Вот статья, что куда деплоить надо, и как получить доступ к этому

    http://delphifmandroid.blogspot.com/2014/02/deployment-manager.html

    Я это уже читал.Но я хотел именно в корень внутренней памяти свою папку(как например 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'));

    Или как-то иначе?

    Может нужно вообще как-то по другому все это делать?

    Заранее благодарен.

     

×
×
  • Создать...