2014-12-28 2 views
0

может кто-нибудь сказать мне, как сделать объект TTrackBar только для чтения в C++ Builder (или Delphi) XE7 в приложении OSX firemonkey? Я попробовал свойство «Заблокировано», но, похоже, он не работает.OSX Yosemite и XE7 Firemonkey

Приветствия

дронта

+0

Вы должны действительно обновить заголовок своего вопроса, чтобы облегчить его поиск, например «Как сделать TrackBar только для чтения?». –

ответ

1

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

+0

Если я установил enabled = false, я больше не могу сфокусироваться на нем, когда вместо этого мне нужно будет сфокусироваться на нем. – Dodo

1

Вот еще один ответ из-за ваших дополнительных требований. Не существует свойства «readonly», которое будет поддерживать 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); 
+0

Thanx Sebatian, я только что реализовал подход Observer! – Dodo

+0

Пожалуйста, [примите это как ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work), если вам понравилось –

Смежные вопросы