On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение
Администратор




Пост N: 1817
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.02.11 17:47. Заголовок: Ширина области данных грида


Пусть грид живет в окне
Как точно посчитать ширину области данных грида ?
надо отнять ширину скроллбара:
GetSysMetrics( SM_CYVSCROLL )
и еще что ? там этих констант SM_* ... много
Дело в том, что я что-то не учитываю. У меня на winxp ширина получается точно, а на win7 - нет, какие-то красивости не учитываю

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 8 [только новые]


администратор




Пост N: 2041
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.02.11 19:04. Заголовок: Pasha MMK спросить ..


Pasha
MMK спросить надо ,он Семерку юзает :)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 59
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 04.02.11 19:08. Заголовок: Dima пишет: MMK спр..


Dima пишет:

 цитата:
MMK спросить надо ,он Семерку юзает :)


Слушаюсь, мой Генерал!!! :)
Есть у меня примерчик- на бровсе при ресайзе пропорционально меняется ширина столбцов. Может натолкнет на мысль :))
#define SM_CYVSCROLL 20
#define SM_CXHSCROLL 21
#define SM_CXSCREEN 0
#define SM_CYSCREEN 1
#define SM_CYCAPTION 4

function main()

local oWnd, oBrw
local aArray := {}
local aColWidth := array( 13 ) // 13 columns
local nI, nWd, nHt, nFactor

for nI = 1 to 20
aadd( aArray, { StrZero(nI,2),;
SPACE( 5 ),;
SPACE( 5 ),;
SPACE( 5 ),;
SPACE( 5 ),;
SPACE( 5 ),;
SPACE( 5 ),;
SPACE( 5 ),;
SPACE( 5 ),;
SPACE( 5 ),;
SPACE( 5 ),;
SPACE( 5 ),;
SPACE( 5 ) } )
next

nWd := GetSysMetrics(SM_CXSCREEN) * .5
nHt := GetSysMetrics(SM_CYSCREEN) * .3


DEFINE WINDOW oWnd Title "Test Resized xBrowse " from 50,0 to nHt, nWd PIXEL


oBrw:= txbrowse():new( oWnd )
oBrw:nRowHeight := 25
oBrw:nColDividerStyle := LINESTYLE_BLACK
oBrw:nRowDividerStyle := LINESTYLE_BLACK
oBrw:nMarqueeStyle := MARQSTYLE_HIGHLCELL
oBrw:SetArray( aArray )
oBrw:CreateFromCode()
oBrw:lRecordSelector := .t.
oBrw:lVScroll := .t.
oBrw:nWidth := oWnd:nWidth - if( oBrw:lVScroll, GetSysMetrics(SM_CYVSCROLL), 0 )
oBrw:nHeight := oWnd:nHeight - GetSysMetrics(SM_CYCAPTION) - if( oBrw:lVScroll, GetSysMetrics( SM_CYVSCROLL ),0)

nFactor := ( ( if( oBrw:lRecordSelector,55,30) + ;
if( oBrw:lVScroll, GetSysMetrics( SM_CYVSCROLL ),15) ) / oWnd:nWidth ) / len( aColWidth )


aColWidth[ 1 ]:= 0.1
oBrw:aCols[ 1 ]:nWidth := oBrw:nWidth * ( aColWidth[ 1 ] - nFactor )

for nI = 2 to len( oBrw:aCols )
aColWidth[ nI ] := 0.9 / ( len( aColWidth ) - 1 )
oBrw:aCols[ nI ]:nWidth := oBrw:nWidth * ( aColWidth[ nI ] - nFactor )
next


oWnd:bResized := {|| nFactor := ( ( if( oBrw:lRecordSelector,55,30) + ;
if( oBrw:lVScroll, GetSysMetrics( SM_CYVSCROLL ),15) ) / oWnd:nWidth ) / len( aColWidth ) ,;
oBrw:nWidth := oWnd:nWidth - if( oBrw:lVScroll, GetSysMetrics(SM_CYVSCROLL), 0 ) ,;
aeval( oBrw:aCols, {| o,nI | o:nWidth := oBrw:nWidth * ( aColWidth[ nI ] - nFactor ) } ),;
oBrw:Refresh() }

ACTIVATE WINDOW oWnd


Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1818
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 04.02.11 20:04. Заголовок: Я уточню задачу. Пус..


Я уточню задачу. Пусть я уже посчитал ширину области данных грида nWidth. И мне надо расчитать ширину окна, в которое этот грид надо затолкать, чтобы попасть пиксель-в-пикель
Я к nWidth прибавляю GetSysMetrics( SM_CYVSCROLL ), еще несколько пикселей, определенных эмпирически, и в xp попадаю. А в семерке - нет
Там может граница окна шире. Как ее учесть ?

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 83
Зарегистрирован: 17.06.10
ссылка на сообщение  Отправлено: 04.02.11 21:59. Заголовок: Может, учитывая верс..


Может, учитывая версию Windows, иметь глобальный корректор координат ?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2042
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.02.11 11:19. Заголовок: Pasha Не оно ? SM_C..


Pasha
Не оно ?
SM_CXFRAME // тебе нужно это
SM_CYFRAME

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 60
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 05.02.11 11:26. Заголовок: fil пишет: и в xp п..


fil пишет:

 цитата:
и в xp попадаю. А в семерке - нет
Там может граница окна шире. Как ее учесть ?


Вот "картинка " примера



При разворачивании (max) левая и правая границы ( на рис.отмечено знаком ! ) не отображаются, но это вообще для всех окон

Можно увидеть , что получается и что должно быть?

Спасибо: 0 
ПрофильЦитата Ответить
администратор




Пост N: 2043
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 05.02.11 11:42. Заголовок: Pasha Глянь , может ..


Pasha
Глянь , может чем поможет
http://www.rsdn.ru/forum/winapi/2762701.flat.1.aspx<\/u><\/a>

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1819
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 05.02.11 12:40. Заголовок: Dima пишет: Глянь ,..


Dima пишет:

 цитата:
Глянь , может чем поможет
http://www.rsdn.ru/forum/winapi/2762701.flat.1.aspx<\/u><\/a>



Спасибо, этот оно
Буду учитывать параметры:

SM_CXDLGFRAME ?
SM_CXBORDER 1 window border width
SM_CXEDGE 2 window 3d border width
SM_CXSIZEFRAME 4 window sizing frame width
SM_CXVSCROLL 17


Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 99
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет