Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2011, 11:46   #21
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Добавление итема
Код:
sListBox1.AddItem(firmn, TObject(Query10.RecNo));
вместо          
sListBox1.AddItem(firmn, nil);
Локализация записи при прорисовке
Код:
Query10.RecNo:=Integer(sListBox1.Items.Objects[Index]);
и из записи брать нужные значения
Сделал так, а результат тот же ..он тут
Код:
Query10.Open;
Query10.RecNo:=Integer(sListBox1.Items.Objects[Index]);
постоянно берет 1-ю запись при прорисовке

Цитата:
Сообщение от Аватар Посмотреть сообщение
Что мешало просто DBGrid использовать, показывая в одну строку информацию?
ну как что, то что мне нужна не одна строка, а N-ое число много строчных Item

Последний раз редактировалось {Shadowevil}; 14.12.2011 в 11:59.
{Shadowevil} вне форума Ответить с цитированием
Старый 14.12.2011, 12:01   #22
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Зачем Query10 открывать заново? Вы его открыли при заполнении итемов и не надо закрывать. Закройте по выходу из проги. А еще лучше покажите текст программы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.12.2011, 12:11   #23
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Зачем Query10 открывать заново? Вы его открыли при заполнении итемов и не надо закрывать. Закройте по выходу из проги. А еще лучше покажите текст программы
пробовал не закрывать, но эффект тот же, он Integer(sListBox1.Items.Objects[Index]) всегда берет =1 поэтому так и выходит (
Текст программы показать не получится, ибо слишком большой (~7000стр.)
Могу отдельно показать обработку событий
{Shadowevil} вне форума Ответить с цитированием
Старый 14.12.2011, 12:14   #24
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
всегда берет =1
Это только значит, что пишете туда единицу для всех итемов при AddItem или с Index что-то
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.12.2011, 12:39   #25
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию

Обработчик клика по TreeView после которого у меня и должны загрузиться итемы в листбокс:
Код:
procedure TfrmMain.TreeView3Click(Sender: TObject);
var
  rid, id, ind, i, h: integer;
begin
  sListBox1.Items.Clear;
  ind:=0;
  i:=1;
//  LBind:=0;
//  h:=0;
  NCity:=gisCbCity.Text;
  CITYID:=GetCityId(NCity);
  rid:=TreeView3.Selected.SelectedIndex;
  Query11.Close;
  Query11.SQL.Clear;
  Query11.SQl.add('SELECT * FROM firm_group WHERE cid=:cityid AND rid=:rid');
  Query11.ParamByName('cityid').value:=CITYID;
  Query11.ParamByName('rid').value:=rid;
  Query11.Open;
  While Not Query11.Eof do
   begin
    ZQuery1.Close;
    ZQuery1.SQL.Clear;
    ZQuery1.SQL.Add('SELECT * FROM address WHERE cid=:cid AND fid=:fid');
    ZQuery1.ParamByName('cid').Value:=CITYID;
    ZQuery1.ParamByName('fid').Value:=Query11.FieldByName('fid').AsInteger;
    ZQuery1.Open;
    While Not ZQuery1.Eof do
     begin
          firmn:=ZQuery1.FieldByName('sfn').AsString;
          ZQuery1.RecNo:=i;
      //    LBadr:=Query10.FieldByName('allinfo').AsString;
          sListBox1.AddItem(firmn, TObject(ZQuery1.RecNo));
      ZQuery1.Next;
     end;
//    ZQuery1.Close;
    Query11.Next;
//    sListBox1.Repaint;
   end;
  Query11.Close;

  sListBox1.Items.BeginUpdate;
  for i:=0 to sListBox1.Items.Count-1 do begin
    sListBox1.ItemIndex:=i;
    sListBox1Click(sListBox1);
  end;
  sListBox1.ItemIndex:=0;
  sListBox1.Items.EndUpdate;
end;
ZQuery1 вместо Query10 поменял

Обработчик DrawItem:
Код:
procedure TfrmMain.sListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  xColor: TColor;
  x, i: integer;
begin
  if sListBox1.Count=0 then Exit;

  ZQuery1.RecNo:=Integer(sListBox1.Items.Objects[Index]); //всегда 1 :(

  if (odSelected in State) and sListBox1.Focused then xColor:=clActiveCaption
  else if odSelected in State then xColor:=clBtnFace
  else xColor:=clWindow;
  sListBox1.Canvas.Brush.Color:=clWindow;
  sListBox1.Canvas.FillRect(Rect);

  if (odSelected in State) and Control.Focused then sListBox1.Canvas.Font.Color:=clInactiveCaption
  else sListBox1.Canvas.Font.Color:=clBlack;

  sListBox1.Canvas.Font.Size:=8;
  sListBox1.Canvas.Font.Style:=sListBox1.Canvas.Font.Style + [fsBold];
  x:=sListBox1.Canvas.Font.Size;
  sListBox1.Canvas.TextRect(Rect, Rect.Left+2,Rect.Top, sListBox1.Items.Strings[Index]);
  sListBox1.Hint:=sListBox1.Items.Strings[Index];
  sListBox1.ShowHint:=true;

  if (odSelected in State) and Control.Focused then sListBox1.Canvas.Font.Color:=clInactiveCaption
  else sListBox1.Canvas.Font.Color:=clGray;
  sListBox1.Canvas.Font.Size:=8;
  sListBox1.Canvas.Font.Style:=sListBox1.Canvas.Font.Style - [fsBold];
  sListBox1.Canvas.TextOut(Rect.Left+2, Rect.Top+x+6, '   '+ZQuery1.FieldByName('allinfo').AsString);
  sListBox1.Canvas.TextOut(Rect.Left+2, Rect.Top+x+22, '     '+'Телефон');
end;
может кто подскажет где косяк? извиняюсь что так загружаю своими вопросами

Последний раз редактировалось {Shadowevil}; 14.12.2011 в 12:41.
{Shadowevil} вне форума Ответить с цитированием
Старый 14.12.2011, 13:29   #26
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Сделайте один Query по запросу, из address добавте еще поля (если поля allinfo мало). И только с этим Query работайте, а с двумя слишком хитромудро
Код:
SELECT F.*,A.allinfo 
  FROM firm_group F
    LEFT JOIN address A ON A.fid=F.fid
  WHERE F.cid=:cityid AND F.rid=:rid
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.12.2011, 14:01   #27
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Сделайте один Query по запросу, из address добавте еще поля (если поля allinfo мало). И только с этим Query работайте, а с двумя слишком хитромудро
Код:
SELECT F.*,A.allinfo 
  FROM firm_group F
    LEFT JOIN address A ON A.fid=F.fid
  WHERE F.cid=:cityid AND F.rid=:rid
Оо! Спасибо большое, добавил еще AND A.cid=:cityid и работает как надо
Два запроса делал потому что в сложных запросах не силен, а тут оказывается из-за второго запроса и была вся бяка
А третью таблицу точно также к ним можно подключить?

Последний раз редактировалось {Shadowevil}; 14.12.2011 в 14:04.
{Shadowevil} вне форума Ответить с цитированием
Старый 14.12.2011, 14:23   #28
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Насчет точно также не знаю, нужно смотреть конкретную ситуацию
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.12.2011, 14:35   #29
{Shadowevil}
Пользователь
 
Регистрация: 15.01.2009
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Насчет точно также не знаю, нужно смотреть конкретную ситуацию
А нельзя допустим написать
Код:
SELECT F.*,A.allinfo,FR.Tel 
  FROM firm_group F
    LEFT JOIN address A ON A.fid=F.fid LEFT JOIN firm FR ON FR.fid=F.fid
  WHERE F.cid=:cityid AND F.rid=:rid AND ...
или как-нибудь так?
{Shadowevil} вне форума Ответить с цитированием
Старый 14.12.2011, 14:55   #30
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Если со связями в таблицах все нормально, то можно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой компонент использовать Кинельски Компоненты Delphi 5 23.06.2010 11:10
КАКОЙ КОМПОНЕНТ НАДО ИСПОЛЬЗОВАТЬ? Gareevbo Общие вопросы Delphi 2 08.06.2009 22:33
Подскажите какой использовать компонент Tanya2008 Компоненты Delphi 1 12.03.2009 21:37
Какой компонент использовать для отображения файлов devi409 Компоненты Delphi 8 15.02.2009 14:50
Какой компонент использовать? XPAiN БД в Delphi 3 05.05.2008 08:45