![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ПРоблема с Gettext совместно с своим Winproc [D2005, XP]
Квэнди © (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]Подскажите пожалуйста