Суть в двух словах - на listItem/TreeItem в рантайме налепляет TPanel с TButton'ами внутри, до нажатия на любой из Button. Функционал под Button к примеру Show/Hide
1. После нажатия кнопка делается как будто прозрачной
2. Т.к. нажатие кнопки меняет состояние Item то при следующем показе кнопка должна показывать другой текст, тем не менее но отображается старый
3. Эффекты 1 и 2 сохраняются даже при смене Item и пропадают только если Item находится в другом родителе (из ListBox в TreeView)
4. Нужный текст меняется непосредственно при нажатии
Далее код метода. Вызывается например так SetOptions(lbWorks.ListItems[0],['Delete','Hide']);
Например нажимаю Hide, при следующем показе это будет
SetOptions(lbWorks.ListItems[0],['Delete','Show']) - вот здесь фиг! Пока я не поменяю lbWorks на какой-нить tvSomeTree здесь вечно будет показывать Hide (и наоборот)
Во всех режимах iOS такая ерунда, под win32 ок.
procedure TSwiperOptions.SetOptions(AObject: TObject; options: array of string);
var
i: integer;
oldW : Single;
btn : TActionBtn;
par : TfmxObject;
begin
if not Assigned(Parent) then
exit;
{workaround for button repaint}
Par := Parent;
Parent := nil;
Parent := Par;
//FButtons.Clear;
{ for i := ControlsCount-1 downto 0 do
begin
comp := Controls[i];
Self.Controls.Remove(comp);
comp.Free;
end; }
FContextObject := AObject;
for i := FButtons.Count to Length(options)-1 do
begin
btn := TActionBtn.Create(Self);
FButtons.Add(btn);
btn.Parent := self;
btn.HitTest := True;
btn.Align := TAlignLayout.Right;
btn.VertTextAlign := TTextAlign.Center;
btn.OnClick := OnButtonClick;
btn.ControlType := TControlType.Platform;
btn.CanFocus := False;
btn.StyledSettings := [];
end;
for i := Length(options) to FButtons.Count-1 do
FButtons[i].Visible := false;
for i := 0 to Length(options)-1 do
begin
btn := FButtons[i];
btn.Visible := True;
btn.StaysPressed := false;
btn.Text := options[i];
btn.Width := Self.Width / Length(options);
end;
oldW := Width;
Width := 0;
CanFocus := True;
SetFocus;
Visible := True;
FMX.Ani.TAnimator.AnimateFloat(Self,'Width',oldW,0.5);
end;
Если бы я знал какие-то программные пляски, то наверно я бы забил, но я даже их пока не нашел чтобы избавиться от эффекта
Вопрос
golomeen
Сделал компонент типа тулбарчика
Суть в двух словах - на listItem/TreeItem в рантайме налепляет TPanel с TButton'ами внутри, до нажатия на любой из Button. Функционал под Button к примеру Show/Hide
1. После нажатия кнопка делается как будто прозрачной
2. Т.к. нажатие кнопки меняет состояние Item то при следующем показе кнопка должна показывать другой текст, тем не менее но отображается старый
3. Эффекты 1 и 2 сохраняются даже при смене Item и пропадают только если Item находится в другом родителе (из ListBox в TreeView)
4. Нужный текст меняется непосредственно при нажатии
Далее код метода. Вызывается например так SetOptions(lbWorks.ListItems[0],['Delete','Hide']);
Например нажимаю Hide, при следующем показе это будет
SetOptions(lbWorks.ListItems[0],['Delete','Show']) - вот здесь фиг! Пока я не поменяю lbWorks на какой-нить tvSomeTree здесь вечно будет показывать Hide (и наоборот)
Во всех режимах iOS такая ерунда, под win32 ок.
Если бы я знал какие-то программные пляски, то наверно я бы забил, но я даже их пока не нашел чтобы избавиться от эффекта
Изменено пользователем golomeenСсылка на комментарий
0 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.