Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];

Вниз

Измение текста static контрола   Найти похожие ветки 

 
Денис178   (2007-06-26 02:02) [0]

Собирал ресурс:

MAIN_WINDOW DIALOGEX 32768, 0, 258, 130
STYLE DS_MODALFRAME | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU
CAPTION "Еуые"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
FONT 8, "MS SANS SERIF"
{
CONTROL "lalala", 3, "static", SS_LEFT | WS_CHILD | WS_VISIBLE, 16, 8, 100, 90
}

А как из программы обратиться к этому контролу не знаю. Нужно всего лишь поменять текст надписи. Подскажите пож кто занет.


 
Однокамушкин   (2007-06-26 08:56) [1]

Получите хэндл контрола через функцию GetDlgItem, а потом SetWindowText...


 
Денис178   (2007-06-27 17:35) [2]

Благодарю! Получилось


 
Денис178   (2007-07-05 21:10) [3]

Нет, не получилось.. Посмотрите пожалуйста, что не так делаю

program shell;

uses
Windows, Messages, WinSock, SysUtils;

function DlgProc(hWin, uMsg, wParam, lParam: Integer): Integer; stdcall;
var
 Cntrl:hWnd;
begin
Result := 0;
 case uMsg of
  WM_INITDIALOG:
   Begin
    SendMessage(hWin, WM_SETICON, ICON_BIG, LoadIcon(hInstance, "MAINICON"));
   end;
  WM_COMMAND:
   begin
    case LoWord(wParam) of
     1: EndDialog(hWin, 0);
     2: begin
          Cntrl:=GetDlgItem(hWin,3);
          SetWindowText(Cntrl,"Hello");
        end;

   end;
 end;
  WM_DESTROY, WM_CLOSE: EndDialog(hWin, 0);
end;
end;

begin
{$R shell.res}
DialogBox(hInstance, "MAIN_WINDOW", 0, @DlgProc);
end.

В функции GetDlgItem второй параметр
int nIDDlgItem  // identifier of control
этот тот порядковый идентификатор который я указываю в ресурсе?

Спасибо


 
Dib@zol ©   (2007-07-06 13:18) [4]


> SetWindowText(Cntrl,"Hello");


SetDlgItemText(HWin, 3, "Твой_текст");


 
Денис178   (2007-07-06 17:10) [5]

Не помогает.. Стыдно, эелементарная вещь, а чё с ней делать не знаю. Уже лет 5 делфю не трогал, забыл всё напрочь.


 
Dib@zol ©   (2007-07-06 17:20) [6]

Странно... Мож попробуешь так:

for i:=1 to 100 do // границы проверки выбирай сам
 SendDlgItemMessage(HWin, i, WM_DESTROY, 0, 0);

и запускай в режиме отладки. На каком проходе цикла метка удалится - тот и идентификатор. Как видно, он явно не 3.

Или другой вариант. Ты как находишь хендл диалога-родителя? Засвети код. Очвозможно что ты там накосячил.


 
clickmaker ©   (2007-07-06 17:35) [7]


>  [2] Денис178   (27.06.07 17:35)
> Благодарю! Получилось
>
>  [3] Денис178   (05.07.07 21:10)
> Нет, не получилось..

хм... то есть все-таки один раз получилось?
сам контрол-то хоть создается?


 
Денис178   (2007-07-06 18:20) [8]

Не то чтобы получилось, просто вспомнил что когда то пользовался этим, но забыл что это диалоговое окно, а тут немного по другому. контрол создаётся с тем текстом который описал в ресурсе. а вот менять текст не позволяет. Может можно как нибудь в диалоговом окне просто пройтись по всем контролам, найти нужный лэйбл, и обычным способом поменять заголовок? Или может как то можно продиагностировать почему эта фнукция не сработала?


 
Однокамушкин   (2007-07-07 09:11) [9]


> Денис178   (06.07.07 18:20) [8]
> Или может как то можно продиагностировать почему эта фнукция
> не сработала?

Анализировать возвращаемый результат, вызывать GetLastError...


 
Денис178   (2007-07-07 19:14) [10]

> Dib@zol
SendDlgItemMessage(HWin, i, WM_DESTROY, 0, 0); вот это не убило мою метку, что очень странно.. и вообще ничего убило. там в ресурсе ещё кнопка есть

> Ты как находишь хендл диалога-родителя?
ну вызывается же оконная функция DlgProc в которой hWin как я понимаю и есть хендл родителя. вот код:


function DlgProc(hWin, uMsg, wParam, lParam: Integer): Integer; stdcall;
var
 Cntrl:hWnd;
 i:integer;
 s:pchar;
begin
Result := 0;
 case uMsg of
  WM_INITDIALOG:
   Begin
    SendMessage(hWin, WM_SETICON, ICON_BIG, LoadIcon(hInstance, "MAINICON"));
   end;
  WM_COMMAND:
   begin
    case LoWord(wParam) of
     1: EndDialog(hWin, 0);
     2: begin
          SetDlgItemText(hWin, 4, "aaa");

          FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM,
               nil, getlasterror, 0, @s, 0, nil);

          ShowMessage(s);

        end;

   end;
 end;
  WM_DESTROY, WM_CLOSE: EndDialog(hWin, 0);
end;
end;

begin
{$R shell_new.res}
DialogBox(hInstance, "MAIN_WINDOW", 0, @DlgProc);
end.


а теперь самое интересное, странное, но работающее..



function chlabel(hWin:integer):integer;
begin
SetDlgItemText(hWin, 4, "aaa");
end;

function DlgProc(hWin, uMsg, wParam, lParam: Integer): Integer; stdcall;
var
 Cntrl:hWnd;
 i:integer;
 s:pchar;
begin
Result := 0;
 case uMsg of
  WM_INITDIALOG:
   Begin
    SendMessage(hWin, WM_SETICON, ICON_BIG, LoadIcon(hInstance, "MAINICON"));
   end;
  WM_COMMAND:
   begin
    case LoWord(wParam) of
     1: EndDialog(hWin, 0);
     2: chlabel(hWin);
   end;
 end;
  WM_DESTROY, WM_CLOSE: EndDialog(hWin, 0);
end;
end;

begin
{$R shell_new.res}
DialogBox(hInstance, "MAIN_WINDOW", 0, @DlgProc);
end.


этот код меняет текст мекти, предидущий НЕТ, почему так происходит мыслей тоже нет..


 
Денис178   (2007-07-07 19:15) [11]

остался спортивный интерес:)

ПОЧЕМУ ТАК ПРОИСХОДИТ??


 
Dib@zol ©   (2007-07-07 20:43) [12]

Хм. Возможно дело в компиляторе. У меня например, если в обработчике какого-то сообщения реализован цикл, то прога (даже если это сообщение ей нифжисть не слали) просто виснет намертво. Если же цикл выносится в отдельную процедуру, то всё идёт пучком. Как видно, это из той же оперы.


 
Денис178   (2007-07-07 23:35) [13]

мда.. загадочное явление



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2008.02.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.043 c
2-1201179793
Darvin
2008-01-24 16:03
2008.02.17
Как сделать окно fsStayOnTop только для своего приложения


6-1179914860
Novic
2007-05-23 14:07
2008.02.17
Вызов метода на сервере приложений


1-1194517113
DDDeN
2007-11-08 13:18
2008.02.17
Реализация механизма расписания


15-1200502181
rts111
2008-01-16 19:49
2008.02.17
Подскажите, где найти описание формата *.doc?


2-1201169873
Я
2008-01-24 13:17
2008.02.17
Как проверить выводится ли на экран окно Hint





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