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

Вниз

Измение текста 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 вся ветка

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

Наверх




Память: 0.5 MB
Время: 0.022 c
15-1200487851
homm
2008-01-16 15:50
2008.02.17
Способы борьбы с накруткой интернет-голсования


2-1201103401
smartleds
2008-01-23 18:50
2008.02.17
Народ , подскажите как мне Track Bar правильно на форме разместит


1-1188308666
readline();
2007-08-28 17:44
2008.02.17
Unicode, UTF8


15-1200597998
ProgRAMmer Dimonych
2008-01-17 22:26
2008.02.17
К вопросу об учителях и системе образования


15-1200296233
Stilet
2008-01-14 10:37
2008.02.17
Как в VirtualBox настроить виртуальную сеть