Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];

Вниз

иконка в трее без форм   Найти похожие ветки 

 
AHTOLLlKA   (2008-11-10 12:55) [0]

подскажите люди добрые...
как засунуть иконку в трей, не используя в uses forms
??????


 
Сергей М. ©   (2008-11-10 13:01) [1]


> не используя в uses forms


Чем он тебе помешал ?


 
AHTOLLlKA   (2008-11-10 13:07) [2]

он помешал весом... нет смысла носить 400кб с собой думаю.. если будеттолько иконка с попапами например..


 
Сергей М. ©   (2008-11-10 13:10) [3]

см. Shell_NotifyIcon()


 
AHTOLLlKA   (2008-11-10 13:19) [4]

нет, ну я понимаю чем и как оно делаеться, но оно привязано к форме!!!!!!!
я и прошу помочь как сделать без формы... читайте пожалуйста внимательней...


 
Поросенок Винни-Пух ©   (2008-11-10 13:23) [5]

ни к какой форме оно не привязано


 
Сергей М. ©   (2008-11-10 13:24) [6]


> оно привязано к форме


Не привязано, не выдумывай.


 
AHTOLLlKA   (2008-11-10 13:25) [7]

procedure TForm1.WMTRAYICONNOTIFY(var Msg: TMessage);
begin
{обрабатываем события на иконке в трее}
case Msg.LParam of
WM_LBUTTONDOWN: Form1.Visible:=true;
WM_LBUTTONDBLCLK: {ваш код обработки события двойного нажатия на левую кнопку мыши}
WM_LBUTTONUP: {ваш код обработки события отпускания левой кнопки мыши}

WM_RBUTTONDOWN: {ваш код}
WM_RBUTTONDBLCLK: {ваш код}
WM_RBUTTONUP: {ваш код}

WM_MOUSEMOVE: {ваш код}
end;
end;

таже оброботка событий...


 
Поросенок Винни-Пух ©   (2008-11-10 13:26) [8]

здесь привязно. а вообще не привязано.


 
Поросенок Винни-Пух ©   (2008-11-10 13:28) [9]

если бы было привязано к форме, то у шеллнотифайикон был бы параметр - экземпляр формы. а его нет.


 
AHTOLLlKA   (2008-11-10 13:33) [10]

можешь показать как это ?


 
brother ©   (2008-11-10 13:34) [11]

(х(х_х)х)


 
Поросенок Винни-Пух ©   (2008-11-10 13:34) [12]

нужно окно для обработки сообщений иконы. а окно это не обязательно форма, а значит и forms.pas


 
Сергей М. ©   (2008-11-10 13:36) [13]


> AHTOLLlKA   (10.11.08 13:25) [7]


Ты справку к этой ф-ции проштудировал ?
Где ты там увидел хоть какое-либо упоминание о форме ?


 
AHTOLLlKA   (2008-11-10 13:37) [14]

дак как тогда быть...
пытался как то к окну привязать написанному на апи.. не получаеться..


 
AHTOLLlKA   (2008-11-10 13:38) [15]


> > AHTOLLlKA   (10.11.08 13:25) [7]Ты справку к этой ф-ции
> проштудировал ?Где ты там увидел хоть какое-либо упоминание
> о форме ?

я про обработку событий..


 
Сергей М. ©   (2008-11-10 13:39) [16]


> AHTOLLlKA   (10.11.08 13:37) [14]


Вот и показывай с чувством, с толком, с расстановкой, как ты пытался и что при этом не получается..


 
Поросенок Винни-Пух ©   (2008-11-10 13:39) [17]

пытался как то к окну привязать написанному на апи.. не получаеться..

надо пробовать еще раз


 
Сергей М. ©   (2008-11-10 13:41) [18]


> я про обработку событий


Событие в этом случае - это факт получения оконного сообщения.
Прежде чем получать какие-то сообщения, надо чтобы существовало окно.
Какие меры ты принял для этого ?


 
AHTOLLlKA   (2008-11-10 13:47) [19]

program APIForm;
uses
 Windows, Messages,ShellApi;
const
 TITLE = "Cамый простой пример API формы без всего";
WM_NOTIFYTRAYICON = WM_USER + 1;

var
 h_Wnd  : HWND;
 tray: TNotifyIconData;

function WndProc(hWnd: HWND; Msg: UINT;  wParam: WPARAM;  lParam:
LPARAM): LRESULT; stdcall;
begin
 case (Msg) of
   WM_CREATE:
     begin { а здесь могло бы быть то что выполняется при старте проги }
     end;
   WM_CLOSE:
     begin
       PostQuitMessage(0);
       Result := 0
     end;
   else
     Result := DefWindowProc(hWnd, Msg, wParam, lParam);
 end;
end;

function APIFormC(Width, Height : Integer ) : Boolean;
var
 wndClass : TWndClass;         { Window class }
 dwStyle ,                     { Window styles }
 dwExStyle : DWORD;            { Extended window styles }
 h_Instance : HINST;           { Current instance }
begin
 h_Instance := GetModuleHandle(nil);     { Grab An Instance For Our
Window }
 with wndClass do                    { Set up the window class }
 begin
   style         := CS_HREDRAW or    { Redraws entire window if length
changes }
                    CS_VREDRAW or    { Redraws entire window if height
changes }
                    CS_OWNDC;        { Unique device context for the
window }
   lpfnWndProc   := @WndProc;        { Set the window procedure to our
func WndProc }
   hInstance     := h_Instance;
   hCursor       := LoadCursor(0, IDC_ARROW);
   hbrBackground := COLOR_WINDOW; { стандартный цвет окна(можно так
445566 (RGB), или просто clred (красный) ) }
   lpszClassName := "APIForm";
 end;
 RegisterClass(wndClass);
 dwStyle := WS_OVERLAPPEDWINDOW; { форма с кнопками  вверху }
 dwExStyle := WS_EX_APPWINDOW;   { форма со значком приложения в углу }
 h_Wnd := CreateWindowEx(dwExStyle,     { Extended window styles }

                         "APIForm",     { Class name }
                         TITLE,         { Window title (caption) }
                         dwStyle,      { Window styles }
                         0, 0,          { позиция окна(левый верхний
угол) }
                         Width, Height, { Размеры Width и Heught
соответственно }
                         0,             { No parent window }
                         0,             { No menu }
                         h_Instance,    { Instance }
                         nil);          { Pass nothing to WM_CREATE }
 if h_Wnd = 0 then
 begin
   MessageBox(0, "Не могу создать окно!", "Ошибка", MB_OK or
MB_ICONERROR);
   Result := False;
   Exit;
 end;
 ShowWindow(h_Wnd, SW_SHOW);
 SetForegroundWindow(h_Wnd);
 SetFocus(h_Wnd);
 Result := True;
end;

function WinMain(hInstance : HINST; hPrevInstance : HINST;
                lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
var
 msg : TMsg;
 finished : Boolean;
begin
with tray do begin
cbSize := SizeOf(TNotifyIconData);

uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;

szTip := ("Это мое приложение в трее");
end;
Shell_NotifyIcon(NIM_ADD, Addr(tray));

 Finished := False;
 APIFormC( 400, 200 );  { ширина и высота }

 while not finished do
 begin
   if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then { Check if there is a
message for this window }
   begin

     if (msg.message = WM_QUIT) then     { If WM_QUIT message received
then we are done }
       finished := True
     else begin                              { Else translate and
dispatch the message to this window }
      TranslateMessage(msg);
       DispatchMessage(msg);
     end;
   end;
 end;
 Result := msg.wParam;

end;

begin

 WinMain( hInstance, hPrevInst, CmdLine, CmdShow );
  with tray do begin
cbSize := SizeOf(TNotifyIconData);

uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;

szTip := ("Это мое приложение в трее");
end;
Shell_NotifyIcon(NIM_ADD, Addr(tray));

end.


иконку пока не могу прикрутить.... но вроде бы там выскакивает квадратик что что то в трее появилось


 
AHTOLLlKA   (2008-11-10 13:49) [20]

with tray do
begin
cbSize := sizeof(TNotifyIconData);
uID := 0;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := LoadIcon(0, IDI_ASTERISK);
szTip := ("My Resident");
end;
Shell_NotifyIcon(NIM_ADD, @tray);


иконка появляеца и изчезает... (


 
Сергей М. ©   (2008-11-10 13:52) [21]


> иконку пока не могу прикрутить.


А где собственно попытки "прикручивания" ?

Ты привел просто некий чужой код, для изучения и понимания каждой строчки которого ты нге сделал никаких умственных усилий и телодвижений


 
AndreyV ©   (2008-11-10 13:53) [22]

Сообщения в цикле обрабатывай в WinProc


 
AndreyV ©   (2008-11-10 13:56) [23]

> [22] AndreyV ©   (10.11.08 13:53)

Пардон. Не туда посмотрел.


 
Сергей М. ©   (2008-11-10 13:59) [24]


> AHTOLLlKA   (10.11.08 13:49) [20]


Где обработка сообщений иконки ?
Тобой обрабатываются только WM_CREATE и WM_CLOSE ..


 
AHTOLLlKA   (2008-11-10 14:00) [25]

program APIForm;
uses
 Windows, Messages,ShellApi,Graphics;
const
 TITLE = "Cамый простой пример API формы без всего";
WM_NOTIFYTRAYICON = WM_USER + 1;

var
 h_Wnd  : HWND;
 tray: TNotifyIconData;
 TrayIcon: TIcon;

function WndProc(hWnd: HWND; Msg: UINT;  wParam: WPARAM;  lParam:
LPARAM): LRESULT; stdcall;
begin
 case (Msg) of
   WM_CREATE:
     begin { а здесь могло бы быть то что выполняется при старте проги }
     end;
   WM_CLOSE:
     begin
       PostQuitMessage(0);
       Result := 0
     end;

WM_LBUTTONDOWN:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;

WM_LBUTTONDBLCLK:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;

WM_LBUTTONUP:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;

WM_RBUTTONDOWN:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;

WM_RBUTTONDBLCLK:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;

WM_RBUTTONUP:
begin
{ а здесь могло бы быть то что выполняется при старте проги }
end;

WM_MOUSEMOVE:
begin
messagebox(0,"test","test",0);
end;

   else
     Result := DefWindowProc(hWnd, Msg, wParam, lParam);
 end;
end;

function APIFormC(Width, Height : Integer ) : Boolean;
var
 wndClass : TWndClass;         { Window class }
 dwStyle ,                     { Window styles }
 dwExStyle : DWORD;            { Extended window styles }
 h_Instance : HINST;           { Current instance }
begin
 h_Instance := GetModuleHandle(nil);     { Grab An Instance For Our
Window }
 with wndClass do                    { Set up the window class }
 begin
   style         := CS_HREDRAW or    { Redraws entire window if length
changes }
                    CS_VREDRAW or    { Redraws entire window if height
changes }
                    CS_OWNDC;        { Unique device context for the
window }
   lpfnWndProc   := @WndProc;        { Set the window procedure to our
func WndProc }
   hInstance     := h_Instance;
   hCursor       := LoadCursor(0, IDC_ARROW);
   hbrBackground := COLOR_WINDOW; { стандартный цвет окна(можно так
445566 (RGB), или просто clred (красный) ) }
   lpszClassName := "APIForm";
 end;
 RegisterClass(wndClass);
 dwStyle := WS_OVERLAPPEDWINDOW; { форма с кнопками  вверху }
 dwExStyle := WS_EX_APPWINDOW;   { форма со значком приложения в углу }
 h_Wnd := CreateWindowEx(dwExStyle,     { Extended window styles }

                         "APIForm",     { Class name }
                         TITLE,         { Window title (caption) }
                         dwStyle,      { Window styles }
                         0, 0,          { позиция окна(левый верхний
угол) }
                         Width, Height, { Размеры Width и Heught
соответственно }
                         0,             { No parent window }
                         0,             { No menu }
                         h_Instance,    { Instance }
                         nil);          { Pass nothing to WM_CREATE }
 if h_Wnd = 0 then
 begin
   MessageBox(0, "Не могу создать окно!", "Ошибка", MB_OK or
MB_ICONERROR);
   Result := False;
   Exit;
 end;
 ShowWindow(h_Wnd, SW_SHOW);
 SetForegroundWindow(h_Wnd);
 SetFocus(h_Wnd);
 Result := True;
end;

function WinMain(hInstance : HINST; hPrevInstance : HINST;
                lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
var
 msg : TMsg;
 finished : Boolean;
begin

 Finished := False;
 APIFormC( 400, 200 );  { ширина и высота }

 while not finished do
 begin
   if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then { Check if there is a
message for this window }
   begin

     if (msg.message = WM_QUIT) then     { If WM_QUIT message received
then we are done }
       finished := True
     else begin                              { Else translate and
dispatch the message to this window }
      TranslateMessage(msg);
       DispatchMessage(msg);
     end;
   end;
 end;
 Result := msg.wParam;

end;

begin

with tray do
begin
cbSize := sizeof(TNotifyIconData);
//wnd := mywnd;
uID := 0;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := LoadIcon(0, IDI_ASTERISK);
szTip := ("My Resident");
end;
Shell_NotifyIcon(NIM_ADD, @tray);

WinMain( hInstance, hPrevInst, CmdLine, CmdShow );

end.


обрабатываю так... но иконка при наведении пропадает все равно...
код чужой ни чужой.. учусь как могу и как позволяет время...


 
AHTOLLlKA   (2008-11-10 14:03) [26]

как то надо заставить обрабатывать только WM_NOTIFYTRAYICON
шевеление мышки и тд...
и иконка.. не могу понять почему изчезает при наведение...


 
Сергей М. ©   (2008-11-10 14:05) [27]


> обрабатываю так


Вижу обработку

WM_CREATE:
WM_CLOSE:
WM_LBUTTONDOWN:
WM_LBUTTONDBLCLK:
WM_LBUTTONUP:
WM_RBUTTONDOWN:
WM_RBUTTONDBLCLK:
WM_RBUTTONUP:
WM_MOUSEMOVE:

А обработку WM_NOTIFYTRAYICON в упор не вижу.

Где она у тебя ?


 
AHTOLLlKA   (2008-11-10 14:13) [28]

не понимаю...
тоесть окей, я ее если там добавлю.. что делать при ее обработке тогда ??

из-за этого пропадает иконка ??


 
@!!ex ©   (2008-11-10 14:16) [29]

> из-за этого пропадает иконка ??

Да. Винда не получает результата обработки и считает, что иконка сдохла.


 
Сергей М. ©   (2008-11-10 14:33) [30]


> я ее если там добавлю.. что делать при ее обработке тогда


Как минимум сформировать результат обработки.

Всё это (и многое-многое другое) следует делать ручками, раз ты отказался от forms.


 
AHTOLLlKA   (2008-11-10 14:44) [31]

многое.. понятно... а хоть что-нибудь подскажите что там обрабатывать...

и что делать при срабатывании сообщения


 
Поросенок Винни-Пух ©   (2008-11-10 14:46) [32]

и что делать при срабатывании сообщения

можно хрюкать при левом клике на иконке. а при правом клике на иконке можно собачий вальс проиграть.


 
AHTOLLlKA   (2008-11-10 14:48) [33]

дак я понять не могу как оставить ее на месте при наведении мышкой на неее (((((


 
Leonid Troyanovsky ©   (2008-11-10 14:48) [34]


> AHTOLLlKA   (10.11.08 14:44) [31]

> многое.. понятно... а хоть что-нибудь подскажите что там
> обрабатывать...

Читать msdn.
Это небольшая мзда за отказ от forms.

--
Regards, LVT.


 
Сергей М. ©   (2008-11-10 14:52) [35]


> что делать при срабатывании сообщения


WM_NOTIFYTRAYICON:
begin
  case lparam of
    WM_RBUTTONUP: ..
    WM_LBUTTONUP: ..
    WM_MOUSEMOVE:..
...
  end;
  Result := 0;
end;


 
Anatoly Podgoretsky ©   (2008-11-10 14:53) [36]

> Leonid Troyanovsky  (10.11.2008 14:48:34)  [34]

Это не мзда, это расплата за отказ.


 
Сергей М. ©   (2008-11-10 14:55) [37]


> AHTOLLlKA   (10.11.08 14:44) [31]


Бросай эту гнилую затею - так и будешь с протянутой рукой сюда ходить по каждому чиху)


 
AHTOLLlKA   (2008-11-10 15:01) [38]

program APIForm;
uses
 Windows, Messages,ShellApi,Graphics;

const
 TITLE = "11111111";
WM_NOTIFYTRAYICON = WM_USER + 1;

var
 h_Wnd  : HWND;
 tray: TNotifyIconData;
 TrayIcon: TIcon;

function WndProc(hWnd: HWND; Msg: UINT;  wParam: WPARAM;  lParam:
LPARAM): LRESULT; stdcall;
begin
 case (Msg) of
   WM_CREATE:
     begin { а здесь могло бы быть то что выполняется при старте проги }
     end;
   WM_CLOSE:
     begin
       PostQuitMessage(0);
       Result := 0
     end;

WM_NOTIFYTRAYICON:
begin
 case lparam of

WM_RBUTTONUP:
begin
//
end;

WM_LBUTTONUP:
begin
//
end;

WM_MOUSEMOVE:
begin
messagebox(0,"test","test",0);
end;

 end;
 Result := 0;
end;

{WM_LBUTTONDOWN:
begin
// а здесь могло бы быть то что выполняется при старте проги
end;

WM_LBUTTONDBLCLK:
begin
// а здесь могло бы быть то что выполняется при старте проги
end;

WM_LBUTTONUP:
begin
// а здесь могло бы быть то что выполняется при старте проги
end;

WM_RBUTTONDOWN:
begin
// а здесь могло бы быть то что выполняется при старте проги
end;

WM_RBUTTONDBLCLK:
begin
// а здесь могло бы быть то что выполняется при старте проги
end;

WM_RBUTTONUP:
begin
// а здесь могло бы быть то что выполняется при старте проги
end;

WM_MOUSEMOVE:
begin
messagebox(0,"test","test",0);
end;  }

   else
     Result := DefWindowProc(hWnd, Msg, wParam, lParam);
 end;
end;

function APIFormC(Width, Height : Integer ) : Boolean;
var
 wndClass : TWndClass;         { Window class }
 dwStyle ,                     { Window styles }
 dwExStyle : DWORD;            { Extended window styles }
 h_Instance : HINST;           { Current instance }
begin
 h_Instance := GetModuleHandle(nil);     { Grab An Instance For Our
Window }
 with wndClass do                    { Set up the window class }
 begin
   style         := CS_HREDRAW or    { Redraws entire window if length
changes }
                    CS_VREDRAW or    { Redraws entire window if height
changes }
                    CS_OWNDC;        { Unique device context for the
window }
   lpfnWndProc   := @WndProc;        { Set the window procedure to our
func WndProc }
   hInstance     := h_Instance;
   hCursor       := LoadCursor(0, IDC_ARROW);
   hbrBackground := COLOR_WINDOW; { стандартный цвет окна(можно так
445566 (RGB), или просто clred (красный) ) }
   lpszClassName := "APIForm";
 end;
 RegisterClass(wndClass);
 dwStyle := WS_OVERLAPPEDWINDOW; { форма с кнопками  вверху }
 dwExStyle := WS_EX_APPWINDOW;   { форма со значком приложения в углу }
 h_Wnd := CreateWindowEx(dwExStyle,     { Extended window styles }

                         "APIForm",     { Class name }
                         TITLE,         { Window title (caption) }
                         dwStyle,      { Window styles }
                         0, 0,          { позиция окна(левый верхний
угол) }
                         Width, Height, { Размеры Width и Heught
соответственно }
                         0,             { No parent window }
                         0,             { No menu }
                         h_Instance,    { Instance }
                         nil);          { Pass nothing to WM_CREATE }
 if h_Wnd = 0 then
 begin
   MessageBox(0, "Не могу создать окно!", "Ошибка", MB_OK or
MB_ICONERROR);
   Result := False;
   Exit;
 end;
 ShowWindow(h_Wnd, SW_SHOW);
 SetForegroundWindow(h_Wnd);
 SetFocus(h_Wnd);
 Result := True;
end;

function WinMain(hInstance : HINST; hPrevInstance : HINST;
                lpCmdLine : PChar; nCmdShow : Integer) : Integer; stdcall;
var
 msg : TMsg;
 finished : Boolean;
begin

 Finished := False;
 APIFormC( 400, 200 );  { ширина и высота }

 while not finished do
 begin
   if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then { Check if there is a
message for this window }
   begin

     if (msg.message = WM_QUIT) then     { If WM_QUIT message received
then we are done }
       finished := True
     else begin                              { Else translate and
dispatch the message to this window }
      TranslateMessage(msg);
       DispatchMessage(msg);
     end;
   end;
 end;
 Result := msg.wParam;

end;

begin

with tray do
begin
cbSize := sizeof(TNotifyIconData);
wnd := h_Wnd;
uID := 0;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_NOTIFYTRAYICON;
hIcon := LoadIcon(0, IDI_ASTERISK);
szTip := ("My Resident");
end;
Shell_NotifyIcon(NIM_ADD, @tray);

WinMain( hInstance, hPrevInst, CmdLine, CmdShow );

end.


пока с протянутой... ога...
ну ткните в коде где ОНО почему изчезает все равно иконка в треее то...=(((


 
Сергей М. ©   (2008-11-10 15:08) [39]


> ткните в коде где ОНО


Его нет, понимаешь ? Совсем нет. То есть напрочь отсутствует.
Так что тыкать некуда.

А вот в [35] есть.
Дело за малым - самомтоятельно дотумкать, куда этот фрагмент приспособить.
Задачка для школьника)


> почему изчезает


Вот потому и исчезает.


 
AHTOLLlKA   (2008-11-10 15:10) [40]


> А вот в [35] есть.Дело за малым - самомтоятельно дотумкать,
>  куда этот фрагмент приспособить.Задачка для школьника)

дак я же добавил это в
function WndProc(hWnd: HWND; Msg: UINT;  wParam: WPARAM;  lParam:
LPARAM): LRESULT; stdcall



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

Форум: "Начинающим";
Текущий архив: 2008.12.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.007 c
2-1226839134
Kawun
2008-11-16 15:38
2008.12.28
Получить массив и подсчитать его элементы. (+ см.тему)


2-1226867152
ivak
2008-11-16 23:25
2008.12.28
Как?


15-1225349122
passlight
2008-10-30 09:45
2008.12.28
Следи за кредитом, будь осторожен...


15-1225428082
Snoop
2008-10-31 07:41
2008.12.28
Заказ на программу 2


2-1227094803
Golden
2008-11-19 14:40
2008.12.28
Вопросик по StringReplace





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский