Главная страница
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.016 c
1-33632
tgdgdfg
2003-08-30 20:05
2003.09.11
Сортировка в TreeView


3-33516
eds
2003-08-19 17:28
2003.09.11
Как сделать зебру в гриде в Firebird?


1-33671
Sfagnum
2003-08-29 10:54
2003.09.11
Объявление массива...


3-33480
testthewest
2003-08-20 12:45
2003.09.11
Delphi не реагирует на RAISERROR


6-33704
sergey2
2003-06-18 09:30
2003.09.11
TEmbeddedWB. Не могу избавится от сообщений об ошибках сценария