Конференция "Компоненты" » Мышиный Перехват в дизайн-тайм
 
  • DimaBr (28.07.06 08:36) [20]

    > Предаставляй TStringGrid, у которого есть шапка, слева ничё
    > нету.

    Это TStringGrid и есть, и в дизайнере колонки двигаются.
  • DevilDevil © (28.07.06 12:04) [21]
    ну это понятно. Так как в дизайн тайм обрабатывать?
  • DimaBr (28.07.06 13:16) [22]
    Находим подходящий компонент, с походими действиями и смотрим реализацию. Например TCustomGrid
    Смотрим
    procedure CMDesignHitTest(var Msg: TCMDesignHitTest); message CM_DESIGNHITTEST;
    procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
  • DevilDevil © (13.09.06 17:31) [23]
    Вот вернулся к давнишней проблеме... воз и ныне там...

    Никак я не найду константу, которая "говорит" моему компоненту: "Отлавливай и обрабатывай мышиные сообщения так же, как отлавливаешь в рантайм!"

    Смотрел даже исходники TCustomGrid... Чё то не очень...

    Ну так что за константа?

    P.S. Заметил, чтобы компонент стандартно обрабатывался в дизайн тайм, достаточно присвоить константу HTCLIENT
  • jack128 © (14.09.06 03:35) [24]
    DevilDevil ©   (13.09.06 17:31) [23]
    Смотрел даже исходники TCustomGrid... Чё то не очень

    обратись к окулисту.  Тебе русским языком сказали:
    DimaBr   (28.07.06 13:16) [22]
    Находим подходящий компонент, с походими действиями и смотрим реализацию. Например TCustomGrid
    Смотрим
    procedure CMDesignHitTest(var Msg: TCMDesignHitTest); message CM_DESIGNHITTEST;
  • DimaBr (14.09.06 09:33) [25]
    procedure TMyComponent.CMDesignHitTest(var Msg: TCMDesignHitTest);
    begin
     Msg.Result := 1; // обрабатывать действия в дизайнере
    end;



    для грида написано вот так, то есть реагировать только тогда, когда фунцкия Sizing возвращает TRUE
    procedure TCustomGrid.CMDesignHitTest(var Msg: TCMDesignHitTest);
    begin
     Msg.Result := Longint(BOOL(Sizing(Msg.Pos.X, Msg.Pos.Y)));
    end;

  • DevilDevil © (14.09.06 14:59) [26]
    DimaBr   (14.09.06 09:33) [25]
    procedure TMyComponent.CMDesignHitTest(var Msg: TCMDesignHitTest);
    begin
    Msg.Result := 1; // обрабатывать действия в дизайнере
    end;



      Error:

      Cannot focus a disabled or invisible window.
                           _____
                          |  Ok  |
                           
  • DevilDevil © (14.09.06 15:01) [27]
    Эксперименты с перехватом WM_NCHITTEST желаемого результата не дали
  • DimaBr (14.09.06 16:15) [28]
    Ну так проверьте, может не здесь ошибка.
  • DevilDevil © (15.09.06 14:56) [29]
    > DimaBr   (14.09.06 16:15) [28]
    > Ну так проверьте, может не здесь ошибка.


    Что то я не очень понял. Где проверить?

    Если использовать предложенный Вами вариант, то при нажатии кнопки мыши над компонентом (когда компоненту даётся фокус) возникает вышеуказанная ошибка. В РанТайм всё естественно работает корректно.
  • DimaBr (15.09.06 15:29) [30]
    Предаставляй TStringGrid, у которого есть шапка, слева ничё нету.
    StringGrid.FixedCols := 0;

    Возьмите за основу CustomGrid и творите что хотите. Не можите самостоятельно реализовать движение колонок - скопируйте файл Grids в свою папочку, переименуйте, и выкидывайте потихоньку всё лишнее.
  • DevilDevil © (15.09.06 15:54) [31]
    > DimaBr   (15.09.06 15:29) [30]

    Работа над таблицей длится уже 2 месяца, отличия от стандартной существенны. Собственно и ушли от стандартов по этой причине. Есть некоторые ограничения по скорости и занимаемой оперативной памяти. К тому же всё, что написано, написано на Си. Переписывать всё на Delphi или ещё хуже переписывать с начала - естественно нецелесообразно. Поэтому я и задал на форуме элементарный вопрос, который почему то не получается решить уже 1.5 месяца

    В общем, если кто то уже сталкивался с подобной проблемой, буду рад помощи
  • Ketmar © (15.09.06 16:05) [32]
    мда... поколение младое... краткое содержание ветки: "вот в стандартном гриде работает. а у меня нет. читать не умею, потому исходник стандартного грида не предлагать!"

    ужос...
  • DevilDevil © (15.09.06 16:29) [33]
    Зануда! см [25] - [26]
  • Наиль © (18.09.06 10:23) [34]
    Глянь в Help'e
    TControlStyle
    = csDesignInteractive
    + csClickEvents
    Может оно?
  • DimaBr (21.09.06 09:26) [35]

    > DevilDevil ©

    Заглятите в почту.
  • DevilDevil © (21.09.06 15:34) [36]
    Во первых, я избавился от злостной ошибки при клике мышкой. По событию OnMouseDown происходил метод
    SetFocus

    , который я переопределил:

    if not(csDesigning in ComponentState) then inherited ;



    Во вторых, удалось реализовать нормальное изменение размеров столбцов. DimaBr, большое спасибо за пример!

    Сейчас размышляю, как реализовать сохранение этой ширины в *dfm файле
  • DimaBr (22.09.06 08:47) [37]

    > DevilDevil ©   (21.09.06 15:34) [36]

    А теперь внимательно прочтите [28]
  • Ketmar © (22.09.06 08:52) [38]
    >[37] DimaBr 22-Sep-XLI A.S., 08:47
    >А теперь внимательно прочтите [28]
    совершенно бессмысленно. адепты Ф. читают с трудом, и то только откровения кумира.
  • DimaBr (22.09.06 11:13) [39]

    > ейчас размышляю, как реализовать сохранение этой ширины
    > в *dfm файле

    Если ваши колонки элементы коллекции, то ширину в published и колекцию в published, иначе

    procedure DefineProperties( Filer: TFiler );override;
    procedure ReadMyProperty( Reader: TReader );
    procedure WriteMyProperty( Writer: TWriter );

 
Конференция "Компоненты" » Мышиный Перехват в дизайн-тайм
Есть новые Нет новых   [119024   +41][b:0][p:0.001]