![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
SetDlgItemText [D1, D2, D3, D4, D5, D6, D7, Win95/98, WinME, NT4, Win2k, WinXP]
g-l-u-k © (2005-06-13 00:50:00)Доброго дня или ночи товарищи программисты!
Мой вопрос в следующем,я пиши программу которая в качестве формы использует окна из ресурсов,всё работает нормально,только мне нужно что бы в одном из окон в 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-14 02:16:00) [1]>>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 - запустится обработка по умолчанию
VMcL (2005-06-13 18:50:00) [2]>> g-l-u-k © (13.06.05 14:14) [3]
> Но теперь после компиляции, при попытке вызвать данное окно программа выдаёт ошибку.
Какую ошибку выдаёт программа, предстоит угадать?
g-l-u-k (2005-06-13 14:14:00) [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 10:23:00) [4]>> 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, позвольте узнать?
String (2005-06-13 03:25:00) [5]Функцию установки текста вызывай при uMsg = WM_INITDIALOG, а не при любом событии.
Перед GetDlgItemText() обнули OldInfo, иначе он может некорректно к String-у преобразоваться.
!!! а не работает это все потому, что в функцию SetDlgItemText() hWin передается, а не hWnd