Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.15;
Скачать: CL | DM;

Вниз

Текст меню по идентификатору   Найти похожие ветки 

 
anod   (2002-05-09 23:56) [0]

for i:= 0 to length(IDM_N)-1 do begin
if wParam = IDM_N[i] then begin
szString:="FAIL";
GetMenuString(PopUpMenu, IDM_N[i], szString, 0, MF_BYPOSITION);
MessageBox(0,szString, nil ,MB_OK);
end;

Выдает в сообщении FAIL, почему?


 
anod   (2002-05-10 17:23) [1]

Гуляют ещё люди чтоль?

Помогите.


 
Song   (2002-05-10 18:29) [2]

А что за сообщение? Чему равен WParam?


 
anod   (2002-05-10 23:00) [3]

case Msg of
WM_COMMAND:
begin
{...приведенный выше код...}
case wParam of
IDM_EXIT: SendMessage(MainWND,WM_CLOSE,0,0);
end;
end;
end;


Вот, в кратком виде код.

А здесь, как задается IDM_N:

http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1020889117&n=5


 
фтщв   (2002-05-11 11:12) [4]

Люди, помогите, плизззз.


 
Song   (2002-05-11 11:22) [5]

А какой тип szString?


 
Cobalt   (2002-05-11 13:02) [6]


> GetMenuString(PopUpMenu, IDM_N[i], szString, 0 , MF_BYPOSITION);

А этот 0 не является, случаем, размером строки?
Еще, желательно, устанавливать размер строки SetLength(szString, 255);


 
Atrem   (2002-05-11 15:20) [7]

попробуй вот так, у меня вроде пашет
Здесь при выбору пункта главного или системного меню формы показывается его срочка в Caption формы:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus;

type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N11: TMenuItem;
N21: TMenuItem;
das1: TMenuItem;
gfsgdf1: TMenuItem;
private
{ Private declarations }
public
procedure wm(var msg:TWMCommand);message wm_command;
procedure wms(var msg:TWMSysCommand);message wm_syscommand;
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.wms(var msg:TWMSysCommand);
var a:array[0..255] of char;
h:HMENU;
begin
h:=GetSystemMenu(Handle,false);
GetMenuString(h,msg.CmdType,a,256,MF_BYCOMMAND);
Caption:=string(a);
inherited;

end;
procedure TForm1.wm(var msg:TWMCommand);
var a:array[0..255] of char;
h:HMENU;
begin
if msg.NotifyCode=0 then
begin
h:=getmenu(Handle);
GetMenuString(h,msg.ItemID,a,256,MF_BYCOMMAND);
Caption:=string(a);
end;
inherited;
end;
end.


 
anod   (2002-05-11 15:34) [8]

2Song

szString : PCHAR;

2Cobalt

В хелпе написано, что если 0, то вроде бы просто возвращяется вся строка?


 
Cobalt   (2002-05-11 16:01) [9]

int GetMenuString(
HMENU hMenu, // handle to the menu
UINT uIDItem, // menu item identifier
LPTSTR lpString, // buffer for the string
int nMaxCount, // maximum length of string
UINT uFlag // options
);
Parameters
hMenu
[in] Handle to the menu.
uIDItem
[in] Specifies the menu item to be changed, as determined by the uFlag parameter.
lpString
[out] Pointer to the buffer that receives the null-terminated string. If the string is as long or longer than lpString, the string is truncated and the NULL terminator is added.
If lpString is NULL, the function returns the length of the menu string.

nMaxCount
[in] Specifies the maximum length, in characters, of the string to be copied. If the string is longer than the maximum specified in the nMaxCount parameter, the extra characters are truncated.
If nMaxCount is 0, the
(Result of) function returns the length of the menu string.

If the function succeeds, the return value specifies the number of characters copied to the buffer, not including the terminating null character.

If the function fails, the return value is zero.



То есть есть 2 пути получения:
1) передаем ей Nil-строку, получаем длину, устанавливаем длину строки, опять вызываем функцию с "правильными" длинами, должно быть все ОК.
2) ставим длину строки довольно большой величиной (напр. 255), и мучаемся только в случае если возвращается 0. (В первую очередь смотрим ShowMessage(SysErrorMessage(GetLastError))), ну а дальше по обстоятельствам.


 
anod   (2002-05-11 21:19) [10]

НЭто дело не в строке, убирал я вообще этот цикл - Аксес Виолатион, вставил, теперь при выборе меню, а паньше этого вообще не было, если не лень посмотрите код, я не понимаю. Первая программа на Апи и облом.

http://anodprogs.narod.ru/cds.rar (8kb)


 
anod   (2002-05-11 22:32) [11]

Исправил ошибку с переменными вроде заработала сама программа, но, здесь опять выдает ACCESS VIOLATION:
for i:= 0 to Length(IDM_N)-1 do begin
if wParam = IDM_N[i] then begin
sel:=GetMenuString(PopUpMenu,IDM_N[i],szStr, 0, MF_BYCOMMAND);
GetMenuString(PopUpMenu,IDM_N[i], szStr, sel, MF_BYCOMMAND);
MessageBox(0, szStr, "Message", MB_OK);
end;
end;

Пытался просто ставить 255, не идет, а SetLength для PCHAR не работает :(


 
anod   (2002-05-11 22:38) [12]

array[0..255] of char;
Вот так заработала, а раньше писала , что-то типа нужен pchar, а не array :)


 
Cobalt   (2002-05-11 22:45) [13]

Делай просто преобразование типа
var s:string;
...PChar(s)...


 
anod   (2002-05-12 00:37) [14]

По-моему все-таки где-то есть ошибка глобальная в программе, т.к. ACCESS VIOLATION появляется иногда в самых неожиданных местах.



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

Текущий архив: 2002.07.15;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.013 c
1-47443
N A N
2002-06-27 08:49
2002.07.15
Почему изменяется размер формы....


1-47321
AlexSh
2002-06-27 12:11
2002.07.15
Как в отчете выделить строки?


3-47095
Huc
2002-06-18 15:12
2002.07.15
Почему не работает SQL-инструкция ?


6-47626
ice
2002-04-28 12:07
2002.07.15
Чат


1-47329
dihlos
2002-07-01 13:31
2002.07.15
Как изменить обработчик сообщения WM_CLOSE у другого приложения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский