Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
ВнизSetDlgItemText Найти похожие ветки
← →
g-l-u-k © (2005-06-13 00:50) [0]Доброго дня или ночи товарищи программисты!
Мой вопрос в следующем,я пиши программу которая в качестве формы использует окна из ресурсов,всё работает нормально,только мне нужно что бы в одном из окон в memo контроле был отображён текоторый текст,в несколько строк.Я пробовал использовать ф-цию SetDlgItemText но ничего не вышло я делаю так:
const
NFO_EDIT = 106;
info = "Некоторый текст"+#13#10+
"...............";
.................................
function AboutDlgProc(hWin, uMsg, wParam, lParam : Integer) : Integer; stdcall;
var
OldInfo : array[0..65534] of Char;
hWnd : integer;
begin
Result := 0;
if (uMsg = WM_DESTROY) or (uMsg = WM_CLOSE) or
((uMsg = WM_COMMAND) and (wParam = ABOUT_CLOSE_BUTTON))
then EndDialog(hWin,0);
GetDlgItemText(hWnd, INFO_EDIT, PChar(@OldInfo), 65535);
SetDlgItemText(hWnd, INFO_EDIT, PChar(String(OldInfo) + info));
end;
...............................
а вызываю я это окно так:
if wParam = ID_ABOUT then DialogBoxParam(Inst, PChar(ABOUT_DIALOG), Win,@AboutDlgProc, 0);
Но в результате текст не выводится,в чём ошибка я не понимаю,помогите пожалуйста.
← →
String (2005-06-13 03:25) [1]Функцию установки текста вызывай при uMsg = WM_INITDIALOG, а не при любом событии.
Перед GetDlgItemText() обнули OldInfo, иначе он может некорректно к String-у преобразоваться.
!!! а не работает это все потому, что в функцию SetDlgItemText() hWin передается, а не hWnd
← →
VMcL © (2005-06-13 10:23) [2]>>g-l-u-k © (13.06.05 00:50)
>GetDlgItemText(hWnd, INFO_EDIT, PChar(@OldInfo), 65535);
SetDlgItemText(hWnd, INFO_EDIT, PChar(String(OldInfo) + info));
И чему же здесь равно hWnd, позвольте узнать?
← →
g-l-u-k © (2005-06-13 14:14) [3]Сделал я теперь так:
function AboutDlgProc(hWin, uMsg, wParam, lParam : Integer) : Integer; stdcall;
var
OldInfo : array[0..65534] of Char;
begin
Result := 0;
if (uMsg = WM_DESTROY) or (uMsg = WM_CLOSE) or
((uMsg = WM_COMMAND) and (wParam = ABOUT_CLOSE_BUTTON))
then EndDialog(hWin,0);
OldInfo[0]:="0";
GetDlgItemText(hWin, INFO_EDIT, PChar(@OldInfo), 65535);
SetDlgItemText(hWin, INFO_EDIT, PChar(String(OldInfo) + info));
end;
Но теперь после компиляции, при попытке вызвать данное окно программа выдаёт ошибку.
> Функцию установки текста вызывай при uMsg = WM_INITDIALOG,
> а не при любом событии.
Это делпть при инициализации главного окна?
← →
VMcL © (2005-06-13 18:50) [4]>>g-l-u-k © (13.06.05 14:14) [3]
>Но теперь после компиляции, при попытке вызвать данное окно программа выдаёт ошибку.
Какую ошибку выдаёт программа, предстоит угадать?
← →
String (2005-06-14 02:16) [5]>>g-l-u-k © (13.06.05 14:14) [3]
>Это делпть при инициализации главного окна?
нет, в функции AboutDlgProc
if uMsg = WM_INITDIALOG then
begin
GetDlgItemText(hWin, INFO_EDIT, PChar(@OldInfo), 65535);
SetDlgItemText(hWin, INFO_EDIT, PChar(String(OldInfo) + info));
end;
а вообще такие вещи обычно через Case реализуют.
ошибка возможно от того, что твоя функция объявлена не правильно
должно быть:
function OptionsDlgProc(hDlg: HWND; iMsg: integer; wParam, lParam: integer): boolean; stdcall;
begin
Case iMsg of
WM_INITDIALOG :
begin
Result := true;
Exit;
end;
WM_DESTROY: ...
end;
заметь hWin (hDlg) имеет тип HWND, а сама функция BOOLEAN
если Result принимает значение true - это означает, что ты обработал сообщение, если false - запустится обработка по умолчанию
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.08.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c