(решено) ActionList SearchFind. Названия элементов узнать?
Модератор: Модераторы
(решено) ActionList SearchFind. Названия элементов узнать?
Всем хорошего настроения!
В ActionList, заложен Search в нём есть SearchFind.
Названия элементов на Search форме - как узнать, чтобы получить к ним доступ ?
Имеются ввиду Label, т.к. остальное выведено в панель.
В ActionList, заложен Search в нём есть SearchFind.
Названия элементов на Search форме - как узнать, чтобы получить к ним доступ ?
Имеются ввиду Label, т.к. остальное выведено в панель.
Последний раз редактировалось vitaly_l 28.08.2015 13:26:24, всего редактировалось 1 раз.
Какой доступ? А почему именно через поиск, а не напрямую связать, через ComboВox? Число элементов неизменно и они на основной форме или конструктор?
Вы наверно ложно интерпретировали. В ActionList - заложена системная форма для "поиска". Я хочу её использовать, а не делать свою.
Доступ к функциям и названию формы я нашёл, т.к. они в панели. А вот к остальным элементам "кнопки и label-ы", не получается
Хочу поменять там Caption, а то всё на English.
Доступ к функциям и названию формы я нашёл, т.к. они в панели. А вот к остальным элементам "кнопки и label-ы", не получается
Хочу поменять там Caption, а то всё на English.
Извини друг, явно не понял. У меня в CT5.2 у ActionList нет вызова SearchFind(может плохо искал). По опыту скажу, пришлось как то переписывать форму поиска RxDBGrid - через редактор кода, нажимаете CTRL+ лвк мыши по вызову формы и правите юнит формы
Спасибо в любом случае. Ctrl + лвк изначально пробовал. Там это не работает, оно как-то хитро встроено в систему. Теперь в ActionList - есть стандартные диалоги: Open, Save, Find и т.д. <= их даже ненужно класть на форму. Только выбрать в ActionList и дальше обращаться к ним. Я вчера только нашёл (раньше этого не было). Мне понравилось нововведение, я думал может кто уже знает как ими управлять? Точнее, как переименовать кнопки и остальное.
подключаете StdActns и динамически создаете ваше "чудо". А потом пользуете.
п.с.
это диво-дивное давно в лазаре "сидит"...
pupsik писал(а):StdActns
Да это оно!
Он(StdActns) у меня уже был подключен и там действительно все диалоги прописаны в коде. И даже готовый поиск, есть.
А вот:
pupsik писал(а):динамически создаете ваше "чудо"
я не понимаю... что конкретно я должен сделать?
Все диалоги я подключаю в ActionList, методом двойного клика и потом они и их функции становятся доступны в панели.
А вот как получить доступ к Caption кнопок и Label - не понимаю... Спасите помогите <==
Добавлено спустя 5 минут 6 секунд:
Re: В ActionList SearchFind. Названия элементов на форме узнать?
А понял... Нужно сделать, например: someFind := TFindDialog.Create... <== это будет динамически создать "чудо"...
Хорошо, допустим сделал...
А вот как получить доступ к Caption кнопок и Label - всё равно не понимаю... Спасите помогите <==
.
Интересно то, что FileOpenDialog и без динамически.. работает, а вот SearchFind нет?
ENERGIX писал(а):SearchFind
Всё работает, ничего не сломано(хотя возможно это и баг, т.к. OpenFile - сам переводится на Русский, а Search нет).
Я просто не могу получить доступ к элементам на форме поиска, который в ActionList (StdActns).
Там все надписи на английском, а я хочу их поменять на Русские.
Поискал решение, но похоже халявы не предусмотрено - диалог только для чтения:
Так что придется создавать свой опять из того же, что используется в TSearchFind стандартного диалога TFindDialog. Далее об этом.
У TFindDialog вижу защищенное (т.е. доступное потомкам) свойство - искомую форму
им и воспользуюсь, перекрыв один из методов.
Естественно создать где-то диалог до использования
Там уже можете в своем экшн листе создать действие-пустышку (и даже назвать его СерчФайнд) и привязать диалог к этому действию
Код: Выделить всё
TSearchFind = class(TSearchAction)
....
property Dialog: TFindDialog read GetFindDialog;Так что придется создавать свой опять из того же, что используется в TSearchFind стандартного диалога TFindDialog. Далее об этом.
У TFindDialog вижу защищенное (т.е. доступное потомкам) свойство - искомую форму
Код: Выделить всё
FFindForm: TForm;им и воспользуюсь, перекрыв один из методов.
Код: Выделить всё
TMyFindDialog = class(TFindDialog)
public
function Execute: Boolean; override;
end;Код: Выделить всё
function TMyFindDialog.Execute: Boolean;
begin
inherited;
(FFindForm.FindComponent('FindButton') as TButton).Caption := 'Поиск'; // и т.д.
end; Естественно создать где-то диалог до использования
Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
begin
MyFindDialog := TMyFindDialog.Create(Self);
end;Там уже можете в своем экшн листе создать действие-пустышку (и даже назвать его СерчФайнд) и привязать диалог к этому действию
Код: Выделить всё
procedure TForm1.Action1Execute(Sender: TObject);
begin
MyFindDialog.Execute;
end; resident писал(а):Поискал решение, но похоже халявы не предусмотрено
Круто, подробно и понятно. Спасибо ГРОМАДНОЕ!
.
vitaly_l писал(а):Спасибо ГРОМАДНОЕ!
С вас голос за мою инициативу
Чтобы голосовать, нужно быть зарегистрированным на госуслугах, но думаю, что в наше время уже все должны быть зарегистрированы. Тем более сейчас вроде упрощенная регистрация по сотовому.
https://www.roi.ru/22005
Вот только как Вы узнали имя кнопки => "FindButton" ??? Где имена элементов хранятся?
За четыре прыжка:
Все что здесь написано я узнал одним способом - щелкаю правой кнопкой мыши по какому-нить названию и выбираю "Найти объявление", так копаюсь в исходниках. В итоге прошел путь TSearchFind >>> TFindDialog >>> тут показалась подозрительной функция
Код: Выделить всё
function CreateForm:TForm;virtual;
Ищу её реализацию в файле внизу (или, поставив курсор на неё, тупо жму комбинацию кнопок Контрол+Шифт+Стрелка вниз):
Код: Выделить всё
function TFindDialog.CreateForm: TForm;
begin
// do not use Self as Owner, otherwise as desgntime this will not work
Result := TFindDialogForm.Create(nil);
with TFindDialogForm(Result) do
begin
FindButton.Caption := rsFind;
CancelButton.Caption := rsMbCancel;
HelpButton.Caption := ifsVK_HELP;
WholeWordsOnlyCheckBox.Caption := rsWholeWordsOnly;
CaseSensitiveCheckBox.Caption := rsCaseSensitive;
EntireScopeCheckBox.Caption := rsEntireScope;
FindLabel.Caption := rsText;
DirectionRadioGroup.Caption := rsDirection;
DirectionRadioGroup.Items[0] := rsForward;
DirectionRadioGroup.Items[1] := rsBackward;
//Setting up button eventhandlers
FindButton.OnClick := @FindClick;
HelpButton.OnClick := @HelpClick;
CancelButton.OnClick := @CancelClick;
PopupMode := pmAuto;
end;
end; Можно конечно проверить, может чего забыли. Добавлю в перекрытые метод пару строк:
Код: Выделить всё
function TMyFindDialog.Execute: Boolean;
var i: integer;
begin
inherited;
(FFindForm.FindComponent('FindButton') as TButton).Caption := 'Поиск';
for i := 0 to pred(FFindForm.ComponentCount) do
Form1.mm.Lines.Add(FFindForm.Components[i].Name + ' - ' + FFindForm.Components[i].ClassName);
end; В итоге в mm (это я так называю TMemo) список контролов:
FindLabel - TLabel
EditFind - TEdit
FindButton - TButton
CancelButton - TButton
WholeWordsOnlyCheckBox - TCheckBox
CaseSensitiveCheckBox - TCheckBox
DirectionRadioGroup - TRadioGroup
HelpButton - TButton
EntireScopeCheckBox - TCheckBox
Да! Суперски - это то что нужно! И даже больше чем нужно!
ВАУ - ГРОМАДНЫЙ РЕСПЕКТ И УВАЖУХА!
(УВАЖУХА - это Уральский термин, у меня так брат НАИВЫСШУЮ оценку даёт)
PS: Голосуйте все на https://www.roi.ru/22005 - это сайт Российской общественной инициативы, пусть там отменят все лимиты, постольку поскольку для уважаемого resident - это нужно и важно.
ВАУ - ГРОМАДНЫЙ РЕСПЕКТ И УВАЖУХА!
(УВАЖУХА - это Уральский термин, у меня так брат НАИВЫСШУЮ оценку даёт)
PS: Голосуйте все на https://www.roi.ru/22005 - это сайт Российской общественной инициативы, пусть там отменят все лимиты, постольку поскольку для уважаемого resident - это нужно и важно.
Последний раз редактировалось vitaly_l 28.08.2015 14:03:20, всего редактировалось 1 раз.
