На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Почему не отрабатывает WM_GETFONT?
    Ну вот так сработает:
    ExpandedWrap disabled
      class TMyCntrl : public TControl
      {
          public:
          TMyCntrl(TComponent *a, int) : TControl(a) {} // фикция
          long MyOffset() // смещение, где FFont;
          {
              char *ono = (char*)this->Font;
              char *fini = &((char*)this)[sizeof(TControl)-2*sizeof(TFont*)];
              for( int t=0; t<sizeof(TFont*); t++)
              for( TFont **f=(TFont**)(t+(char*)this); f<fini; f++)
                  if( *f==ono ) return (long)f - (long)this; // поиск адреса
              return 0; // не нашли
          }
      };
       
      void MyProc(TControl *AControl)
      {
          TMyCntrl *a = new TMyCntrl(AControl,0);
          long o = a->MyOffset(); // смещение, где FFont;
          if( !o ) return;
          TFont *f = *(TFont **)&(((char*)AControl)[o]);
          ShowMessage(f->Name);
      }
       
      void __fastcall TForm1::Button1Click(TObject *Sender)
      {
          MyProc(this);
          MyProc(Button1);
          MyProc(Panel1);
          Caption = this->Font->Name + Panel1->Font->Name + Button1->Font->Name;
          ...
    Но за такое следовало бы сразу руки отрывать и никогда не делать так более... :'( :oops:
    П.С. да и надёжность низкая, и куча других недостатков.
      Да и вообще это C++Builder :) , так что руки отрывать надо однозначно :D
      Кто рано встает, тому целый день спать хочется
        Цитата Krid @
        не сработает :no:

        Это ты про THackControl? Почему не сработает?
        Должно работать для всех контролов и форм, наследующих стандартное хранение\изменение свойств Font и ParentFont от TControl.
          Цитата leo @
          Это ты про THackControl? Почему не сработает?

          WM_GETFONT всё равно ноль возвращает (не смотря на Form1.ParentFont)
          Кто рано встает, тому целый день спать хочется
            Цитата Krid @
            WM_GETFONT всё равно ноль возвращает (не смотря на Form1.ParentFont)

            Причем тут WM_GETFONT?
            MBo же привел ссылки, да и в мсдн черным по белому сказано, что WM_GETFONT работает для контролов (читай - стандартных виндовых), а не для любых окон. Для форм\диалогов и самопальных контролов нужно самому задавать обработчик сообщения WM_GETFONT. Но в VCL этого не сделано, т.к. для любого наследника TControl можно получить всю инфу о шрифте проще - через св-во Font. Вот THackControl и обеспечивает доступ к Font для любого наследника TControl. А если нужно добраться до этого св-ва через дескриптор окна, то для VCL-окон можно использовать функцию FindControl
            1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script Execution time: 0,0776 ]   [ 15 queries used ]   [ Generated: 20.09.17, 04:03 GMT ]