Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.012 c
14-1122032454
alles
2005-07-22 15:40
2005.08.14
70 кг + 1 л.(воды)=71кг ?


4-1118339471
Spectre_s
2005-06-09 21:51
2005.08.14
Создание пользователя Windows через Delphi


6-1112417763
Evgenius
2005-04-02 08:56
2005.08.14
Програмная генерация события в TwebBrowser


1-1122361760
Homer Simpson
2005-07-26 11:09
2005.08.14
Невизуальное дерево


1-1122270140
tttyu
2005-07-25 09:42
2005.08.14
Как узнать дерикторию откуда прога запускается?





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