Главная страница
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.013 c
1-33608
dataMaster
2003-09-01 13:32
2003.09.11
Как запретить изменение ширины колонок в ListView


14-33761
mitur
2003-08-23 22:22
2003.09.11
Поздравляю всех с Днём Харькова!


14-33774
sasami737
2003-08-21 18:04
2003.09.11
Секция Initialization


9-33425
cyborg
2003-03-07 02:38
2003.09.11
Конвертер из 24 битовых BMP в 16 битовый формат


4-33851
Vorobyev Sergey
2003-07-10 10:24
2003.09.11
Можно ли получить Handle процесса, не зная его PID?