Вниз
Скачать: CL | DM;

Несколько вопросов по 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 вся ветка

Скачать: CL | DM;



Память: 0.72 MB
Время: 0.018 c
15-1213471583
Nic
2008-06-14 23:26
2008.08.03
Применение теории риска на практике


4-1194052713
Kemuri
2007-11-03 04:18
2008.08.03
Буфер чтения для ReadFile


15-1213304967
Loginov Dmitry
2008-06-13 01:09
2008.08.03
SafeIniFiles


15-1213888145
@!!ex
2008-06-19 19:09
2008.08.03
Подойдут ли детали к "Туристу"?


15-1213690490
Gg
2008-06-17 12:14
2008.08.03
Стоимость работ




   Наверх