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


Phoroon~   (2006-07-14 16:31:00) [1]


>  И бывают задачи, которые можнорешить только
> одним вариантом (который больше всего подходит).


Правильнее будет сказать: “нужно”.


Сергей М.   (2006-07-14 16:28:00) [2]


> Phoroon~ ©   (14.07.06 16:25) [38]


Это радует.


Phoroon~   (2006-07-14 16:25:00) [3]


> Ты, видать, тоже с дуба упал.

Не откуда я не падал.

ИМХО
Разных задач, огромное количество. И бывают задачи, которые можно решить только
одним вариантом (который больше всего подходит).


Сергей М.   (2006-07-14 16:10:00) [4]


> Phoroon~ ©   (14.07.06 15:57) [33]


Ты, видать, тоже с дуба упал.
ВАП - штука серьезная)


sniknik   (2006-07-14 16:08:00) [5]

> Код- то работает, но только не в MDI
ну вот, теперь оказывается MDI виноват %-(... не придумывай, проверь (или поверь) работает, иши глюки в своемкоде.


Alien1769   (2006-07-14 16:05:00) [6]


> Phoroon~ ©   (14.07.06 15:57) [33]
>
> > Ты что, не в состоянии получить текст СВОЕГО окна средствами
>
> > VCL ?
>
> Ты чего привязался до человека, если выбран этот метод,
> значит нельзя VCL использовать.

Может уважаемый Phoroon~ © поможет начинающему.


Квэнди   (2006-07-14 16:02:00) [7]


> sniknik ©   (14.07.06 15:36) [31]

Код- то работает, но только не в MDI


Phoroon~   (2006-07-14 15:57:00) [8]


> Ты что, не в состоянии получить текст СВОЕГО окна средствами
> VCL ?

Ты чего привязался до человека, если выбран этот метод, значит нельзя VCL использовать.


sniknik   (2006-07-14 15:36:00) [9]

> а не работает, вроде я как раз это и спрашивал
работает, т.что не про это... надо бы спросить почему это не работает в "TМой компонент", может тотому что у него просто нет caption-а? потому и "Но p пустой" (или handle невалидный, не того контрола...)

проверь (сам бы должен по идее), на главной форме ..

 TForm1 = class(TForm)
 ...
 protected
   procedure WndProc(var Mes: TMessage); override;
 ...
 end;

procedure TForm1.WndProc(var Mes: TMessage);
var
 s: string;
 len: integer;
begin
 case Mes.Msg of
   WM_SHOWWINDOW:
     begin
       len:= GetWindowTextLengthA(Handle);
       SetLength(s, len);
       GetWindowTextA(Handle, PChar(s), len+1);
       Label1.Caption:=s;
     end;
 end;
 inherited WndProc(Mes);
end;


Label1.Caption должен скопироваться из заголовка главной формы.  
работает?
теперь смотри в другое место (значение хендла, откуда его береш, длинну возвращаемую GetWindowTextLengthA, возвращаемый номер ошибки из GetWindowTextA, т.д. х.з. что еще там у тебя может быть)


Сергей М.   (2006-07-14 15:36:00) [10]

А нахрена эта ф-ция нужна в своем приложении ?)

Ты что, не в состоянии получить текст СВОЕГО окна средствами VCL ?


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


> > Как ни странно функцию, о которой идет речь.

А я что говорю ? речь как раз о том, что она должна работать в своем приложении, а не работает, вроде я как раз это и спрашивал


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


> Как ни странно функцию, о которой идет речь.


Ты с дуба упал ?)

ГДЕ в процитированном фрагменте справки упомянуто о том, что ты не вправе использовать эту ф-цию в своем приложении ?!


Сергей М.   (2006-07-14 15:08:00) [13]


> Квэнди


Открывай справку по WM_GETTEXT и читай до полного просветления - это альтарнатива, обходящая ограничение для GetWindowText


Квэнди   (2006-07-14 15:08:00) [14]


> Сергей М. ©   (14.07.06 15:06) [26]

Как ни странно функцию, о которой идет речь.


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


> я использую в своем приложении


Что используешь-то ?)


Квэнди   (2006-07-14 15:05:00) [16]

This function cannot retrieve the text of an edit control in another application.
А я использую в своем приложении. Что еще выяснять ?


Сергей М.   (2006-07-14 15:03:00) [17]

Вряд ли или не вряд ли - выясняй детально.

А пока все это пальцем на воде писано.


Квэнди   (2006-07-14 14:59:00) [18]


> Сергей М. ©   (14.07.06 12:20) [22]


Я пытаюсь выдрать декст в одном mdi приложении. Точнее из форма mdi-child этого приложения, вряд ли эта особенность мешает.


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


> Квэнди ©   (14.07.06 11:44) [21]


Цитата из справки:

This function cannot retrieve the text of an edit control in another application.


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


> Сергей М. ©   (14.07.06 11:34) [20]

Но p пустой ... вот собственно в чем проблема, и что я оисывал в первом посте...


Страницы:   1 2

Наверх

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