Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.01.2016, 00:26
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию ListView. Двойное выполнение SelectItem

Такая вот проблемка. есть два компонента listview. первый работает правильно, хотя в прошлой программке точно так же глючил.
Вобщем при выделении строки должно открываться окно с данными. Оно открывается, но после закрытия открывается еще раз. Подскажите плиз в чем проблемка
Ответить с цитированием
  #2  
Старый 09.01.2016, 00:28
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Код:
procedure TForm4.ListView2SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
Form5.turnir.caption:= Item.Caption;
Form4.Label1.Caption:= Item.Caption;
Form5.Show;
Form4.Hide;
end;

Код:
procedure TForm4.FormCreate(Sender: TObject);
begin
DoubleBuffered:= true;
logo.Picture.LoadFromFile('images\logo.jpg');



end;

Код:
procedure TForm4.FormPaint(Sender: TObject);
begin

//***Информация по турниру******************
form4.sql1.Connection:= form1.zconnection1;
sql1.SQL.Clear;
id:= StrToInt(''+Form2.turnir.caption);
turnir_id.Caption:= IntToStr(id);
sql1.SQL.Add('SELECT * FROM `tournaments` WHERE `id` = "'+turnir_id.caption+'"');
sql1.Active:= true;
data1:= sql1.fieldbyname('from_data').AsDateTime;
data2:= sql1.fieldbyname('to_data').AsDateTime;
if sql1.FieldByName('registered').Asstring = 'yes' then listview2.Visible:= true
  else listview2.Visible:= false;

date_from.Caption:= datetimetostr(data1);
date_to.Caption:= datetimetostr(data2);
//***Выборка событий***********************
sql2.Connection:= form1.ZConnection1;
sql2.SQL.Clear;
sql2.SQL.Add('SELECT * FROM `bets` WHERE `status` = "no" ');
sql2.Active:= true;

//***Вывод событий в таблицу****************
ListView2.Items.Clear;
sql2.First;
ListView2.Items.BeginUpdate();


while not sql2.Eof do
  begin
    if (sql2.FieldByName('data').AsDateTime > data1) AND (sql2.FieldByName('data').AsDateTime < data2)  then
      begin
     listitem:= ListView2.Items.Add;
     listitem.Caption:= sql2.fieldbyname('id').AsString;
     listitem.SubItems.add(sql2.fieldbyname('data').asstring);
     listitem.SubItems.Add(sql2.fieldbyname('liga').AsString);
     listitem.SubItems.Add(sql2.fieldbyname('team1').AsString + ' - ' +sql2.fieldbyname('team2').AsString);

       end;
      sql2.Next();

  end;
ListView2.Items.EndUpdate();

//REG BUTTON*********************
if (sql1.FieldByName('registered').AsString = 'yes')
  then
    begin
    form4.btn_reg.Visible:= false;

    //time := Now;
    //label1.Caption:= datetimeToStr(time);
    // if (sql1.FieldByName('data').AsDateTime > time) then form4.btn_unreg.Visible:= true;
    end
  else
  form4.btn_reg.Visible:= true;




end;
Ответить с цитированием
  #3  
Старый 09.01.2016, 01:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Скорее всего, потому что данный обработчик, а именно
Код:
procedure TForm4.ListView2SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
вызывается 2 раза. Один раз для итема который выделяется, а второй раз - для итема, который теряет выделение. При этом, если использовать ListView1.Selected, то оба раза ты получишь именно выделенный итем.
Ответить с цитированием
  #4  
Старый 09.01.2016, 01:53
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

всмысле что изменить? расскажите пожалуйста подробнее
Ответить с цитированием
  #5  
Старый 09.01.2016, 10:29
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
procedure TForm1.ListView1SelectItem(Sender: TObject; Item: TListItem;
  Selected: Boolean);
begin
  if Selected then
  begin
    (* do it *)
  end;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
chellas88 (09.01.2016)
  #6  
Старый 09.01.2016, 13:10
chellas88 chellas88 вне форума
Прохожий
 
Регистрация: 09.01.2016
Сообщения: 46
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

все так просто) спасибо большое
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:04.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter