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

Morfi

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

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

  • Посещение

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

  1. А чем это обусловлено? Зачем такие ограничения?
  2. Не могли бы аргументировать, почему лучше не использовать OnTap?
  3. Есть прототип: https://github.com/ivanovsergeyminsk/fmx-dockframework Но он только для windows. Думаю, по коду идея будет понятна. Можете допиливать.
  4. А там немного гемор. ) Рекомендую, разобрать код класса TCheckCell (FMX.Grid.Style). как отправную точку.
  5. Для начала реализуем наследника TComboBox (для переопределения методов GetData, SetData): implementation type TComboBoxCell = class(TComboBox) private FOldValue: TValue; FInSetData: boolean; protected constructor Create(AOwner: TComponent); override; function GetData: TValue; override; procedure SetData(const Value: TValue); override; end; { TComboBoxCell } constructor TComboBoxCell.Create(AOwner: TComponent); begin inherited; FInSetData := false; end; function TComboBoxCell.GetData: TValue; begin If ItemIndex = -1 then result := FOldValue else result := Items[ItemIndex]; end; procedure TComboBoxCell.SetData(const Value: TValue); var S: string; LIndex: integer; begin if not FInSetData then try FInSetData := True; FOldValue := Value; if FOldValue.IsEmpty then ItemIndex := -1 else if FOldValue.TryAsType<string>(S) then begin LIndex := Items.IndexOf(Value.ToString); if LIndex >= 0 then ItemIndex := LIndex; end else inherited; finally FInSetData := False; end; end; После чего опишем действие на событие TGrid.OnCreateCustomEditor: procedure TForm.FMXGridCreateCustomEditor(Sender: TObject; const Column: TColumn; var Control: TStyledControl); var tmpCombo: TCombobox; begin //Вызываем кастомный редактор для конкретного столбца if Column.Header.Equals('CategoryName') then begin tmpCombo := TComboBoxCell.Create(nil); tmpCombo.OnChange := DoOnChangeCustomEditor; tmpCombo.TagObject := Column; tmpCombo.Items.Add('Item1'); tmpCombo.Items.Add('Item2'); tmpCombo.Items.Add('Item3'); Control := tmpCombo; end; end; И последнее, опишем событие OnChange нашего редактора: procedure TForm.DoOnChangeCustomEditor(Sender: TObject); var Column: TColumn; begin Column := TColumn(TCombobox(Sender).TagObject); TCombobox(Sender).Data := TCombobox(Sender).Selected.Text; Column.EditorModified; end;
  6. Доброго времени суток. Нашел проблему при написании кастомного грида, который наследуется от TCustomGrid: При использовании LiveBindings между кастомным гридом и набором данных, после закрытия среды вываливается AV: Подскажите, что я упустил? Минимальный код кастомного грида:
  7. Столкнулся с такой проблемой: Есть форма с TComboBox. Стиль форме (один из тех, который поставляется из коробки) задаю в run-time: procedure TFormEditorRoomAttribute.FormCreate(Sender: TObject); begin inherited; self.StyleBook := uAccommodationInventory.ReferenceAccommodationInventoryForm.StyleBook; end; Необходимо, чтобы TComboBox отображал items c bitmap. Заполняю TComboBox.ListBox так же в run-time (TListBoxItem.StyleLookup := 'listboxitemleftdetail'): var I: integer; FListBoxItem: TListBoxItem; begin //cbPicture: TCombobox; Self.cbPicture.BeginUpdate; Self.FRoomAttributePictures := ConnectionModule.DSServerModuleAccommodationClient.GetRoomAttributePictures; for I := 0 to Self.FRoomAttributePictures.Count - 1 do begin FListBoxItem := TListBoxItem.Create(Self.cbPicture); FListBoxItem.TagObject:= Self.FRoomAttributePictures[i]; FListBoxItem.ItemData.Text := Self.FRoomAttributePictures[i].ID.ToString; FListBoxItem.ItemData.Bitmap := Self.FRoomAttributePictures[i].GetBitmap; FListBoxItem.StyleLookup := 'listboxitemleftdetail'; Self.cbPicture.AddObject(FListBoxItem); end; Self.cbPicture.EndUpdate; end; TComboBox.DropDownKind выставляю в "Custom". Вроде как всё готово. Но получается вот такая картина. Создаю и отображаю форму, bitmap в TCombobox отображен: Раскрываю список, bitmaps так же отображаются: Но, как только выбираю один из items, происходит следующее: выбранный item не отображается, вообще! Долго ли, мало ли копался в исходниках TCombobox... В общем нашел некоторое решение данной проблемы. На событие TComboBox.OnClosePopup повесил код: begin //cbPicture: TCombobox; self.cbPicture.Selected.NeedStyleLookup; self.cbPicture.NeedStyleLookup; self.ApplyStyleLookup; end; Результат, выбранный item отображается в TCombobox: Теперь вопрос: Так и должно отрабатывать? Или что-то делаю не так?! Если что-то делаю не так, то как надо делать?
  8. Morfi

    TList<TMyObject>

    Подскажите, пожалуйста, как реализовать серверный метод, который должен выдать TList<TMyObject> ? Имеется в виду, что бы на стороне клиента получилось бы так: var FResult: TList<TMyObject>; begin //... FResult := MyServerMethod; //Серверный метод, который возвращает TList<TMyObject> //... end;
  9. Morfi

    TCombobox и поиск.

    Ребята, как правильно настроить или реализовать поиск в TCombobox (данные которого связаны через livebinding c БД) при помощи TSearchBox?
  10. Здравствуйте! Пытаюсь реализовать алгоритм PBKDF2-SHA1. Для вычисления HMAC-SHA1 использую класс TidHMACSHA1. Код PBKDF2-SHA1 нашел на просторах интернета и немного подкорректировал для использования с INDY (TidHMACSHA1): function PBKDF2Sha1(pass, salt: string; count, kLen: Integer): string; function IntX(i: Integer): string; inline; begin Result := Char(i shr 24) + Char(i shr 16) + Char(i shr 8) + Char(i); end; var D, I, J: Integer; T, F, U, wPass: TIdBytes; begin wPass := ToBytes(pass); D := Ceil(kLen / (160 div 8)); for i := 1 to D do begin F := EncryptHMACSha1(ToBytes(salt + IntX(i)), wPass); U := F; for j := 2 to count do begin U := EncryptHMACSha1(U, wPass); //<-- Проблема F := XorBlock(F, U); end; T := T + F; end; Result := ToHex(Copy(T, 1, kLen)); end; Для вычисления HMAC-SHA1 используется функция EncryptHMACSha1: function EncryptHMACSha1(Input, AKey: TIdBytes): TIdBytes; var HMachSha1: TIdHMACSHA1; begin HMachSha1 := TIdHMACSHA1.Create; try HMachSha1.Key := AKey; Result := HMachSha1.HashValue(Input); finally HMachSha1.Free; end; end; Возникает проблема, когда эта функция используется 6-й раз в функции PBKDF2Sha1: for i := 1 to D do // D := 2 begin F := EncryptHMACSha1(ToBytes(salt + IntX(i)), wPass); // Использование функции (разы): 1-й, 4-й U := F; for j := 2 to count do // count := 3 begin U := EncryptHMACSha1(U, wPass); // <--Проблема! Использование функции (разы): 2-й, 3-й, 5-й, !6-й! F := XorBlock(F, U); end; T := T + F; end; Возникает исключение в глубинах INDY-кода: а точнее в функции TIdHashSHA1.NativeGetHashBytes (файл: idHashSHA,pas) на строке с кодом: SetLength(Result, SizeOf(UInt32)*5); // в файле строка под номером 460 Помогите решить данную проблему. Версии: Delphi: 10.1 INDY: 10.6.2.5341
  11. Подскажите как реализовать в TStringGrid заголовок с вертикальным текстом? Например:
  12. Среда XE8 стоит на Win 8,1. Приложение запускается. Переношу приложение на клиентскую машину с Win 7. Запускаю - вылетает такая ошибка: А после, это: Привожу код, который выполняется при начале отображения формы: procedure TForm1.FormShow(Sender: TObject); var StrTemp: TStrings; begin try StrTemp := TStringList.Create; DM1.FDConnection1.Params.Database := ExtractFileDir(ParamStr(0))+'\data\flatcom.db'; DM1.FDConnection1.Connected := True; DM1.FDTable1.Active := true; DM1.GetAdmins(StrTemp); self.edtAdmin.Items := StrTemp; edtAdmin.Items.Count; StrTemp.Clear; DM1.GetNationals(StrTemp); self.edtNationality.Items := StrTemp; StrTemp.Clear; DM1.GetRoomsType(StrTemp); self.edtRoomType.Items := StrTemp; StrTemp.Clear; DM1.GetCalcs(StrTemp); self.edtCalc.Items := StrTemp; StrTemp.Free; self.dtdtContract.Date := Date; Self.edtNumContract.SetFocus; Self.edtNumContract.SelectAll; except ShowMessage('Файл базы данных не найден. Обратитесь к разработчику.'); Self.Close; end; end; Ошибка, явно в этом месте: DM1.FDConnection1.Params.Database := ExtractFileDir(ParamStr(0))+'\data\flatcom.db'; DM1.FDConnection1.Connected := True; Если можете, скажите, в чем может быть проблема?
  13. Morfi

    TrayIcon

    Здравствуйте! Всем известен в VCL такой компонент, как TTrayIcon. Есть ли аналог в FMX?
  14. Всем доброго времени суток. Возможно ли описать и создать визуальные компоненты в dll, а отобразить их на форме (или, например на TLayout этой формы) приложения, использующего эту dll? Среда: Delphi XE7.
  15. Ярослав, а можно по подробнее об фреймах?
  16. Об этом варианте, я как-то не подумал. Благодарю за оперативный ответ.
  17. Всем доброго времени суток. На форме есть TGrid: Данные к нему прикручены через LiveBinding от TFDQuery: Как мне узнать значение ячейки первого столбца, активной строки? Пробовал реализовать через событие Grid1SelectCell: procedure TForm5.Grid1SelectCell(Sender: TObject; const ACol, ARow: Integer; var CanSelect: Boolean); var CellStr: string; //Значение ячейки первого столбца. begin CellStr := TTextCell(Grid1.Columns[0].Controls.Items[ARow]).Text; end; Вот этот код: TTextCell(Grid1.Columns[0].Controls.Items[ARow]).Text; я вычитал здесь: http://fire-monkey.ru/topic/120-tgrid-kak-ustanovit-tekst-v-iacheike-tcheckcolumn-delphi-xe-4/ Однако, при его выполнение срабатывает исключение: "argument out of range". Подскажите, как мне решить эту задачу? Версия среды: XE7 FMX.
  18. Доброго времени суток. Создаю программно компоненты TLabel. Status1 := TLabel.Create(Form1); Status1.Name := 'LabelStatus1_'+idMachine.ToString; Status1.Parent := RectangleStatus; Status1.Align := TAlignLayout(9); Status1.TextSettings.HorzAlign := TTextAlign(0); //По умолчанию, при создании объекта TLabel, размер шрифта устанавливается в значение 12 Status1.TextSettings.Font.Size := 24; Status1.TextSettings.WordWrap := true; Status1.Text := 'Статус 1'; Status1.Visible := true; Изменяю значение размера шрифта: Status1.TextSettings.Font.Size := 24 Значение изменяется, но размер шрифта TLabel при отображении на форме остается прежним. Как можно, или нужно изменять размер шрифта компонента в RunTime?
  19. Здравствуйте. Как в TStringGrid удалить определенную строку? А так же как полностью удалить все строки?
  20. Что это значит? Free только 30 дней? Или действительно - free?
  21. Как узнать текущие положения вертикального и горизонтального скролов в TScrollBox?
  22. Есть некоторая особенность. Событие в программе при нажатии на кнопку "меню" реагирует только со второго раза, всегда. Ставлю breakpoint на событие TForm.FormKeyUp. Точка срабатывает только каждый второй раз на нажатие кнопки меню. Это баг?! Можно ли исправить?! Среда разработки: XE5 up1 Версия android: 4.4.2 (CM11) Устройство: Huawei U8860
×
×
  • Создать...