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

Morfi

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

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

  • Посещение

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

  • День рождения 01.04.1992

Информация

  • Пол
    Мужчина
  • Город
    Беларусь

Контакты

  • Skype
    Morfi_VSL

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

4 249 просмотров профиля

Достижения 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. Ярослав, а можно по подробнее об фреймах?
×
×
  • Создать...