Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.11;
Скачать: CL | DM;

Вниз

TAction   Найти похожие ветки 

 
Михаил. Т   (2003-08-29 16:16) [0]

Я пишу программу где есть возможность переключения между языками. Мне нужно при определенных условиях присваивать всем Action на форме тот же Caption, что и у пункта меню которому назначен этот Action. Делаю примерно так.

Function GetMenuItemFromAction(Action:TAction):TMenuItem;
var
i:integer;
begin
for i:=0 to FrmEditor.ComponentCount-1 do
begin
if FrmEditor.Components[i] is TMenuItem then
begin
if Not (TMenuItem(FrmEditor.Components[i]).Action=nil) And (TMenuItem(FrmEditor.Components[i]).Action.Name=Action.Name) then
result:=TMenuItem(FrmEditor.Components[i]);
end;
end;
end;

Функция возвращает опреденный пункт в соответствии с Action.

А вот так я делаю при смене языков.

for i:=0 to FrmEditor.ComponentCount-1 do
begin
if FrmEditor.Components[i] is TAction then
begin
TAction(FrmEditor.Components[i]).Caption:=GetMenuItemFromAction(TActio n(FrmEditor.Components[i])).Caption;
End;

Вроде должно работать, но вылезает Access violation. Подскажите, что я делаю не так.


 
don-do   (2003-08-29 16:31) [1]

Не знаю что ты задумал.
но это лажа
TMenuItem(FrmEditor.Components[i]).Action.Name=Action.Name
=> TMenuItem(FrmEditor.Components[i]).Action=Action
да и при присвоении TMenuitem.Action Caption меню становиться равным Action.Caption
Так что тебе достаточно поменять Action.Caption, а остальное сделает за тебя Delphi.


 
Михаил. Т   (2003-08-29 16:41) [2]

> TMenuItem(FrmEditor.Components[i]).Action=Action
Я пробовал. Тот же результат.

> да и при присвоении TMenuitem.Action Caption меню становиться > равным Action.Caption

Мне не надо присваивать TMenuitem.Action. Мне надо присваивать Action"у Caption, который я читаю из некоего файла.


 
don-do   (2003-08-29 16:46) [3]

Дык и присваивай, зачем меню-то искать.


 
Михаил. Т   (2003-08-29 16:55) [4]

> Дык и присваивай, зачем меню-то искать.

Читай внимательно вопрос. Там написано "присваивать всем Action на форме". Именно всем, а не одному известному.


 
Vlad ©   (2003-08-29 16:56) [5]

> if Not (TMenuItem(FrmEditor.Components[i]).Action=nil) And (TMenuItem(FrmEditor.Components[i]).Action.Name=Action.Name)
Вот когда Action=nil, тогда и будет Access Violation на этой строчке


 
Михаил. Т   (2003-08-29 17:15) [6]

Это я уже давно сделал. А вообще все уже работает. Просто функция немного корявой была. Вот так надо:

Function GetMenuCaptionFromAction(Action:TAction):String;
var
i:integer;
begin
for i:=0 to FrmEditor.ComponentCount-1 do
begin
if FrmEditor.Components[i] is TMenuItem then
begin
if Not (TMenuItem(FrmEditor.Components[i]).Action=nil) And (TMenuItem(FrmEditor.Components[i]).Action=Action)then
Result:=TMenuItem(FrmEditor.Components[i]).Caption;
end;
end;
end;

И соответственно:

for i:=0 to FrmEditor.ComponentCount-1 do
begin
if FrmEditor.Components[i] is TAction then
begin
TAction(FrmEditor.Components[i]).Caption:=GetMenuCaptionFromAction(TAc tion(FrmEditor.Components[i]));
end;
end;

Но все равно, спасибо.



Страницы: 1 вся ветка

Текущий архив: 2003.09.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
14-33765
Igor__
2003-08-23 11:01
2003.09.11
Квантизация цветов


14-33748
Webson
2003-08-17 22:38
2003.09.11
HHP и HHC


14-33781
Дремучий
2003-08-22 14:35
2003.09.11
Фигня с ини-файлом.


14-33728
Фикус
2003-08-25 11:17
2003.09.11
Для поднятия настроения :)))))


1-33582
Luc
2003-08-28 15:45
2003.09.11
Как получить Sender а по левому клику мышкой?