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);