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

Вниз

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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.046 c
4-1118757036
Dr. Genius
2005-06-14 17:50
2005.08.14
Определение доступа к ресурсам компьютера


1-1122113340
Al_jus
2005-07-23 14:09
2005.08.14
Проблема с ДЛЛ


1-1122368068
dddim
2005-07-26 12:54
2005.08.14
winexec


3-1120153208
redlord
2005-06-30 21:40
2005.08.14
азы испопользования sql в delphi


1-1122295524
mmms
2005-07-25 16:45
2005.08.14
Как узнать отмену InputBox?