Текущий архив: 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.45 MB
Время: 0.008 c