Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
1-33579
mrAld
2003-08-28 15:59
2003.09.11
RAR


14-33763
Otter
2003-08-23 04:06
2003.09.11
Ух pancake!!


14-33785
Ax
2003-08-22 01:36
2003.09.11
Почему пустая форма имеет большой объём?


3-33434
Russko
2003-08-22 08:58
2003.09.11
Фильтрация


1-33572
Hollywood
2003-08-28 18:24
2003.09.11
Как узнать имя формы в которой лежит контрол




   Наверх