Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование на PictureBox :), чтобы не как бык по дороге - а РОВНО!!! 
V
    Опции темы
kulibin
Дата 7.2.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

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



Взялся я писать свою дата-грид smile. И не плохо получается вроде - аж самому нравится smile. Токо вот беда - с рисованием мелкие помарки есть. Сто раз перепроверил вычисление координат - не помогает smile.
Использую для рисования PictureBox и родные барсиковские методики (без апи): Print, Line, PaintPicture.
Причём проблема как я понял именно в PaintPicture - при его использовании то, что им нарисовано иногда залазит немного выше чем я прошу по вертикали и немного дальше по горизонтали.
Собственно алгоритм то для всех ячеек один и прокручивается в цикле - т.е. это точно не мой бок. Был бы мой - повторялся бы на каждой ячейке, а не на каждой пятой-седьмой.
Думал на апи переписать - токо не большой я в этом профессионал. Сам то я смогу это сделать - но не охота терять время на это без полной уверенности что это поможет. Да и код усложнять тоже не охота - он там уже не маленький и растёт постоянно и очень шустро smile.
Если кто занимался сурёзно рисованием на picturebox - скажите плз что бы это значило.
Спасибо.

Кстати - не так то это сложно - свой грид нарисовать smile. Всем рекоммендую кто гридами пользуется smile. Родной то барсиковский топорный очень. А флексюхой я долгое время пользовался - возможностей больше, но геморойно. А главное - тяжело под большие объёмы данных её пользовать. Я пытался сделать прорисовку в ней токо того, что на экран влазит. Но потом мне знакомый один сказал - а не легче ли будет свой грид сделать? я решил проверить smile - правда легче. А главное - функциональность для конкретных моих задач затачиваю.
Вот кому интересно картинка прилагается smile
Добавлено @ 14:22
Упс - картинка не захотела прикрепляться smile. Вот она:

Присоединённый файл ( Кол-во скачиваний: 29 )
Присоединённый файл  my_grd.PNG 22,59 Kb
PM MAIL WWW ICQ   Вверх
~FoX~
Дата 7.2.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

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



kulibin
Ну ты хоть кусочек кода то покажи и картинку где смещение показано...


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
kulibin
Дата 7.2.2006, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 229
Регистрация: 9.5.2005
Где: Украина, Запорожь е

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



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

Private Sub PaintGrid()
'Debug.Print "Paint! " & mCols(1).Width
Dim ScrRows As Long ', ScrCols As Long
pGRD.cls
vSB.Max = mRS.RecordCount
vSB.LargeChange = pGRD.Height / pCell.Height
'HEADER:
Dim c As Byte, r As Long, s As String, selR As Boolean, curC As Boolean
Dim ColIndex As Byte
pGRD.CurrentX = 0: pGRD.CurrentY = 0
For c = leftCol To mCols.Count
DrowCell mCols(c).Caption, mCols(c), 10848650, True
Next c
'ëèíèÿ-ðàçäåëèòåëü:
'pGRD.Line Step(0, pGRD.CurrentY)-Step(SumColsWidth, 20), vbWhite, BF
'DATA:
Dim clr As OLE_COLOR
pGRD.CurrentX = 0
pGRD.CurrentY = pGRD.CurrentY + pCell.Height
For r = TRwAPos To LRwAPos
mRS.AbsolutePosition = r
If CRwAPos = r Then selR = True Else selR = False
If CDbl(r) / 2# <> Int(r / 2) Then clr = 16513015 Else clr = 16777215 '15852772
For c = leftCol To mCols.Count
If selR And c = CurCol Then curC = True Else curC = False
 If Not IsNull(mRS.Fields(mCols(c).dFild)) Then s = mRS.Fields(mCols(c).dFild) Else s = ""
If selR Then
    If c = 1 Then
        ColIndex = 1
    ElseIf c = mCols.Count Then
        ColIndex = 2
    Else
        ColIndex = 0
    End If
Else
End If
DrowCell s, mCols(c), clr, , selR, curC, ColIndex
Next c
pGRD.CurrentY = pGRD.CurrentY + pCell.Height
pGRD.CurrentX = 0
Next r
mRS.Bookmark = CRwBM
End Sub

Private Sub DrowCell(txt As String, CurCol As Variant, BckClr As OLE_COLOR, _
    Optional HDR As Boolean = False, Optional SelRw As Boolean = False, _
    Optional curCell As Boolean = False, Optional ColPos As Byte = 0)
With pCell
    'If HDR Then .BackColor = 11894146 Else .BackColor = vbWhite
    If Not HDR Then .FontBold = CurCol.FBold Else .FontBold = True
    .Width = CurCol.Width
    If Not HDR Then .ForeColor = CurCol.FColor Else .ForeColor = vbWhite
    .CurrentY = .Height * 0.1 '(.TextHeight("") * 1.2 - .TextHeight("")) / 2
    If SelRw Then BckClr = 16775408 
    .BackColor = BckClr
End With
If HDR Then GoTo HdrRow
Select Case CurCol.TextAlign
Case colAlignLeft
HdrRow:
    pCell.CurrentX = 30
Case colAlignRight
    pCell.CurrentX = pCell.Width - pCell.TextWidth(txt) - 30
Case Else

End Select
pCell.Print txt
'If curCell Then Stop
pCell.CurrentX = 0: pCell.CurrentY = 0
If curCell Then
    pCell.Line Step(0, 0)-Step(pCell.Width - 15, pCell.Height - 10), 16727614, B
ElseIf HDR Then
    pCell.Line Step(pCell.Width - 10, 0)-Step(pCell.Width - 10, pCell.Height), 16777215, B
ElseIf SelRw Then
    If ColPos = 1 Then
        pCell.Line Step(pCell.Width - 10, 0)-Step(pCell.Width - 10, pCell.Height), 16777215, B
        pCell.CurrentX = 0: pCell.CurrentY = 0
        pCell.Line Step(0, 0)-Step(pCell.Width + 10, pCell.Height - 10), 16769217, B
    ElseIf ColPos = 2 Then
        pCell.Line Step(-50, 0)-Step(pCell.Width + 35, pCell.Height - 10), 16769217, B
    Else
        pCell.Line Step(pCell.Width - 15, 0)-Step(pCell.Width - 15, pCell.Height), 16777215, B
        pCell.CurrentX = 0: pCell.CurrentY = 0
        pCell.Line Step(-50, 0)-Step(pCell.Width + 100, pCell.Height - 10), 16769217, B
    End If
Else
    pCell.Line Step(pCell.Width - 10, 0)-Step(pCell.Width - 10, pCell.Height), 15720158, B
End If
pGRD.PaintPicture pCell.Image, pGRD.CurrentX, pGRD.CurrentY
pGRD.CurrentX = pGRD.CurrentX + pCell.Width
End Sub



Переменные в коде:
pGRD - PictureBox в котором таблица вся рисуется
pCell - PictureBox в котором рисуестя ячейка таблицы
mCols - коллекция, в которой хранятся настройки по каждому столбцу - ширина, цвет текста, выравнивание и т.п.
LeftCol - переменная, хранящая номер первого столбца на экране - для горизонтальной прокрутки
ScrRows - к-во строк, влезающее на экран (рисуются только они)
vSB - вертикальный скролбар
c, r - переменные для перебора в циклах соответственно столбцов и строк
CurCol - хранит номер столбца, в котором курсор
CRwAPos - хранит абсолютную позицию текущей записи в рекордсете
TRwAPos - то же для верхней строки на экране
LRwAPos - для последней строки на экране

там толщина линий сетки плывёт. Иногда фон проглядывает - возле тех же линий. На линиях курсора тоже толщина не одинаковая. Я сначала там DrowWidth ставил=1 - но линии вообще закрывались нижними и правыми ячейками. Поставил DrowWidth =2 - теперь они просто разной толщины.



Это сообщение отредактировал(а) kulibin - 7.2.2006, 18:57
PM MAIL WWW ICQ   Вверх
Naghual
Дата 8.2.2006, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

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



Дай описание коллекции mCols


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


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

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


 




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


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

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