Перейти к содержанию
  • Регистрация

Aleks133

Пользователи
  • Публикаций

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

  • Посещение

Информация о Aleks133

  • Звание
    Пользователь

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Уже замучался, помогите. Вот так создаю окошко в котором поле ввода тескста и кнопка. procedure TForm1.Label2Click(Sender: TObject); var brect: TRectangle; edt: TEdit; btn: TButton; lb: TLabel; begin brect := TRectangle.Create(Form1); brect.Parent := Form1; brect.Width := 200; brect.Height := 200; brect.Fill.Color := TAlphacolors.Red; brect.Align := TAlignLayout.Center; brect.Name := 'showrect'; lb := TLabel.Create(brect); lb.Parent := brect; lb.Align := TAlignLayout.Top; lb.Name := 'showlb'; lb.Text := 'Введите коментарий'; lb.TextSettings.Font.Size := 20; edt := TEdit.Create(brect); edt.Parent := brect; edt.Align := TAlignLayout.Center; edt.Width := brect.Width; edt.Name := 'showedt'; btn := TButton.Create(brect); btn.Parent := brect; btn.Width := 50; btn.Height := 30; btn.Align := TAlignLayout.Bottom; btn.Text := 'OK'; btn.Name := 'showbtn'; btn.OnClick := ok; end; Вот так присваиваю результат ввода и удаляю объекты. procedure TForm1.ok(Sender: TObject); begin Label2.Text := ((Form1.FindComponent('showrect') as TRectangle) .FindComponent('showedt') as TEdit).Text; (Form1.FindComponent('showrect') as TRectangle).DestroyComponents;\\удаляю сначала компоненты на showrect (Form1.FindComponent('showrect') as TRectangle).Parent := NIL; \\потом удаляю сам showrect (Form1.FindComponent('showrect') as TRectangle).Release; end; Все вроде нормально, но после того как нажимаю на кнопку(showbtn) форма не закрывается(на крестик ) и даже не могу переместить окно формы пока я не кликну на любой компонент на этой форме кроме самой формы(edit, кнопка и т.п). А если сделать все тоже самое только через таймер,т.е таймер будет убивать компоненты, то все работает как надо. Может причина была в том что кнопка поторая убивала компоненты , не должна была убивать и саму себя?
  2. Aleks133

    Связи LiveBindings

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