Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];

Вниз

Перехват ресайза колонок ListView   Найти похожие ветки 

 
Dmitriy___   (2007-03-24 22:25) [0]

Собственно, сабж. Как реализовать? Не могу ничего придумать. Или я снова торможу? :)


 
Dmitriy___   (2007-03-25 20:18) [1]

Кто-нибудь!
В VCL было просто, как в KOL?


 
Vladimir Kladov   (2007-03-25 20:33) [2]

Интересно, а как в VCL?


 
Dmitriy___   (2007-03-25 21:08) [3]

Понял, что тут непонятного... Закрываю тему


 
Vladimir Kladov   (2007-03-25 21:38) [4]

Значит, никак? :)
На самом деле, при желании - ловится. Добраться до header control"а, прицепить к нему свой перехват WM_NOTIFY, отловить HDN_CHANGING/CHANGED, и послать себе (или обработать тут же). Другое дело, надо ли оно вообще. VCL же не дураки делали. Если они не сделали, и с них за 10 лет до сих пор народ не стребовал, значит - не надо. Это что-то из той же области, что и импорт переменной из dll. В Delphi - нету. А надо? Я вообще о существовании такой возможности узнал с полгода как. И обошелся. Потму как мне - не надо. И практически ни одному пользователю Delphi не оказалось надо. Иначе было бы давно уже.


 
Dmitriy___   (2007-03-25 22:28) [5]


> Значит, никак? :)

Да нет, не в этом дело, просто я подумал, что народу не интересно отвечать на столь тупые вопросы. Ловиться-то ловиться. Не стандартными обработчиками, конечно, а путём перехвата WM_NOTIFY. Есть примеры для VCL, вот я и говорю, что в VCL это просто. И, разумеется, всё получалось. А вот как это прикрутить к KOL, я не знал...
Ну и способы для VCL, известные мне, не включают в себя какие-либо манипуляции с HDN_CHANGING/CHANGED, так что за подсказку - спасибо. Это всё, что мне было нужно.

Да, и по ходу дела к вам, Владимир, вопрос. Я что-то не могу добраться до св-ва Hint, скажем, той же кнопки. Хотелось бы поменять его в рантайм - а вот как? Насколько я понял, такого свойства просто нет?


 
kichrot ©   (2007-03-26 11:23) [6]

В VCL это решается примерно таким образом:

private
  FListViewOldWndProc: TWndMethod;
  procedure ListViewNewWndProc(var Msg: TMessage);
end;

{....}

implementation

uses
  CommCtrl;

procedure TForm1.FormCreate(Sender: TObject);
begin
 FListViewOldWndProc := ListView1.WindowProc;
 Listview1.WindowProc := ListViewNewWndProc;
end;

procedure TForm1.ListViewNewWndProc(var Msg: TMessage);
var
  hdn: ^THDNotify;
begin
  if Msg.Msg = WM_NOTIFY then
  begin
    hdn := Pointer(Msg.lParam);
    if (hdn.hdr.code = HDN_BeginTrackW) or (hdn.hdr.code = HDN_BeginTrackA) then
      Msg.Result := 1
    else
      FListViewOldWndProc(Msg);
  end
 else
     FListViewOldWndProc(Msg);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 ListView1.WindowProc := FlistViewOldWndProc;
  FListViewOldWndProc  := nil;
end;

Вполне возможно адаптировать этот пример на KOL.


 
Dmitriy___   (2007-03-26 11:52) [7]

Вот-вот, что-то вроде этого. Единственная загвоздка в том, что TWndMethod не существует в KOL, что и повергло меня в ступор


 
MTsv DN ©   (2007-03-26 15:06) [8]

> Вот-вот, что-то вроде этого. Единственная загвоздка в том,
>  что TWndMethod не существует в KOL, что и повергло меня
> в ступор

В KOL все гораздо проще. Не знаю какая у Вас задача, а мне надо было блокировать изменение колонок:
function TForm1.ListView1Message(var Msg: tagMSG;
 var Rslt: Integer): Boolean;
const
 HDN_FIRST                = 0-300;
 HDN_LAST                 = 0-399;
 HDN_BEGINTRACKA     = HDN_FIRST-6;
 HDN_BEGINTRACKW     = HDN_FIRST-26;
var
NMHdr: PNMHdr;
begin
Result := false;
if (Msg.message = WM_NOTIFY) then
 begin
  NMHdr := Pointer( Msg.lParam );
  case NMHdr^.code of
   HDN_BEGINTRACKA, HDN_BEGINTRACKW:
    begin
     ReleaseCapture;
     exit;
    end;
  end;
 end;


И все...


 
D[u]fa ©   (2007-03-26 18:07) [9]

Посмотрев оба кода - делаю вывод что одинаково...


 
Dmitriy___   (2007-03-26 22:21) [10]


> Не знаю какая у Вас задача, а мне надо было блокировать
> изменение колонок:

Ну и у меня тоже. За код спасибо большое, работает отлично.


 
kichrot ©   (2007-03-27 10:19) [11]

Хотя Кладов и говорит, что если программисты Borland не реализовали запрет  на изменение пользователем ширины колонки, то это ни кому не надо. Но они много чего не реализовали. В том числе и библиотеку подобную KOL.
Если посмотреть темы данного форума, то подобный вопрос возникает периодически.
Если в VCL он решается достаточно просто, перекрытием методов, то в KOL это не срабатывает.
Предлагаю один из способов решения данного вопроса.
Правда в нем есть огрехи. Это только наметки, но вполне работоспособные.
Естественно способ требует улучшения и возможно подход  не совсем правильный, но я только учусь.

var
 Form1 {$IFDEF KOL_MCK} : PForm1 {$ELSE} : TForm1 {$ENDIF} ;

 MyPoint: TPoint;
 

 {$IFDEF KOL_MCK}
 procedure NewForm1( var Result: PForm1; AParent: PControl );
 {$ENDIF}

implementation

{$IFNDEF KOL_MCK} {$R *.DFM} {$ENDIF}

{$IFDEF KOL_MCK}
{$I Unit1_1.inc}
{$ENDIF}

//==============================================================================
function TForm1.KOLApplet1Message(var Msg: tagMSG;
 var Rslt: Integer): Boolean;
var
  hdn: ^TNMHdr;

const
// константы из CommCtrl
 HDN_FIRST                = 0-300;
 
 HDN_BEGINTRACKA          = HDN_FIRST-6;
 HDN_TRACKA               = HDN_FIRST-8;

 HDN_BEGINTRACKW          = HDN_FIRST-26;
 HDN_TRACKW               = HDN_FIRST-28;
 

begin
if Msg.message = WM_NOTIFY then
  begin
    hdn :=    Pointer(Msg.lParam);

    if (hdn.code = HDN_BeginTrackW) or (hdn.code = HDN_BeginTrackA) then
    begin
        GetCursorPos(MyPoint);
    end;
    if (hdn.code = HDN_TRACKW) or (hdn.code = HDN_TRACKA) then
    begin
       SetCursorPos(MyPoint.X, MyPoint.Y );
    end;

  end;

end;


end.


 
MTsv DN ©   (2007-03-27 11:29) [12]

> Хотя Кладов и говорит, что если программисты Borland не
> реализовали запрет  на изменение пользователем ширины колонки,
>  то это ни кому не надо. Но они много чего не реализовали.
>  В том числе и библиотеку подобную KOL.
> Если посмотреть темы данного форума, то подобный вопрос
> возникает периодически.
> Если в VCL он решается достаточно просто, перекрытием методов,
>  то в KOL это не срабатывает.
> Предлагаю один из способов решения данного вопроса.
> Правда в нем есть огрехи. Это только наметки, но вполне
> работоспособные.
> Естественно способ требует улучшения и возможно подход  
> не совсем правильный, но я только учусь.

Если честно, ни фига не понял о чем тут написано :(

Вроде уже разобрались с вопросом-то... Чего еще-то надо?


 
Vladimir Kladov   (2007-03-27 20:20) [13]

Перекрытием - это как раз ни фига не просто. Ну вот, простой пример. Есть форма. На ней куча контролов. В дизайн-тайме все настроено. Допустим, в некоторый момент исходя из жизненно необходимых требований задачи возникает потребность "перекрыть" обработку сообщения некоторого контрола. Например, пусть это будет панель, или PageControl, на котором еще до фига других контролов. Ваши действия? (Достаточно ответа "понял разницу").


 
kichrot ©   (2007-03-28 10:47) [14]


> Перекрытием - это как раз ни фига не просто. Ну вот, простой
> пример. Есть форма. На ней куча контролов. В дизайн-тайме
> все настроено. Допустим, в некоторый момент исходя из жизненно
> необходимых требований задачи возникает потребность "перекрыть"
> обработку сообщения некоторого контрола. Например, пусть
> это будет панель, или PageControl, на котором еще до фига
> других контролов. Ваши действия? (Достаточно ответа "понял
> разницу").
>


Спасибо все понятно.


 
имя   (2007-08-08 22:38) [15]

Удалено модератором


 
имя   (2007-12-25 02:43) [16]

Удалено модератором


 
имя   (2007-12-25 02:43) [17]

Удалено модератором


 
имя   (2008-01-09 23:41) [18]

Удалено модератором


 
=BuckLr= ©   (2008-01-09 23:43) [19]


> rio

Гыыы! Хорошо пошутил. Главное, рекламу сделал



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2009.04.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.053 c
2-1234955716
b@v
2009-02-18 14:15
2009.04.19
Как узнать имя каталога


15-1235108630
RDen
2009-02-20 08:43
2009.04.19
Вопрос к АП (и не только) - insufficient memory


2-1236069135
L-e-v-original
2009-03-03 11:32
2009.04.19
Гиперссылка в Static Text


4-1208185369
тимохов
2008-04-14 19:02
2009.04.19
Как получить унифицированное имя файла?


2-1235740340
xaero93
2009-02-27 16:12
2009.04.19
Помогите разобраться





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский