У меня есть форма, отображающая данные из базы данных, в ней есть несколько кнопок и несколько панелей. Панели содержат множество компонентов, в частности TEdits, TComboBox, TDateTimePicker, TCheckBox, TListBox и TstringGrid.
Когда форма открыта так, что пользователь может просматривать, но не редактировать данные, я в настоящее время отключаю все компоненты, кроме кнопок, используя
for i := 0 to FrmAddNewMember.ComponentCount-1 do
if FrmAddNewMember.Components[i] is TPanel then
(FrmAddNewMember.Components[ i ] as TPanel).enabled := false;
Это работает нормально, за исключением того, что теперь я хотел бы, чтобы пользователь мог копировать в буфер обмена текст в TEdits, дату в TDateTimePicker, выбранный элемент в TComboBox и т.д., но все же не изменять его.
Я изменил код на следующий, который устанавливает TEdits только для чтения. Это делает то, что я хочу для TEdits, но у других типов элементов управления нет свойства только для чтения, поэтому я отключил их, как и раньше.
for i := 0 to FrmAddNewMember.ComponentCount-1 do
if not (FrmAddNewMember.Components[i] is TButton) then //(keep buttons working)
case FrmAddNewMember.Components[i] of
TEdit: (FrmAddNewMember.Components[ i ] as TEdit).readonly := true; //allows copying but not editing
TComboBox: (FrmAddNewMember.Components[ i ] as TComboBox).enabled := false; //no read only propert?
TDateTimePicker: (FrmAddNewMember.Components[ i ] as TDateTimePicker).enabled := false; //ditto
TCheckBox: (FrmAddNewMember.Components[ i ] as TCheckBox).enabled := false;
TListBox: (FrmAddNewMember.Components[ i ] as TListBox).enabled := false;
TstringGrid: (FrmAddNewMember.Components[ i ] as TstringGrid).enabled := false;
end;
Есть ли способ сделать другие элементы управления недоступными для редактирования, но все же разрешить копирование их содержимого в буфер обмена?
PS Я посмотрел на
disable-edits-on- datagridview-but-still-allow-for-highlighting-copy-and-paste
и
make-all-controls- on-a-form-read-only-at-once-without-one-linkbutton
и искал в другом месте. Может быть, это невозможно сделать просто.
TListBox
иTDateTmePicker
). 30.10.2018Text
. 30.10.2018TListBox
иTStringGrid
вернут пустую строку после их преобразования. Кстати, свойствоText
равноprotected
, поэтому OP необходимо использовать нетривиальное приведение, чтобы получить доступ к свойствуText
. Надеюсь, он знает, что делает)) 30.10.2018