Форум: "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.06 c