Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ПРоблема с Gettext совместно с своим Winproc [D2005, XP]


Страницы:   1 2

Квэнди ©   (2006-07-11 11:21:00) 

Здравствуйте, проблема в следущем:
procedure TМой компонент.MSLWndProc(var Message: TMessage);
var s: PAnsiChar;
begin
case Message.Msg of
WM_GETTEXT: begin
Message.Result:= CallWindowProc(MSLOldWndProc, Handle, Message.Msg, Message.WParam, Message.LParam);

Button.Caption := Copy(PChar(Message.LParam),1,12); //кнопка которой нужно назначить caption (win2000,xp(классическая))
exit;
end;

WM_MDIACTIVATE: begin
if HWND(Message.LParam)=Handle then <операция>
if HWND(Message.WParam)=Handle then <операция>
end;

WM_DESTROY: begin
if Assigned(FOnDestroy) then OnDestroy(Self, Handle);
Self.Free;
SetWindowLong(Handle, GWL_WNDPROC, Longint(MSLOldWndProc));
FreeObjectInstance(MSLInstanceWndProc);
end;

WM_SHOWWINDOW: begin
GetIconForm; //процедура по выковыреванию иконок

GetWindowText(Handle,s,20);
Button.Caption:=pchar(s);
end;
end;
Message.Result:= CallWindowProc(MSLOldWndProc, Handle, Message.Msg, Message.WParam, Message.LParam);
end;


GetWindowText - она берет caption который был установлен для конкретной формы в design-time.

1
пример:
Design-time - form1.caption:='Журнал'.
- form2.caption:='Справочник'.

2
Run-Time
procedure tmainform.button1click(sender: tobject);
var f: Tform1;
begin
f:=TFomr1.create(application);
f.caption:='Журнал'+inttostr(mdichilcount+1);
end;

procedure tmainform.button2click(sender: tobject);
var f: Tform2;
begin
f:=TFomr2.create(application);
f.caption:='Справочник'+inttostr(mdichilcount+1);
end;

Вывод:
GetWindowTet - возьмет заголовок 1,
а нужно 2


Сергей М.   (2006-07-14 11:34:00) [21]


> Квэнди ©   (14.07.06 11:23) [19]


Что тебе еще не понятно ?
Все уже тобой сделано - p указывает на строку в i байт, содержащую искомый текст


Квэнди   (2006-07-14 11:23:00) [22]

Неужели никто не сможет помочь ?


Квэнди   (2006-07-13 14:12:00) [23]


> var i: integer;
> p: PAnsiChar;
> begin
> GetMem(p,GetWindowTextLengthA(Handle));
> i:=GetWindowTextA(Handle,p,GetWindowTextLengthA(Handle));
>  //вот в этом месте мы и читаем result
> Button.Caption:=IntToStr(i);
> end;


I возвращает количество символов


Сергей М.   (2006-07-12 16:07:00) [24]


> Квэнди ©   (12.07.06 16:03) [16]


Русский язык понимаешь ?
GetWindowtext - функция.
Функция возвращает результат.
ГДЕв твоем коде анализ этого результата ?


Квэнди   (2006-07-12 16:03:00) [25]


> Сергей М. ©   (12.07.06 15:27) [15]

В debug и p пустая.


Сергей М.   (2006-07-12 15:27:00) [26]


> результат идентично тот же


ГДЕ ты проверяешь результат, возвращаемый ф-цией GetWindowtext ?


Квэнди   (2006-07-12 15:09:00) [27]


> Квэнди ©   (12.07.06 14:39) [8]
>
> Так результат идентично тот же (


Сергей М.   (2006-07-12 15:07:00) [28]


> Чтобы что- то проверять надо знать верно это или нет


Что бы убедиться , верно что-то или нет, надо это "что-то" проверить.
Ты проверил ? Работает ? Или в рассуждалки играть будем ?


Квэнди   (2006-07-12 15:04:00) [29]


> Сергей М. ©   (12.07.06 14:55) [11]

Чтобы что- то проверять надо знать верно это или нет...
var p: PAnsiChar;
GetMem(p,GetWindowTextLengthA(Handle));
GetWindowTextA(Handle,p,GetWindowTextLengthA(Handle));
Button.Caption:=p;

Это верно ?


Сергей М.   (2006-07-12 14:55:00) [30]


> Квэнди ©   (12.07.06 14:54) [10]
>
> Что имено проверять ?
> это верный код ? с ним должно работать ?


Этот код и проверяй)


Квэнди   (2006-07-12 14:54:00) [31]

Что имено проверять ?
это верный код ? с ним должно работать ?
var s: string;
p: PAnsiChar;
begin
case Message.Msg of
WM_SHOWWINDOW: begin
getmem(p,GetWindowTextLengthA(Handle));
GetWindowTextA(Handle,p,GetWindowTextLengthA(Handle));
s:=p;
Button.Caption:=s;
end;
end;
end;


Сергей М.   (2006-07-12 14:39:00) [32]

Проверяй


Квэнди   (2006-07-12 14:39:00) [33]

Так результат идентично тот же (


Квэнди   (2006-07-12 14:10:00) [34]

var s: string;
p: PAnsiChar;
begin
case Message.Msg of
WM_SHOWWINDOW: begin
getmem(p,GetWindowTextLengthA(Handle));
GetWindowTextA(Handle,p,GetWindowTextLengthA(Handle));
s:=p;
Button.Caption:=s;
end;
end;
end;
Верно ?


Сергей М.   (2006-07-12 14:06:00) [35]


> Квэнди ©   (12.07.06 13:58) [5]


GetMem()


Квэнди   (2006-07-12 13:58:00) [36]


> Сергей М. ©   (12.07.06 12:15) [4]

если честно немного не понял каким образом я могу выделить память под p ?


Сергей М.   (2006-07-12 12:15:00) [37]


> Квэнди ©   (12.07.06 12:11) [3]


Про Пушкина вник ?
Задумайся над содержимым переменной p передвызовом GetWindowTextA() ..


Квэнди   (2006-07-12 12:11:00) [38]

var s: string;
p: PAnsiChar;
begin
case Message.Msg of
WM_SHOWWINDOW: begin
GetWindowTextA(Handle,p,GetWindowTextLengthA(Handle));
s:=p;
Button.Caption:=s;
end;
end;
end;

Длинна текста определяется, а самого текста нет ..


Leonid Troyanovsky   (2006-07-11 18:39:00) [39]


> Квэнди ©   (11.07.06 17:49) [1]

> Подскажите пожалуйста


Память для s будет Пушкин выделять?

И, вообще, для снабжения контрола своей
оконной процедурой есть procedure WndProc(..); override

--
Regards, LVT.


Квэнди   (2006-07-11 17:49:00) [40]

Подскажите пожалуйста


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо