Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
14-1121995071
SoftX
2005-07-22 05:17
2005.08.14
Какой коньяк лучше: французский, крымский или армянский?


1-1122274489
Viktop
2005-07-25 10:54
2005.08.14
Перемещение формы за Panel


3-1120648252
Apachi
2005-07-06 15:10
2005.08.14
Как в селекте можно возращать порядковый номер записи????


1-1122287505
Juice
2005-07-25 14:31
2005.08.14
Как удалить метод в наследнике ?


1-1122198127
Shaden
2005-07-24 13:42
2005.08.14
Проблема с разбором XML-файла.




   Наверх