Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Get listview column index 
:(
    Опции темы
GRU
Дата 24.8.2004, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 20.7.2004

Репутация: 1
Всего: 1



privet!

ListView.Style := vsRaport
scroll'i vertikalnyie i horizontalnyie, koordinaty colum'na mieniajutsa

kak Event'e DblClick uznat index column'a i v celle narisovat panel

spasibo
PM MAIL   Вверх
GRU
Дата 24.8.2004, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 20.7.2004

Репутация: 1
Всего: 1



Extended GetItemAt

This method (GetItemAt) only provides the information about which ListItem (if any) is located at the specified coordinates passed as parameters, but only works with the first column of the TListView. The rest are ignored. If we needed to know if the user clicked on an element in another column, we can declare a new method in a derived class:

uses ComCtrls;

type
TListViewX = class(TListView)
public
function GetItemAtX(X, Y: integer; var Col: integer): TListItem;
end;

implementation

function TListViewX.GetItemAtX(X, Y: integer;
var Col: integer): TListItem;
var
i, n, RelativeX, ColStartX: Integer;
ListItem: TlistItem;
begin
Result := GetItemAt(X, Y);
if (Result = nil)
then begin
Col := 0; // First column
end
else if (ViewStyle = vsReport) and (TopItem <> nil)
then begin
// First, let's try to find the row
ListItem := GetItemAt(TopItem.Position.X, Y);
if (ListItem <> nil)
then begin
// Now let's try to find the Column
RelativeX := X-ListItem.Position.X-BorderWidth;
ColStartX := Columns[0].Width;
n := Columns.Count - 1;
for i := 1 to n do begin
if (RelativeX < ColStartX) then break;
if (RelativeX <= ColStartX + StringWidth(ListItem.SubItems[i-1]))
then begin
Result := ListItem;
Col := i;
break;
end;//if
Inc(ColStartX, Columns[i].Width);
end;//for
end;//if
end;//if
end;
Casting to the new class

We don't need to intall this new component and register it in the components palette as we explained in another article. Instead, any time we want to access this method, we can just cast the object (for example ListView1) to our new class. For example in a MouseDown event:

procedure TForm1.ListView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
col: integer;
li: TListItem;
begin
li := TListViewX(ListView1).GetItemAtX(x, y, col);
if (li <> nil then)
ShowMessage('Column #' + IntToStr(col));
end;

nashol vot takoj variant. no on ploxo rabotaet:
iesli padvynut horizontalnyi scroll ili cell listview'a pusta to nevazvrachaet indexa

Это сообщение отредактировал(а) GRU - 24.8.2004, 18:47
PM MAIL   Вверх
[3Df]Grey DeMonstr
Дата 25.8.2004, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.8.2004
Где: Москва

Репутация: 1
Всего: 1



A gde ty nashel svoistvo Style u TListView? Ili eto Delphi8 ???
PM MAIL ICQ   Вверх
GRU
Дата 25.8.2004, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 20.7.2004

Репутация: 1
Всего: 1



nu ashibka vyshla smile.gif

ViewStyle := vsReport;
PM MAIL   Вверх
[3Df]Grey DeMonstr
Дата 25.8.2004, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 21.8.2004
Где: Москва

Репутация: 1
Всего: 1



Vse GORAZDO proshe, vot kusok koda:
Код

var
 Form1: TForm1;
 GX:integer;

implementation

{$R *.dfm}

procedure TForm1.ListView1DblClick(Sender: TObject);
var i:integer;
   CurX:integer;
begin
i:=0;
CurX:=0;
while ListView1.Columns.Items[i].Width+CurX < GX do begin
 inc(i);
 CurX:=CurX+ListView1.Columns.Items[i].Width;
 end;
Label1.Caption:=IntToStr(i);
end;

procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
GX:=X-Listview1.Items.Item[0].Position.X;
end;


Resultat - na Labele smile.gif
PM MAIL ICQ   Вверх
GRU
Дата 25.8.2004, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 20.7.2004

Репутация: 1
Всего: 1



takaja papravka malenkaja i kod rabotaet ochen xorosho. sposibo. vyruchel smile.gif

Код
var
Form1: TForm1;
GX:integer;

implementation

{$R *.dfm}

procedure TForm1.ListView1DblClick(Sender: TObject);
var
  i: integer;
  CurX: integer;
begin
  i := 0;
  CurX := 0;
  while (ListView1.Columns.Items[i].Width + CurX < GX) do begin
     [b]CurX := CurX + ListView1.Columns.Items[i].Width; // zdes paminiat mestami :)
     inc(i);[/b]
  end;
  StaticText1.Caption:=IntToStr(i);
end;[code]

procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
  GX := X - Listview1.Items.Item[0].Position.X + 18;  // 18 eto CheckBoxes
end;


Resultat - na StaticText1 ;)

Это сообщение отредактировал(а) GRU - 26.8.2004, 00:13
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0703 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.