OSX Yosemite и XE7 Firemonkey

Кто-нибудь может мне сказать, как сделать объект TTrackBar доступным только для чтения в C++Builder (или Delphi) XE7 в приложении OSX Firemonkey? Я пробовал свойство "Locked", но оно не работает.

ура

дронт

2 ответа

Установить Enabled собственность на False, Locked блокирует положение трекбара в конструкторе, чтобы вы не могли случайно его переместить.

Вот еще один ответ из-за ваших дополнительных требований. Нет свойства "только для чтения", которое будет поддерживать TrackBar включенным.

Вы можете просто использовать событие TrackBar.OnChange и просто сбросить значение, если пользователь пытается изменить его:

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  TrackBar1.Value := 50;
end;

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

TReadOnlyTrackObserver = class(TInterfacedObject, IEditLinkObserver, IObserver, ISingleCastObserver)
public
  procedure Removed;
  function GetActive: Boolean;
  procedure SetActive(Value: Boolean);
  function GetOnObserverToggle: TObserverToggleEvent;
  procedure SetOnObserverToggle(AEvent: TObserverToggleEvent);

  procedure Update;
  function Edit: Boolean;
  procedure Reset;
  procedure Modified;
  function IsModified: Boolean;
  function IsValidChar(AKey: Char): Boolean;
  function IsRequired: Boolean;
  function GetIsReadOnly: Boolean;
  procedure SetIsReadOnly(Value: Boolean);
  property IsReadOnly: Boolean read GetIsReadOnly write SetIsReadOnly;
  function GetIsEditing: Boolean;
  property IsEditing: Boolean read GetIsEditing;
  procedure BeginUpdate;
  procedure EndUpdate;
  function GetUpdating: Boolean;
  property Updating: Boolean read GetUpdating;
end;

function TReadOnlyTrackObserver.GetActive: Boolean;
begin
  Result := True;
end;

function TReadOnlyTrackObserver.GetIsReadOnly: Boolean;
begin
  Result := True;
end;

// todo: implement the other required functions of TReadOnlyTrackObserver 

var
  MyObserver: IEditLinkObserver;

  MyObserver := TReadOnlyTrackObserver.Create;
  TrackBar1.Observers.AddObserver(TObserverMapping.EditLinkID, MyObserver);
Другие вопросы по тегам