(решено) ActionList SearchFind. Названия элементов узнать?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

(решено) ActionList SearchFind. Названия элементов узнать?

Сообщение vitaly_l » 27.08.2015 21:24:56

Всем хорошего настроения!

В ActionList, заложен Search в нём есть SearchFind.
Названия элементов на Search форме - как узнать, чтобы получить к ним доступ ?
Имеются ввиду Label, т.к. остальное выведено в панель.
Последний раз редактировалось vitaly_l 28.08.2015 14:26:24, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение ENERGIX » 27.08.2015 22:08:17

Какой доступ? А почему именно через поиск, а не напрямую связать, через ComboВox? Число элементов неизменно и они на основной форме или конструктор?
ENERGIX
новенький
 
Сообщения: 18
Зарегистрирован: 01.03.2012 20:35:40

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение vitaly_l » 27.08.2015 22:16:42

Вы наверно ложно интерпретировали. В ActionList - заложена системная форма для "поиска". Я хочу её использовать, а не делать свою.
Доступ к функциям и названию формы я нашёл, т.к. они в панели. А вот к остальным элементам "кнопки и label-ы", не получается :oops: :cry:
Хочу поменять там Caption, а то всё на English.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение ENERGIX » 27.08.2015 23:03:31

Извини друг, явно не понял. У меня в CT5.2 у ActionList нет вызова SearchFind(может плохо искал). По опыту скажу, пришлось как то переписывать форму поиска RxDBGrid - через редактор кода, нажимаете CTRL+ лвк мыши по вызову формы и правите юнит формы
ENERGIX
новенький
 
Сообщения: 18
Зарегистрирован: 01.03.2012 20:35:40

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение vitaly_l » 27.08.2015 23:13:29

Спасибо в любом случае. Ctrl + лвк изначально пробовал. Там это не работает, оно как-то хитро встроено в систему. Теперь в ActionList - есть стандартные диалоги: Open, Save, Find и т.д. <= их даже ненужно класть на форму. Только выбрать в ActionList и дальше обращаться к ним. Я вчера только нашёл (раньше этого не было). Мне понравилось нововведение, я думал может кто уже знает как ими управлять? Точнее, как переименовать кнопки и остальное.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение pupsik » 27.08.2015 23:52:45

:)
подключаете StdActns и динамически создаете ваше "чудо". А потом пользуете.
п.с.
это диво-дивное давно в лазаре "сидит"...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение vitaly_l » 28.08.2015 00:37:04

pupsik писал(а):StdActns

Да это оно!
Он(StdActns) у меня уже был подключен и там действительно все диалоги прописаны в коде. И даже готовый поиск, есть.
А вот:
pupsik писал(а):динамически создаете ваше "чудо"

я не понимаю... что конкретно я должен сделать?

Все диалоги я подключаю в ActionList, методом двойного клика и потом они и их функции становятся доступны в панели.
А вот как получить доступ к Caption кнопок и Label - не понимаю... Спасите помогите <== :oops: :cry:

Добавлено спустя 5 минут 6 секунд:
Re: В ActionList SearchFind. Названия элементов на форме узнать?
А понял... Нужно сделать, например: someFind := TFindDialog.Create... <== это будет динамически создать "чудо"...
Хорошо, допустим сделал...

А вот как получить доступ к Caption кнопок и Label - всё равно не понимаю... Спасите помогите <== :oops: :cry:

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение ENERGIX » 28.08.2015 01:09:25

Интересно то, что FileOpenDialog и без динамически.. работает, а вот SearchFind нет?
ENERGIX
новенький
 
Сообщения: 18
Зарегистрирован: 01.03.2012 20:35:40

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение vitaly_l » 28.08.2015 01:14:54

ENERGIX писал(а):SearchFind

Всё работает, ничего не сломано(хотя возможно это и баг, т.к. OpenFile - сам переводится на Русский, а Search нет).

Я просто не могу получить доступ к элементам на форме поиска, который в ActionList (StdActns).
Там все надписи на английском, а я хочу их поменять на Русские.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение resident » 28.08.2015 13:00:09

Поискал решение, но похоже халявы не предусмотрено - диалог только для чтения:
Код: Выделить всё
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
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение vitaly_l » 28.08.2015 13:35:55

resident писал(а):Поискал решение, но похоже халявы не предусмотрено

Круто, подробно и понятно. Спасибо ГРОМАДНОЕ!

:?: Вот только как Вы узнали имя кнопки => "FindButton" ??? Где имена элементов хранятся? :oops: :cry:

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение resident » 28.08.2015 14:05:17

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
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение vitaly_l » 28.08.2015 14:23:59

Да! Суперски - это то что нужно! И даже больше чем нужно!
ВАУ - ГРОМАДНЫЙ РЕСПЕКТ И УВАЖУХА!
(УВАЖУХА - это Уральский термин, у меня так брат НАИВЫСШУЮ оценку даёт)

PS: Голосуйте все на https://www.roi.ru/22005 - это сайт Российской общественной инициативы, пусть там отменят все лимиты, постольку поскольку для уважаемого resident - это нужно и важно.
Последний раз редактировалось vitaly_l 28.08.2015 15:03:20, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: В ActionList SearchFind. Названия элементов на форме узн

Сообщение resident » 28.08.2015 14:29:39

Ok :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 215

Рейтинг@Mail.ru
cron