Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];

Вниз

Несколько вопросов по StringGrid   Найти похожие ветки 

 
uno-84   (2008-07-02 08:41) [0]

Здравстуйте! У меня несколько вопросов по StringGrid, я добавляю в него записи

with StringGrid1 do
          begin
             RowCount := k+1;
             for i := 1 to RowCount do
             begin
                  if FieldByName("MESSAGE_IMPORTANCE").AsString = "T" then StringGrid1.Cells[0, i] := "!" else StringGrid1.Cells[0, i] := "";
                  if FieldByName("MESSAGE_ATTACH_COUNT").AsInteger > 0 then StringGrid1.Cells[1, i] := FieldByName("MESSAGE_ATTACH_COUNT").AsString
                     else StringGrid1.Cells[1, i] := "";    
                  if FieldByName("MESSAGE_ORIGINALMSG").AsString > "" then StringGrid1.Cells[2, i] := "Ответ" else StringGrid1.Cells[2, i] := "";
                  if FieldByName("MESSAGE_NOTIFY").AsString = "T" then StringGrid1.Cells[3, i] := "+" else StringGrid1.Cells[3, i] := "-";
                  if FieldByName("MESSAGE_TYPE").AsString = "R" then StringGrid1.Cells[4, i] := "Извещение о прочтении"
                     else
                     begin
                          if FieldByName("MESSAGE_WORK_TYPE").AsString = "T" then
                          begin
                          StringGrid1.Cells[5, i] := FieldByName("MESSAGE_WORK_PRO").AsString + "%";
                          StringGrid1.Cells[4,i] := "Служебное задание";
                          end
                           else
                           begin
                           StringGrid1.Cells[4, i] := "Обычное сообщение";
                           StringGrid1.Cells[5, i] := "";
                           end;
                     end;

                  StringGrid1.Cells[6, i] := FieldByName("USER_NAME1").AsString;
                  StringGrid1.Cells[7, i] := FieldByName("MESSAGE_RECIPIENTS_NAMES").AsString;
                  StringGrid1.Cells[8, i] := FieldByName("USER_NAME").AsString;
                  StringGrid1.Cells[9, i] := FieldByName("MESSAGE_SUBJECT").AsString;
                  StringGrid1.Cells[10, i] := FieldByName("MESSAGE_SEND_DATE").AsString;
                  StringGrid1.Cells[11, i] := FieldByName("MESSAGE_RECEPT_DATE").AsString;
                  StringGrid1.Cells[12, i] := FieldByName("MESSAGE_READ_DATE").AsString;
                  StringGrid1.Cells[13, i] := FieldByName("MESSAGE_ID").AsString;
            Next;
            end;
1. Можно ли вставить в StringGrid1.Cells[14, i] CheckBox и как отслеживать поставлен чек или нет?
2. В Cells[5, i] нежен прогресс бар или что-то в этом роде, для визуального представления процента?
3. Как сделать так что-бы записи писались по центру ячейки?
Подскажите пожалуйста.
Заранее спасибо


 
han_malign ©   (2008-07-02 09:38) [1]

Перекрыть DrawCell(OnDrawCell) и отрисовывать что угодно и как угодно...
1. Как отрисовать CheckBox можно посмотреть в модуле CheckLst - TCheckListBox.DrawCheck. Состояние можно хранить в Objects (Objects[c,r]:= TObject(1); case integer(Objects[c,r]) of ...).
2.
procedure DrawSimpleHProgressBar(aCanvas: TCanvas; const aRect: TRect; aColor, aTextColor: TColor;
  aText: string; aPercent: byte; aHCenterText: boolean);
var W,H,X,Y: integer;
   _rect: TRect;
   _clr: TColor;
   _bs: TBrushStyle;
begin
  if(aPercent>100)then aPercent:=0;
  W:=aRect.Right-aRect.Left+1; H:=aRect.Bottom-aRect.Top+1;
  _rect:=aRect;
  if(aPercent>0)then begin
     _rect.Right:=aRect.Left+W*aPercent div 100-1;
     _clr:=aCanvas.Brush.Color;
     aCanvas.Brush.Color:=aColor;
     aCanvas.FillRect(_rect);
     aCanvas.Brush.Color:=_clr;
     aText:=aText+" "+IntStr(aPercent)+"%";
     _rect.Left:=_rect.Right+1;
     _rect.Right:=aRect.Right;
  end;
  if(_rect.Right>=_rect.Left)then aCanvas.FillRect(_rect);
  Y:=(H-aCanvas.TextHeight(aText))div 2;
  if(Y<0)then Y:=0;
  X:=(W-aCanvas.TextWidth(aText))div 2;
  if(X<0)then X:=0;
  if((X>Y)and not aHCenterText)then
     if(Y>0)then X:=Y
     else if(X>2)then X:=2;
  _bs:=aCanvas.Brush.Style;
  aCanvas.Font.Color:= aTextColor;
  aCanvas.Brush.Style:=bsClear;
  aCanvas.Refresh;
  aCanvas.TextOut(aRect.Left+X,aRect.Top+Y,aText);
  aCanvas.Brush.Style:=_bs;
end;

3. DrawText(Canvas.Handle, ...) вместо Canvas.TextOut/TextRect(...) и будет тебе щастье... хотя можно и вручную извратиться как в п.2.


 
Sergey13 ©   (2008-07-02 09:46) [2]

> [0] uno-84   (02.07.08 08:41)

Я так понимаю что твои FieldByName-ы из какого-то датасета? Почему тогда не DBGrid?


 
uno-84   (2008-07-02 09:51) [3]

Смысла просто не видел в DBGride, мне надо бало просто визуально представить информацию, не изменений ни коких либо опереций проводить над ней не надо не надо, поэтому выбрал StringGrid, как более простой


 
Sergey13 ©   (2008-07-02 09:53) [4]

> [3] uno-84   (02.07.08 09:51)

Ну так, по аналогии, ты выбрал в качестве транспорта лыжи. Причем в городе. 8-)


 
uno-84   (2008-07-02 09:56) [5]

Выбрал лыжи)))))) и остался дома)))))


 
Ega23 ©   (2008-07-02 10:00) [6]


> Смысла просто не видел в DBGride, мне надо бало просто визуально
> представить информацию, не изменений ни коких либо опереций
> проводить над ней не надо не надо, поэтому выбрал StringGrid,
>  как более простой


пацталом.
Вот оно, тлетворное влияние апологетов редактирования в гриде.


 
Sergey13 ©   (2008-07-02 10:02) [7]

> [6] Ega23 ©   (02.07.08 10:00)

Хочешь поговорить об этом? Опять?!!!
8-)


 
Ega23 ©   (2008-07-02 10:06) [8]


> Хочешь поговорить об этом? Опять?!!!


(с надрывом)  Да!!! Это такие как ты виноваты!!!


 
Sergey13 ©   (2008-07-02 10:12) [9]

> [8] Ega23 ©   (02.07.08 10:06)

Ну что-ж, прокурор (обвиняющий) начинает судебные прения сторон. Начинай. 8-)


 
_Guest_   (2008-07-02 10:13) [10]


> Sergey13 ©   (02.07.08 09:46) [2]
> Я так понимаю что твои FieldByName-
> ы из какого-то датасета? Почему тогда не DBGrid?

Может чтобы выводить информацию в более удобоваримой для пользователя форме, может осуществить какие-либо проверки на вводе прежде чем информация попадет в базу, а может и еще что.


>  [0] uno-84   (02.07.08 08:41)

Многое из того что ты хочешь, реализовано в наборе компонентов XStringGrid, ссылку не вспомню, но яндекс их находит. Колупаю его с прошлой недели, глюков пока не заметил.


 
Ega23 ©   (2008-07-02 10:16) [11]


> Ну что-ж, прокурор (обвиняющий) начинает судебные прения
> сторон. Начинай. 8-)


Да ну. Неохота.
Но то, что TDBGrid чайники начинают считать средством редактирования TTable - это есть плохо.


 
Плохиш ©   (2008-07-02 10:18) [12]


> _Guest_   (02.07.08 10:13) [10]


> > ы из какого-то датасета? Почему тогда не DBGrid?
>
> Может чтобы выводить информацию в более удобоваримой для
> пользователя форме, может осуществить какие-либо проверки
> на вводе прежде чем информация попадет в базу, а может и
> еще что.

Может стоит, для начала, материальную часть изучить?


 
_Guest_   (2008-07-02 10:22) [13]


> Ega23 ©   (02.07.08 10:16) [11]
> Но то, что TDBGrid чайники начинают считать средством редактирования > > TTable - это есть плохо.

Согласен, хотя и чайник :)

Хотел новую тему создать, но спрошу здесь: никто не слышал о компоненте, чтобы и как таблица был развит, как в [10], и с деревом мог работать, как TVirtualStringTree? А то замучался в StringGrid"ах узлы реализовывать.


 
Ega23 ©   (2008-07-02 10:23) [14]


> Может чтобы выводить информацию в более удобоваримой для
> пользователя форме, может осуществить какие-либо проверки
> на вводе прежде чем информация попадет в базу, а может и
> еще что.


Всем этим обладает TDBGrid. А TStringGrid тебе ещё долго придётся точить напильником. ОЧЕНЬ долго.


 
Ega23 ©   (2008-07-02 10:24) [15]


> Хотел новую тему создать, но спрошу здесь: никто не слышал
> о компоненте, чтобы и как таблица был развит, как в [10],
>  и с деревом мог работать, как TVirtualStringTree? А то
> замучался в StringGrid"ах узлы реализовывать.
>


Какую конкретно функциональность ты хочешь получить? перечисли, пожалуйста.


 
Игорь Шевченко ©   (2008-07-02 10:32) [16]

а чем плохо редактировать в гриде ?


 
Ega23 ©   (2008-07-02 10:33) [17]


> а чем плохо редактировать в гриде ?


Э нет, я - пас. Если никпик не сорвётся, то там об этом и поговорим.  :))


 
_Guest_   (2008-07-02 10:35) [18]


> Ega23 ©   (02.07.08 10:24) [15]
> Какую конкретно
> функциональность ты хочешь получить? перечисли, пожалуйста.
>

XStringGrid позволяет выравнивать информацию в ячейках, красить их и вешать на столбец внешний редактор, их несколько от простого текстового до чеклистбокса. Этим меня он устраивает, я даже переживу отсутствие многострочности в ячейках. Понятно, что все это можно реализовать и в обычном TStringGrid как в [1], но на порядок или на два писать больше придется. Мне не хватает только дерева с узлами в одном из столбцов. Причем сворачивание/разворачивание узлов иметь хорошо, но в моем случае не обязательно. Но видеть что куда входит надо и одними отступами, по-моему, не обойтись.


 
Игорь Шевченко ©   (2008-07-02 10:36) [19]


> Если никпик не сорвётся, то там об этом и поговорим


благими намерениями вымощена дорога в ад. :)


 
Ega23 ©   (2008-07-02 10:38) [20]


> _Guest_   (02.07.08 10:35) [18]


QuantumGrid от devExpress


 
_Guest_   (2008-07-02 10:43) [21]


> Ega23 ©   (02.07.08 10:38) [20]
>QuantumGrid от devExpress

Он за денежку?


 
Ega23 ©   (2008-07-02 10:44) [22]


> Он за денежку?
>


Да. Чё-то около $600.


 
Sergey13 ©   (2008-07-02 10:47) [23]

> [18] _Guest_   (02.07.08 10:35)
> Мне не хватает только дерева с узлами в одном из столбцов.

Это, ИМХО, немножко странное желание. Обычно (из того что я видел разумеется) грид привязывают к дереву в качестве рядом стоящего детализирующего прибамбаса. И это мне кажется логичным. Но вот показывать конкретно в гриде несколько деревьев - это как минимум дорого с точки зрения вычислений. В этом случае более логично сбоку (можно снизу 8-) от грида воткнуть какой-нибудь деревянный компонент и, лучше, если он будет срабатывать по отдельной кнопке.


 
_Guest_   (2008-07-02 10:48) [24]


> Ega23 ©   (02.07.08 10:44) [22]
> > Он за денежку?> Да. Чё-то около $600.

Проект, для которого он мне нужен, весь стоит дешевле. Воздержусь пока, но за инфу спасибо, разбогатею и потом может пригодится, если к тому времени чего другого не выйдет :)


 
Anatoly Podgoretsky ©   (2008-07-02 10:57) [25]

Это рынок, возьми другой бесплатный, например StringGrid, доточи его напильником и потом оцени работу, даже по нищенским расценкам.


 
_Guest_   (2008-07-02 11:05) [26]


> Anatoly Podgoretsky ©   (02.07.08 10:57) [25]
> Это рынок, возьми другой бесплатный, например StringGrid,
>  доточи его напильником и потом оцени работу, даже по нищенским
> расценкам.

Да, это рынок.
Уже точу, оценивать потом смысла нет, даже если это будет мне дороже.
Просто первые $600 надо как то получить. У всех свои трудности и не буду плакаться о зарплате в глубинке, но есть шанс, что Вы сильно удивитесь, если ее озвучить.


 
Ega23 ©   (2008-07-02 11:06) [27]


> Проект, для которого он мне нужен, весь стоит дешевле.


А тогда и нефиг изголяться.
тоже как-то года 3 назад встала задача по визуализации иерархических НД. Полез в сеть, нашёл QuantumGrid. Начальство сказало: "$600????? Да вы чё? У нас программистов куча. Пишите сами."
Писал я это дело месяца 2 в общей сложности. Получил бесценный опыт по созданию VCL-компонент вообще, по связке TDataSet-TDataSource-TDataLink и т.п.
Начальство сколько проиграло - трудно сказать. Зарплата в то время у меня было в районе $800. Вот и считай: $800*2 - $600 + Упущенная прибыль за полтора месяца


 
_Guest_   (2008-07-02 11:14) [28]


> Ega23 ©   (02.07.08 11:06) [27]
> Зарплата в то время у меня было в районе $800. Вот и считай: $800*2
> - $600 + Упущенная прибыль за полтора месяца

Хорошо вам - крепким орешкам :), у мня зарплата чуть меньше полутора тысяч евро... в год и дело, в общем то, не в квалификации или специальности - это средняя з/п по городу. Поэтому компоненты не пишем, а если пишем, то по году минимум :) чтобы деньги отбить.


 
Ega23 ©   (2008-07-02 11:21) [29]


> У всех свои трудности и не буду плакаться о зарплате в глубинке,
>  но есть шанс, что Вы сильно удивитесь, если ее озвучить.


А это не важно: в глубинке или где. Заказчик везде и всегда хочет "чего-то такого". Т.е. - наворотов. "Штоб печатало ещё и в pdf", "Штоб всё в Excel сохранялось, от 5.0 до 2007", "Чтобы выборки трёхмерные были", "Ой, а чё это у вас альфа-канала на иконках нет?" и т.п.
И зачастую такая дурная прихоть обходится в 50% времени, затраченного на ВЕСЬ проект.
И в этом случае надо уметь заказчику объяснить, что такая "маленькая доделка" будет стоить (сумма прописью). Причём объяснить, по какой причине это будет столько стоить.
Как правило в этот момент у заказчика падает челюсть и он отзывает свою "хотелку".

Реальный случай.
Ставили на один объект свой комплекс. Отношения с заказчиком - очень хорошие. Тут они нас просят: надо им какой-то отчёт сделать очень хитрый. Мы подумали, посовещались - и выслали админу sql-скрипт (админ там продвинутый, это не опасно). Те довольны, отчёт делается, всё нормально. Но вот больно долго им это копировать. "А встройте-ка его в свой коплекс?". Да не вопрос. Посчитали, сколько это будет стоить - те сказали: нафик, будем sql-скриптом пользоваться.


 
_Guest_   (2008-07-02 11:27) [30]


> Ega23 ©   (02.07.08 11:21) [29]

Я и сжелезом то не очень, а с людьми вообще работать не умею, придется учиться обламывать заказчиков.
Дискуссия крайне интересная, но тогда надо уходить из этой ветки, касательно стринггридов все уже выяснили.


 
Anatoly Podgoretsky ©   (2008-07-02 11:29) [31]

> _Guest_  (02.07.2008 11:05:26)  [26]

Оценивать и не надо, поскольку 600 баксов для фирмы это часов 6, максимум 24 часа работы одного разработчика, ясно же что за это время не написать даже наброска.


 
Anatoly Podgoretsky ©   (2008-07-02 11:34) [32]

> Ega23  (02.07.2008 11:06:27)  [27]

Ты неправильно считаешь, ты считаешь только то, что тебе лично заплатили, а предприятию работник обходится во много раз дороже, если это будет 100 баксов, то считай, что я поскромничал. Но как минимум не в сфере наукоемких технологий, а например на ломате, заплатить работнику свыше 30 процентов это влезть в убытки.даже в этом случае выходит 800/0,3 * 2 - 600 без аммортизации оборудования и прочего.
Считать по зарплате это чисто совковый подход, а еще более совковый подход не считать и это, мы мол тебе все равно платим, так что бесплатно. Ну и конечно полная разработка далеко не два месяца.


 
Anatoly Podgoretsky ©   (2008-07-02 11:35) [33]

> _Guest_  (02.07.2008 11:14:28)  [28]

Туркменистан?


 
Ega23 ©   (2008-07-02 11:40) [34]


> без аммортизации оборудования и прочего.


Ну ясное дело, я сюда не включал амортизацию компов, аренду помещения, оплату электричества и т.п.
А то, что совковый подход - так я согласен. Я идею подал - начальство её не оценило. Я в любом случае остался в плюсе, т.к.:
1. Продолжал получать зарплату.
2. Занимался крайне интересным для меня делом на законных основаниях в рабочее время на рабочем месте.
3. Получил опыт по созданию компонентов вообще, узнал, как организована работа в VCL с DBAware компонентами.

Будь я сам себе хозяин - безусловно бы купил этот грид, разобрался бы с ним один раз и дальше везде бы его толкал. Но - совок неистребим. :)))


 
_Guest_   (2008-07-02 11:43) [35]


> Anatoly Podgoretsky ©   (02.07.08 11:35) [33]
> > _Guest_  (02.07.2008 11:14:28)  [28]Туркменистан?

Щаз, блин, центральный (нечерноземный) район Росси, Ярославская область. Только не надо рассказывать как хорошо народ получает на НПЗ, Лакокраске или наших Рыбинских Моторах. Получают да не все. Топменеджмент да кто заказами распоряжается.


 
Ega23 ©   (2008-07-02 11:47) [36]


> Щаз, блин, центральный (нечерноземный) район Росси, Ярославская
> область.


Ехай к нам в Дубну через годик-два. Не сильно далеко. А приток специалистов будет ожидаться приличный.


 
Игорь Шевченко ©   (2008-07-02 11:49) [37]


> Ехай к нам в Дубну через годик-два. Не сильно далеко. А
> приток специалистов будет ожидаться приличный.


Площадью обеспечивают ?


 
Ega23 ©   (2008-07-02 11:55) [38]


> Площадью обеспечивают ?


Да, что-то такое готовится. Даже вроде условия не сильно грабительские. Сам не узнавал, ибо уже своё в Дубне есть. Но могу узнать у тех, кто "в теме" более подробно.


 
_Guest_   (2008-07-02 11:55) [39]


> Ega23 ©   (02.07.08 11:47) [36]
> Ехай к нам в Дубну через годик-два. Не сильно
> далеко. А приток специалистов будет ожидаться приличный.

Спасибо, конечно, но во-первых, отчего ты решил, что я вам подойду, а если не вам, то тогда как устраиваться с нуля, а во-вторых, я немолодой, не совсем здоровый человек с комплексом устоявшихся привычек, детьми, родственниками, невыплаченными кредитами и т.д. Тяжело срываться. Тем более у нас не качеством так количеством: никто не заставляет работать только на одном месте. За соответствующую з/п заказчики соотвественно и получают либо времени уделяемого поменьше, либо работу попроще.


 
_Guest_   (2008-07-02 11:57) [40]

Кстати, Дубна - это подмосковье? И чем примерно занимаьтся?


 
Ega23 ©   (2008-07-02 12:00) [41]


> а во-вторых, я немолодой, не совсем здоровый человек с комплексом
> устоявшихся привычек, детьми, родственниками, невыплаченными
> кредитами и т.д.


А ты зарегистрируйся и в анкету данные введи. Тогда всем будет понятно какой ты - молодой или старый. :)


> Тяжело срываться. Тем более у нас не качеством так количеством:
>  никто не заставляет работать только на одном месте. За
> соответствующую з/п заказчики соотвественно и получают либо
> времени уделяемого поменьше, либо работу попроще.


Ну моё дело предложить...  :)


 
Ega23 ©   (2008-07-02 12:05) [42]


> Кстати, Дубна - это подмосковье? И чем примерно занимаьтся?


Там у нас сейчас центр программирования строят. Типа, одна из Медведевских программ. В Дубне, В Академгородке под Новосибом и где-то ещё. В принципе, судя по планам - город в городе будет. Строят в бешеном темпе, что крайне удивительно.
Уже сейчас потихоньку компании начинают перебираться: Luxsoft, Agava, StarSoft (это что-то питерское вроде...). По инсайдерской информации, зарплаты в целом у нормальных специалистов (IT-шников, естественно) уже сейчас от 35 до 50 тыр. Что будет, когда через пару лет первую очередь сдадут - неизвестно. Но, как мне кажется, хуже точно не будет...  :)


 
_Guest_   (2008-07-02 12:11) [43]

О-о! я тут пост один интересный для себя пропустил:
> Sergey13 ©   (02.07.08 10:47) [23]
> > [18] _Guest_   (02.07.08 10:35)> Мне не хватает только
> дерева с узлами в одном из столбцов.Это, ИМХО, немножко
> странное желание. Обычно (из того что я видел разумеется)
> грид привязывают к дереву в качестве рядом стоящего детализирующего
> прибамбаса. И это мне кажется логичным. Но вот показывать
> конкретно в гриде несколько деревьев - это как минимум дорого
> с точки зрения вычислений. В этом случае более логично сбоку
> (можно снизу 8-) от грида воткнуть какой-нибудь деревянный
> компонент и, лучше, если он будет срабатывать по отдельной
> кнопке.

Может натолкнете на идею, задача такова:
есть некие действия(задачи), каждое из которых может иметь подзадачи. Для этого нужно дерево. Все они имеют довольно много свойств, которые необходимо редактировать, таблица для этого необязательна, но можно в ней, а дальше из свойств подзадач вычисляются свойства их родителей и так вплоть до верхнего уровня. Пользователю хочется видеть сразу все элементы и все их свойства и тут же их менять. Если использовать связку дерева с таблицей, то я не могу придумать как их синхронизировать. Красиво, по крайней мере у меня, не получается. Набор свойств от уровня вложенности не зависит. Таблица мне кажется нагляднее, но если есть идеи буду благодарен.


 
Ega23 ©   (2008-07-02 12:17) [44]


> _Guest_   (02.07.08 12:11) [43]


У TTreeNode есть свойство Data, куда можно положить указатель на что угодно. Например, PInteger, по адресу которого лежит значение ключевого поля набора данных.
Также у TTreeView есть событие OnChangeNode.
Также у TTreeVew есть свойство Selected.


 
_Guest_   (2008-07-02 12:18) [45]


>Ega23 ©   (02.07.08 12:00) [41]
>А ты зарегистрируйся и
> в анкету данные введи. Тогда всем будет понятно какой ты
> - молодой или старый. :)

Да точно помню, что пару-тройку лет назад регистрировался, мыло не менялось, сейчас поискал по нему - нету. А бываю здесь редко и, как правило, читателем. Надо будет еще раз зарегистрироваться.
>Ну моё дело предложить...
>  :)

Так и за это спасибо :)


 
_Guest_   (2008-07-02 12:23) [46]


> Ega23 ©   (02.07.08 12:17) [44]
> > _Guest_   (02.07.08 12:11) [43]У TTreeNode есть свойство
> Data, куда можно положить указатель на что угодно. Например,
>  PInteger, по адресу которого лежит значение ключевого поля
> набора данных.Также у TTreeView есть событие OnChangeNode.
> Также у TTreeVew есть свойство Selected.

Это, в общем то понятно, визуально как синхронизировать? Выровнять высоты и отслеживать верхний видимый элемент?


 
Anatoly Podgoretsky ©   (2008-07-02 15:12) [47]


> Ega23 ©   (02.07.08 11:21) [29]

За ваши деньги выполним любой каприз :-)


 
Sergey13 ©   (2008-07-02 15:18) [48]

> [43] _Guest_   (02.07.08 12:11)
> Может натолкнете на идею, задача такова:

Вообще-то недурно бы, ИМХО, завести СВОЮ ветку со СВОИМ вопросом. Хватит чужой топик насиловать. 8-)
В своем топике желательно обстоятельно рассказать про условия задачи, используемую СУБД и ь.д. и т.п.


 
_Guest_   (2008-07-02 16:44) [49]


> Sergey13 ©   (02.07.08 15:18) [48]
>Вообще-то недурно бы, ИМХО, завести СВОЮ
> ветку со СВОИМ вопросом. Хватит чужой топик насиловать.
> 8-)В своем топике желательно обстоятельно рассказать про
> условия задачи, используемую СУБД и ь.д. и т.п.

Да я еще в [30] предлагал переместиться куда-нибудь чтобы обсудить условия работы и финансы :). Ответ по компонентам, совмещающим свойства таблицы и дерева, я получил - бесплатного нет, про БД я ничего не говорил. Интересен Ваш [23], но там, в общем, все понятно. Спасибо за полезно и приятно проведенное время, пошел работать.


 
Sergey13 ©   (2008-07-02 16:56) [50]

> [49] _Guest_   (02.07.08 16:44)
> Ответ по компонентам, совмещающим свойства таблицы и дерева,
> я получил - бесплатного нет

Зато можно положить рядом два отдельных (при том возможно и бесплатных) компонента. 8-)


 
_Guest_   (2008-07-02 17:07) [51]


> Sergey13 ©   (02.07.08 16:56) [50]
> Зато можно положить рядом два отдельных (при том возможно
> и бесплатных) компонента. 8-)

Сергей, можно об этом в аське, а то правда некрасиво, тема то чужая?


 
MsGuns ©   (2008-07-02 17:22) [52]

Вот примерная схема использования мною гридов, "устаканенная" за 6 лет работы:

Таблица, редактируемая в манере экселя (неважно, связанная напрямую с БД или нет) и неограниченная по размерам - TClientDataSet. Полный сервисный "фарш" (поиски, фильтрции,сортировки)

Таблица, редактируемая по принципу "объекта" (т.е. начал редактировать один объект - закончи) и отображающая данные ОДНОЙ ТАБЛИЦЫ БД (например, плоский справочник) - TDBGrid с ReadOnly = false. Сервисный "фарш"

То же самое, но с требованием управления транзакциями (контролем непосредственной записи данных в БД) - TDBGrid с ReadOnly = true и редактирование записей-объектов БД в модальном окне через обычные не DB-Aware контролы. Сервисный "фарш"

Небольшая по размерам таблица (до 1000 записей) для отображения чего-то в основном не  связанного с БД с возможностью или без редактирования в сетке. Всякие прибамбасы типа картинок, прогресбаров, чекбоксов, кнопок, комбобоксов и прочего, как "фантомные" (т.е. появляющиеся лишь при получении ячейкой фокуса и рисуемые прямо поверх ячейки), так и обычные, рисуемые в каждой строке. Из сервиса - по минимуму и только в особых случаях (например, при отображении списка файлов) - TStringGrid

То же, но с графическими наворотами ("хитрые" или простые деревья, шаблоны, массивы и т.д.) -
TDrawGrid. Как правило, сервис не требуется

И еще. Для того чтобы реализовать поиск или сортировку в стрингриде хотя бы сопоставимую по скорости с ДБгридовой, надо очень хорошо попотеть. Поэтому в большинстве случаев достаточно вместо этого просто его (ДБгрид) и юзать


 
MsGuns ©   (2008-07-02 17:32) [53]

И вдогонку о компонентах.

Тут принято советовать всяческие сторонние компоненты, часто действительно хорошие и реально упрощающие разработку приложений (особенно интерфейсной части). Но я бы прежде чем "скачать, установить и не мучиться" подумал бы о последствиях - как только Вы используете сторонний компонент в своем проекте, с этого момента он перестанет компиллиться без этой библиотеки. А если таких библиотек - эн штук ? Ничего страшного, конечно, но только до тех пор, пока Вы проектируете в ЭТОЙ ДЕЛЬФЕ и на ЭТОМ ПК. Любой "переезд" чреват тем, что все Ваши распрекрасые проекты вместе с расудесными гридами, овальными кнопками и прозрачными "под мыльную пену" панельками станут просто не редактируемы. И для их "оживления" надо будет доустановить все библиотеки, компоненты которых Вы использовали в проекте.
Другими словами, если используемая Вами среда суть что-то постоянное (например, в отделе, где Вы работаете, эти компоненты являются частью стандарта) либо разрабатываемый проект "разовый" - сделал-отдал-забыл, тогда смело пользуйтесь. В других случаях я бы советовал поостеречься.


 
Sergey13 ©   (2008-07-03 08:48) [54]

> [51] _Guest_   (02.07.08 17:07)

Лучше здесь. Тем более, что обсуждение худо бедно идет.


 
clickmaker ©   (2008-07-03 09:34) [55]

Насчет "чем плохо редактировать в гриде".
Если объект сильно структурированный, т.е. свойства можно разложить по категориям, то ИМХО его удобней редактировать в модальной форме с закладками.
Можно, конечно, и в гриде замутить группирование подзаголовков, но во-первых, стандартный грид этого не умеет, во-вторых, при большом количестве полей все равно не наглядно.
К тому же, в форме проще делать валидацию, обозначать обязательные поля и все такое прочее.


 
Игорь Шевченко ©   (2008-07-03 09:54) [56]

clickmaker ©   (03.07.08 09:34) [55]


> Насчет "чем плохо редактировать в гриде".
> Если объект сильно структурированный, т.е. свойства можно
> разложить по категориям, то ИМХО его удобней редактировать
> в модальной форме с закладками.
> Можно, конечно, и в гриде замутить группирование подзаголовков,
>  но во-первых, стандартный грид этого не умеет, во-вторых,
>  при большом количестве полей все равно не наглядно.


Марксизм не догма, а руководство к действию. Почему из-за неудобства редактировать сложный объект с закладками в гриде делается вывод о неудобстве редактирования в гриде вообще чего-либо, я не совсем понимаю.
Кстати, в той же упоминаемой неоднократно MsMoney в гриде есть гайка - редактировать отдельно или в гриде. Но при том, никаких модальных форм в ней не появляется, просто внизу открывается подвал для редактирования (кстате, с закладками), и если тебе вольно покинуть страницу в гриде, то ты ее, соответственно, покидаешь (правда можешь вернуться назад и продолжить редактирование). А не вернулся - считается, что нажал на кнопку Cancel. Работать весьма удобно.


 
_Guest_   (2008-07-03 10:10) [57]

Ладно, раз обсуждение худо бедно идет, то продолжим. Посылы MsGuns © поняты и приняты к сведению.
Вопрос: как можно в гриде реализовать простенькую группировку строк по одному фиксированному столбцу? БД нет, столбцов с десяток, строк около 30, максимум 50. Количество уровней вложенности теоретически не ограничено, практически же 2-4. Сортировки и поиски не требуются. Это что то вроде плана работ с вычислением время- и трудозатрат и отслеживанием финансирования.


 
Sergey13 ©   (2008-07-03 10:19) [58]

> [57] _Guest_   (03.07.08 10:10)

Почему то мне кажется, что твоя задача идеально решается в екселе.
Ты все хочешь из грида сделать некий инструмент для манипулирования данными. А он изначально предназначен только для их визуализации. Данных в гриде нет.


 
Anatoly Podgoretsky ©   (2008-07-03 10:21) [59]

> _Guest_  (03.07.2008 10:10:57)  [57]

Группировка - это что?


 
MsGuns ©   (2008-07-03 10:22) [60]

>_Guest_   (03.07.08 10:10) [57]

Все, что описано, достаточно просто (хотя и не без некоторой громоздкости) реализуется в событии отрисовки ячеек. Однако есть одно НО. Судя по всему объекты, отображаемые в сетке, не линейны и имеют определенную структуру, которая может быть частью другой структуры. В этом случае не обойтись без объектов. Надо создать объект-рекорд или объект-класс, куда предварительно запихать все данные, включая внешние ссылки (парент и чилдкаунт например). Адреса всех объектов положить в список, из которого и заполнять сетку. В этом случае брать данные для нужной отрисовки код обработчика будет не из ячеек сетки, где по понятным причинам отображается явно не вся "внутренность" объекта, а из его экземпляра, индекс адреса которого в списке легко определяется по номеру строки сетки


 
Anatoly Podgoretsky ©   (2008-07-03 10:23) [61]


> Данных в гриде нет.

Мы вроде про StringGrid говорим? Не так ли?


 
Sergey13 ©   (2008-07-03 10:29) [62]

> [61] Anatoly Podgoretsky ©   (03.07.08 10:23)
> Мы вроде про StringGrid говорим? Не так ли?

Да я уже честно говоря запутался о чем мы говорим. Начали вроде со стринггрида, потом вроде переходили на ДБгрид.

Потому и предлагал _Guest_у организовать свою ветку с нормальным описанием условий.


 
Anatoly Podgoretsky ©   (2008-07-03 10:32) [63]

> Игорь Шевченко  (03.07.2008 9:54:56)  [56]

А наличие модальных форм совсем не обязательно, функцию формы с успехом выполняет подвал.


 
Anatoly Podgoretsky ©   (2008-07-03 10:34) [64]

> Sergey13  (03.07.2008 10:29:02)  [62]

Это конечно бардак использовать чужую ветку для своих целей, получается каша.
Я вот теперь тоже не понимаю, а о чем мы говорим сейчас?


 
_Guest_   (2008-07-03 10:51) [65]


> Sergey13 ©   (03.07.08 10:19) [58]
> Почему то мне кажется,
> что твоя задача идеально решается в екселе.Ты все хочешь
> из грида сделать некий инструмент для манипулирования данными.
>  А он изначально предназначен только для их визуализации.
>  Данных в гриде нет.

Заказчик не хочет покупать ексель :), но хочет получить некие вещи, которые в екселе можно сделать, тоько если его хоть немного знать, а это уже труд.
Есть такой грех: хочу немного поманипулировать данными в StringGrid"е. Но совсем немного, в основном отображать: пользователь видит все и только пометки ставит, и очередность, и прошла ли оплата.

> MsGuns ©   (03.07.08 10:22) [60]

Объекты имеют свою структуру общую для всех. Эта структура не является частью другой. На мой взгляд объекты линейны (возможно я не владею терминологией). Объекты созданы и существуют, имеют свойства парент и чилдкаунт.
Я все понял: зафиксирую нужный мне столбец и отрисую его сам, подставляя иконки свернутости/развернутости и отступы, а возможно даже линии вхождений. Просто была слабенькая надежда, что кто-нибудь когда-то это офрмил в компонент. Если все это доведу до ума и получится красиво, то выложу куда-нибудь, даже просто в качестве примера.


 
_Guest_   (2008-07-03 10:55) [66]


> Anatoly Podgoretsky ©   (03.07.08 10:34) [64]
> > Sergey13  (03.07.2008 10:29:02)  [62]Это конечно бардак
> использовать чужую ветку для своих целей, получается каша.
> Я вот теперь тоже не понимаю, а о чем мы говорим сейчас?
>

Я все время говорю о StringGride и тоже хотел уйти, но прислушался к старожилам [54].


 
Игорь Шевченко ©   (2008-07-03 11:20) [67]


> Заказчик не хочет покупать ексель :), но хочет получить
> некие вещи, которые в екселе можно сделать


пусть скачивает OpenOffice :)


 
Sergey13 ©   (2008-07-03 11:31) [68]

> [66] _Guest_   (03.07.08 10:55)

В [54], в ответ на предложение перейти в аську, я имел в виду форум (свою ветку), а не этот конкретный топик.

> [57] _Guest_   (03.07.08 10:10)
> БД нет

> [65] _Guest_   (03.07.08 10:51)
> Объекты имеют свою структуру общую для всех

Почему бы не перевести объекты в БД. Там УЖЕ реализовано многое из того, что тебе хотелось бы - сортировки/группировки и т.д. А ДБгриду оставить его функции отображения.
Кстати для БД есть и бесплатные компоненты для деревянных данных. EhLib например бесплатен (до версии 3.6) и вро де бы может отображать деревяшки (я лично этот функционал не юзал, но в описании он есть).


 
_Guest_   (2008-07-03 11:40) [69]


> Sergey13 ©   (03.07.08 11:31) [68]
> > [66] _Guest_   (03.07.08 10:55)В [54], в ответ на предложение
> перейти в аську, я имел в виду форум (свою ветку), а не
> этот конкретный топик.

Извиняюсь, недопонял.


 
Anatoly Podgoretsky ©   (2008-07-03 12:02) [70]

> _Guest_  (03.07.2008 10:51:05)  [65]

> Заказчик не хочет покупать ексель :), но хочет получить некие вещи, которые в екселе можно сделать, тоько если его хоть немного знать, а это уже труд.

Скажи ему - за ваши деньги исполнтим любой каприз, только если денег будет достаточно и предложи оплату этого каприза по цене 10 * Офис
И тебе хорошо и ему тоже, или тоже самое по покупке компонент аля офис * умноженое минимум на 1.2 (прибыль то должна быть). Воровать компоненты не смей. Клиент всегда прав, только пусть подтвердит эти права.


 
Anatoly Podgoretsky ©   (2008-07-03 12:09) [71]

> Anatoly Podgoretsky  (03.07.2008 12:02:10)  [70]

Ошибка это не прибыль, а стандартная торговая наценка.


 
_Guest_   (2008-07-03 12:24) [72]


> предложи оплату
> этого каприза по цене 10 * Офис И тебе хорошо и ему тоже,
>  или тоже самое по покупке компонент аля офис * умноженое
> минимум на 1.2 (прибыль то должна быть).

По моему, Вы что то недопоняли про оплаты у нас в городе. Можешь работать за 3 т.р. - работай, не можешь - не работай. Я могу придти и потребовать 30 т.р., но ни к чему кроме кручения пальца у виска это не приведет.

> Воровать компоненты
> не смей. Клиент всегда прав, только пусть подтвердит эти
> права.
Откуда такое дикое предположение, я, кажется, повода не давал. Всегда следую условиям распространения и использования.
Все. Здесь заканчиваю, следуя [68], пошел читать местную статью "Иерархические структуры данных в реляционных БД". Если будут вопросы создам свою ветку.


 
Anatoly Podgoretsky ©   (2008-07-03 13:44) [73]

> _Guest_  (03.07.2008 12:24:12)  [72]

> Откуда такое дикое предположение, я, кажется, повода не давал. Всегда следую условиям распространения и использования.

Никакого предположения я не делал, просто говорю не пытайся идти на поводу у заказчика. Докажи ему, что компоненты для работы стоят столько то, а разработка аналого столько то и столько то времени. Он или заплатит за компоненты/разработку или поставит офис или откажется от функциональности. Если же ты или другой разработчик пойдут на поводу и поставят ворованый компонент, то при первой же проверки виновным окажутся разработчики, а не заказчик, даже если он вам сам и даст этот ворованый компонент или ссылку где лежит "бесплатный".
Ну остальные выводы ты сам сделаешь.


 
MsGuns ©   (2008-07-03 14:40) [74]

И все же я не понял, почему нельзя использовать тривью с "подвалом", где отображать текущую ноду дерева подробно - там же можно его и редактировать. Ну вот не врублюсь зачем тут сетка, у которой есть одно существенное ограничение - невозможно увидеть все поля (ячейки) строки за раз при большом к-ве столбцов или большой их ширине. Мостить этажерки в ней и геморно и мало помогает, потому что ячейки-многоэтажки весьма плохо воспринимаются на глаз.

ИМХО, было бы неплохо хоть в общих чертах изобразить здесь постановку задачи


 
Sergey13 ©   (2008-07-03 14:43) [75]

> [74] MsGuns ©   (03.07.08 14:40)
> где отображать текущую ноду дерева подробно

А если "текущая ноду дерева подробно" это набор данных.

ЗЫ: Прямо гридофобия какая то. 8-)


 
MsGuns ©   (2008-07-03 14:52) [76]

>Sergey13 ©   (03.07.08 14:43) [75]
>ЗЫ: Прямо гридофобия какая то. 8-)

Да пойми ты, что неудобно отображать древовидные структуры в сетке. Не наглядно, не видно уровней например. Особенно если у объекта масса артибутов, которые тоже надо показывать или они вообще отличаются друг от друга по набору атрибутов. Причем тут фобия ?


 
Sergey13 ©   (2008-07-03 15:02) [77]

> [76] MsGuns ©   (03.07.08 14:52)
> Да пойми ты, что неудобно отображать древовидные структуры в сетке.
А кто агитировал за это? Уж точно не я. Я предлагал визуализацию а-ля проводник - слева дерево справа детализация (какая - смотря по условиям).


 
_Guest_   (2008-07-03 15:07) [78]

Грустно признавать, что не держу своих обещаний. Но это снова я. Не удержался и поглядываю на ветку.

> MsGuns ©   (03.07.08 14:40) [74]
> И все же я не понял, почему нельзя использовать тривью с
> "подвалом" ...
> ИМХО, было бы неплохо
> хоть в общих чертах изобразить здесь постановку задачи

Мне не надо видеть все узлы и подробности по выделенному, мне надо видеть подробности части (или всех если их не много) записей (строк, объектов, как их ни обзывай). И как подробности детей влияют на вычисляемые свойства родителей. В общих чертах - см. [57] - это план график с указанием когда что началось, сколько продолжалось и насколько оплачено. И очень хочется видеть всю информацию хоты бы по одному из этапов. Это не более 10-15 строк и менее 10 столбцов. Еще при этом хотелось бы иметь возможность тут же поправить процент оплаты или сроки и увидеть результаты перерасчета. Как уже выше говорили ексел удовлетворяет почти полностью. Но начинаются вопросы от разграничения прав доступа до взаимодействия с другими программами. Скажу честно, ексел знаю, но не до такой степени, да и от дурака в интефейсе своей программы защититься легче. А то "ой, я не ту кнопочку нажала", неужели не сталкивались.


 
MsGuns ©   (2008-07-03 16:46) [79]

Почти все, что, как Вы указали, делается в Экселе, можно сделать в сетке. В т.ч. и проверки "чтоб тетя не ввела не то" и пересчеты "на лету", И ИМХО, для этого лучше использовать именно стрингрид. Для отображения состояния взаиморасчетов (или что там у Вас) дерево действительно не нужно. Я же сказал, прежде чем обсасывать компоненты, лучше всего было осветить КАКАЯ ПОСТАВЛЕНА ЗАДАЧА. Тогда бы и ветка была бы не такой длинной, и обсуждение - много результативнее.


 
Игорь Шевченко ©   (2008-07-03 17:36) [80]


>  В общих чертах - см. [57] - это план график с указанием
> когда что началось, сколько продолжалось и насколько оплачено.
>  И очень хочется видеть всю информацию хоты бы по одному
> из этапов


а посмотри, как это сделано в Ms Project - он как раз под такие задачи и предназначен


 
_Guest_   (2008-07-04 12:40) [81]


> Игорь Шевченко ©   (03.07.08 17:36) [80]
> а посмотри, как это сделано в Ms Project - он
> как раз под такие задачи и предназначен

Не видел такого, а что значит посмотри? на интерфейс или он с исходниками поставляется? Вроде бы странно для MS, хотя я наверно от жизни отстал.


 
Игорь Шевченко ©   (2008-07-04 14:37) [82]


> а что значит посмотри? на интерфейс


да, на интерфейс



Страницы: 1 2 3 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.73 MB
Время: 0.009 c
15-1213783775
Алекс
2008-06-18 14:09
2008.08.03
С использ чего писать БД


15-1213775073
Darvin
2008-06-18 11:44
2008.08.03
Вызов подпрограмм из DLL, написанных на C# из Delphi


15-1213860884
БарЛог
2008-06-19 11:34
2008.08.03
Хранение сессии в кукисах


15-1213951588
Сергей_77
2008-06-20 12:46
2008.08.03
Неограниченное использование платной программы


2-1215154260
uno-84
2008-07-04 10:51
2008.08.03
Проблема с переходом по ссылке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский