Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  135

•  TDictionary Custom Sort  3 315

•  Fast Watermark Sources  3 065

•  3D Designer  4 824

•  Sik Screen Capture  3 320

•  Patch Maker  3 535

•  Айболит (remote control)  3 637

•  ListBox Drag & Drop  2 996

•  Доска для игры Реверси  81 554

•  Графические эффекты  3 927

•  Рисование по маске  3 231

•  Перетаскивание изображений  2 613

•  Canvas Drawing  2 735

•  Рисование Луны  2 561

•  Поворот изображения  2 166

•  Рисование стержней  2 161

•  Paint on Shape  1 564

•  Генератор кроссвордов  2 226

•  Головоломка Paletto  1 764

•  Теорема Монжа об окружностях  2 214

•  Пазл Numbrix  1 682

•  Заборы и коммивояжеры  2 052

•  Игра HIP  1 279

•  Игра Go (Го)  1 224

•  Симулятор лифта  1 471

•  Программа укладки плитки  1 214

•  Генератор лабиринта  1 542

•  Проверка числового ввода  1 352

•  HEX View  1 490

•  Физический маятник  1 355

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Перехват изменения размера колонки в TListView



Разговоp двух новых pусских:
- Я пентиум купил 400 герц!!!
- А что такое 400 геpц?
- ???... скоpость вpащения вентилятоpа!!!


{ 
  Question: 
  How do I capture a column resize event in TListView, the OnResize 
  only works when the ListView is changed? 

  Answer: 
  The event can be added with a bit of work. See the custom TListview derivative 
  below. It has 3 new events: 
  OnColumnResize, OnBeginColumnResize, OnEndColumnResize 
} 

unit PBExListview; 

interface 

uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, 
  Dialogs, ComCtrls; 

type 
  TLVColumnResizeEvent = procedure(Sender: TCustomListview; 
    columnindex: Integer; 
    columnwidth: Integer) of object; 
  TPBExListview = class(TListview) 
  private 
    FBeginColumnResizeEvent: TLVColumnResizeEvent; 
    FEndColumnResizeEvent: TLVColumnResizeEvent; 
    FColumnResizeEvent: TLVColumnResizeEvent; 

  protected 
    procedure DoBeginColumnResize(columnindex, columnwidth: Integer); 
      virtual; 
    procedure DoEndColumnResize(columnindex, columnwidth: Integer); 
      virtual; 
    procedure DoColumnResize(columnindex, columnwidth: Integer); 
      virtual; 
    procedure WMNotify(var Msg: TWMNotify); message WM_NOTIFY; 
    function FindColumnIndex(pHeader: pNMHdr): Integer; 
    function FindColumnWidth(pHeader: pNMHdr): Integer; 
    procedure CreateWnd; override; 
  published 
    property OnBeginColumnResize: TLVColumnResizeEvent 
      read FBeginColumnResizeEvent write FBeginColumnResizeEvent; 
    property OnEndColumnResize: TLVColumnResizeEvent 
      read FEndColumnResizeEvent write FEndColumnResizeEvent; 
    property OnColumnResize: TLVColumnResizeEvent 
      read FColumnResizeEvent write FColumnResizeEvent; 
  end; 

procedure Register; 

implementation 

uses CommCtrl; 

procedure Register; 
begin 
  RegisterComponents('PBGoodies', [TPBExListview]); 
end; 

procedure TPBExListview.DoBeginColumnResize(columnindex, columnwidth: Integer); 
begin 
  if Assigned(FBeginColumnResizeEvent) then 
    FBeginColumnResizeEvent(Self, columnindex, columnwidth); 
end; 

procedure TPBExListview.DoEndColumnResize(columnindex, columnwidth: Integer); 
begin 
  if Assigned(FEndColumnResizeEvent) then 
    FEndColumnResizeEvent(Self, columnindex, columnwidth); 
end; 

procedure TPBExListview.DoColumnResize(columnindex, columnwidth: Integer); 
begin 
  if Assigned(FColumnResizeEvent) then 
    FColumnResizeEvent(Self, columnindex, columnwidth); 
end; 

function TPBExListview.FindColumnIndex(pHeader: pNMHdr): Integer; 
var 
  hwndHeader: HWND; 
  iteminfo: THdItem; 
  ItemIndex: Integer; 
  buf: array [0..128] of Char; 
begin 
  Result := -1; 
  hwndHeader := pHeader^.hwndFrom; 
  ItemIndex := pHDNotify(pHeader)^.Item; 
  FillChar(iteminfo, SizeOf(iteminfo), 0); 
  iteminfo.Mask := HDI_TEXT; 
  iteminfo.pszText := buf; 
  iteminfo.cchTextMax := SizeOf(buf) - 1; 
  Header_GetItem(hwndHeader, ItemIndex, iteminfo); 
  if CompareStr(Columns[ItemIndex].Caption, iteminfo.pszText) = 0 then 
    Result := ItemIndex 
  else 
  begin 
    for ItemIndex := 0 to Columns.Count - 1 do 
      if CompareStr(Columns[ItemIndex].Caption, iteminfo.pszText) = 0 then 
      begin 
        Result := ItemIndex; 
        Break; 
      end; 
  end; 
end; 

procedure TPBExListview.WMNotify(var Msg: TWMNotify); 
begin 
  inherited; 
  case Msg.NMHdr^.code of 
    HDN_ENDTRACK: 
      DoEndColumnResize(FindColumnIndex(Msg.NMHdr), 
        FindColumnWidth(Msg.NMHdr)); 
    HDN_BEGINTRACK: 
      DoBeginColumnResize(FindColumnIndex(Msg.NMHdr), 
        FindColumnWidth(Msg.NMHdr)); 
    HDN_TRACK: 
      DoColumnResize(FindColumnIndex(Msg.NMHdr), 
        FindColumnWidth(Msg.NMHdr)); 
  end; 
end; 

procedure TPBExListview.CreateWnd; 
var 
  wnd: HWND; 
begin 
  inherited; 
  wnd := GetWindow(Handle, GW_CHILD); 
  SetWindowLong(wnd, GWL_STYLE, 
    GetWindowLong(wnd, GWL_STYLE) and not HDS_FULLDRAG); 
end; 

function TPBExListview.FindColumnWidth(pHeader: pNMHdr): Integer; 
begin 
  Result := -1; 
  if Assigned(PHDNotify(pHeader)^.pItem) and 
    ((PHDNotify(pHeader)^.pItem^.mask and HDI_WIDTH) <> 0) then 
    Result := PHDNotify(pHeader)^.pItem^.cxy; 
end; 

end.








Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте