On-line: гостей 2. Всего: 2 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 5971
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.07.18 12:15. Заголовок: Пример экспорта Tsbrowse в разные форматы (Tsb_Export)...


Всем привет.

Что то у меня цвета с таблицы Tsbrowse не такими экспортируются в XML.
Т.е. что-то в библиотеке hbxlsxml цвета по другому получаются...

В Tsb2xml.prg цвет задаю так:
 
nColor := oBrw:aColumns[nCol]:nClrBack
If hb_isBlock( nColor )
nColor := Eval(nColor, oBrw:nAt, nCol, oBrw )
end
// в aColors храним массивы ( строка, столбец. стиль )
Aadd( aColors, {nLine, nCol, "S" + hb_ntoc(nColor, 16)} )

Может неправильно делаю ?


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 71 , стр: 1 2 3 4 All [только новые]


moderator


Пост N: 1280
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 19.07.18 12:33. Заголовок: Andrey пишет: hb_nt..


Andrey пишет:

 цитата:
hb_ntoc(nColor, 16)


Возможно такое преобразование не корректно.
Надо на конкретном цвете проверить

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




Пост N: 5975
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.07.18 18:28. Заголовок: Haz пишет: Возможно..


Haz пишет:

 цитата:
Возможно такое преобразование не корректно.



Вот как выглядит это на экране:


Пример сегодня на почту отправлю к тебе.

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



Пост N: 1945
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 19.07.18 18:59. Заголовок: Andrey пишет: hb_nto..


Andrey пишет:
 цитата:
hb_ntoc(nColor, 16)


Что делает эта функция ?
Есть hb_NToColor( n )


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




Пост N: 3779
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 19.07.18 19:10. Заголовок: Андрей, я время от в..


Андрей, я время от времени запускаю этот пример на win10 с тем самым бешеным экселем 2016, который вываливается когда хочет:

Date: 14.07.2018 Time: 13:23:03
Error WINOLE/1006 Argument error: _SIZE (DOS Error -2146777998)
Called from WIN_OLEAUTO:_SIZE(0)

Date: 14.07.2018 Time: 13:24:32
Error WINOLE/1006 Argument error: _SIZE (DOS Error -2146777998)
Called from WIN_OLEAUTO:_SIZE(0)

Date: 14.07.2018 Time: 15:46:15
Error WINOLE/1009 No exported method: FONT (DOS Error -2147418111)
Called from WIN_OLEAUTO:FONT(0)
..
Date: 14.07.2018 Time: 16:35:37
Error WINOLE/1008 No exported variable: BOLD (DOS Error -2147418111)
Called from WIN_OLEAUTO:_BOLD(0)

Date: 14.07.2018 Time: 20:32:45
Error WINOLE/1007 Argument error: FONT (DOS Error -2147418111)
Called from WIN_OLEAUTO:FONT(0)

Date: 15.07.2018 Time: 08:31:07
Error WINOLE/1006 Argument error: _NUMBERFORMAT (DOS Error -2147418111)
Called from WIN_OLEAUTO:_NUMBERFORMAT(0)

Date: 15.07.2018 Time: 08:31:21
Error WINOLE/1009 No exported method: CELLS (DOS Error -2147418111)
Called from WIN_OLEAUTO:CELLS(0)

Date: 16.07.2018 Time: 20:51:07
Time from start: 0 days 0 hours 0 mins 20 secs
Error WINOLE/1009 No exported method: FONT (DOS Error -2147418111)
Called from WIN_OLEAUTO:FONT(0)

и так далее

Вчера ночью win10 вдруг возбудился и захотел обновиться до версии 1803. Я не возражал.

Сейчас запускаю пример, и (о чудо !) бешеный эксель утихомирился и стал работать как надо.
Может дело не в экселе, а в чудо-операционке виндоуз ?


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




Пост N: 6879
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 19.07.18 22:13. Заголовок: Pasha пишет: Может ..


Pasha пишет:

 цитата:
Может дело не в экселе, а в чудо-операционке виндоуз ?


Как говорил HAS , дело в правильном БИЛДЕ самого оффиса , не все они работают одинаково

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


Пост N: 1283
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.07.18 11:33. Заголовок: Andrey пишет: Приме..


Andrey пишет:

 цитата:
Пример сегодня на почту отправлю к тебе.


не надо мне на почту
замени там где цвет преобразуется в hex строку вместо ntoc(n. 16 ) на n2hex(n, 16)

Func N2HEX(n, b) 
local c := ntoc(n, b)
return right(c,2) + substr( c, 3, 2 ) + Left(c,2)



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


Пост N: 1284
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.07.18 11:43. Заголовок: SergKis пишет: hb_..


SergKis пишет:

 цитата:

hb_ntoc(nColor, 16)
Что делает эта функция ?
Есть hb_NToColor( n )



очепятка, не hb_ntoc(nColor, 16) , а просто ntoc( nColor, 16 ) . работает так же как hb_ntoHex( n )

к примеру цвет nColor := RGB(159,191,236)
ntoc( nColor, 16 ) выдаст "ECBF9F" как и hb_ntoHex (nColor ), но этому цвету соответствует "9FBFEC" - то есть крайние байты надо поменять. Мож еть что готовое , я не искал и сделал тупо через самописную N2HEX для этого случая


PS hb_NToColor( n ) у меня выдает непонятно что

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




Пост N: 5976
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.07.18 14:31. Заголовок: Pasha пишет: Может ..


Pasha пишет:

 цитата:
Может дело не в экселе, а в чудо-операционке виндоуз ?



Отличная новость. Будем знать теперь что влияет на программы.
Ниже версии 1803 - не использовать !

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




Пост N: 5977
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.07.18 14:47. Заголовок: Haz пишет: замени т..


Haz пишет:

 цитата:
замени там где цвет преобразуется в hex строку вместо ntoc(n. 16 ) на n2hex(n, 16)


Заменил. Цвета стали похожими. СПАСИБО !
Код был твой, я там мало что исправил...

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


Пост N: 1286
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 20.07.18 15:38. Заголовок: Andrey пишет: Код б..


Andrey пишет:

 цитата:
Код был твой, я там мало что исправил...


мой код , я и исправил

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




Пост N: 3785
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.07.18 16:34. Заголовок: Andrey пишет: Отлич..


Andrey пишет:

 цитата:
Отличная новость. Будем знать теперь что влияет на программы.
Ниже версии 1803 - не использовать !



Я бы не стал торопиться. И с 1709 экспорт в Excel временами работал, а потом вдруг начинал глючить. Подождем

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


Пост N: 331
Зарегистрирован: 29.05.10
ссылка на сообщение  Отправлено: 20.07.18 19:22. Заголовок: Dima пишет: Как гов..


Dima пишет:

 цитата:
Как говорил HAS , дело в правильном БИЛДЕ самого оффиса , не все они работают одинаково



Офисы разные , сборки офисов разные, инсталяции разные, системы разные , сборки систем разные, драйвера, машины и т.д.
Но дело в том , что не работает пример. Вот с ним и надо разбираться :))

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




Пост N: 3786
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.07.18 20:14. Заголовок: ММК пишет: Но дело ..


ММК пишет:

 цитата:
Но дело в том , что не работает пример. Вот с ним и надо разбираться :))



Не работает не только этот пример, но и все средства взаимодействия с экселем в моих программах. То есть не работает механизм работы с экселем через ole.
Я как-то с таким уже сталкивался, наверное все-таки это было в начале 16-го. Тогда я ничего не понял. А вот теперь счастье такое привалило: этот механизм не работает у меня на домашнем компе.
Вернее, то работает, то не работает. Сейчас вот работает. Я по прежнему ничего не понимаю, но хоть наблюдаю за пациентом, меряю температуру, так сказать.

Кстати, есть подозрение, что это связано с активацией офиса. Она время от времени слетает, и.. По хорошему на взаимодействие через ole это не должно влиять, но кто знает, что там в кишках у них

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




Пост N: 5978
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.07.18 16:23. Заголовок: Всем привет ! Пример..


Всем привет !
Пример закончил, однако вылезла одна неприятность.
После экспорта (модуль Tsb4xlsOle.prg или метод ExcelOle), пытаюсь поставить внизу колонки формулу суммы колонки.
Для целых чисел сумма создаётся, для дробной суммы пишет 0.
Вот так это выглядит:


Хотя тип колонки перед экспортом в Экселе указываю что колонка числовая.
Что делать/добавить/исправить нужно ?

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


Пост N: 1287
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.07.18 16:55. Заголовок: Andrey пишет: Хотя ..


Andrey пишет:

 цитата:
Хотя тип колонки перед экспортом в Экселе указываю что колонка числовая.


у тебя в Excel десятичный разделитель это точка ? что то мне подсказывает что должна быть запятая , а ты упорно кормишь excel точкой.
Excel давится и воспринимает это как строку и потом ты его просишь эти строки сложить математически


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




Пост N: 5979
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.07.18 17:14. Заголовок: Haz пишет: Excel да..


Haz пишет:

 цитата:
Excel давится и воспринимает это как строку


Понял. Спасибо !
Буду копать формат. Я у тебя нашёл - oBrw:aColumns[9]:XML_Format := "0.00_ ;[Red]\-0.00\ "

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


Пост N: 1288
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.07.18 17:54. Заголовок: Andrey пишет: уду к..


Andrey пишет:

 цитата:
уду копать формат. Я у тебя нашёл - oBrw:aColumns[9]:XML_Format := "0.00_ ;[Red]\-0.00\ "


Не трать время
копай лучше ExcelOle , где примерно так uData := Str( uData )
в харбур в качестве разделителя точка и точка будет в полученной строке. Все твои примеры выгрузки через олю дробные числа пишут как строку


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




Пост N: 6886
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.07.18 18:49. Заголовок: Haz пишет: у тебя ..


Haz пишет:

 цитата:

у тебя в Excel десятичный разделитель это точка


Мне думается по началу нужно считать системный разделитель , после проверить какой разделитель
использует Excel и уже его и тулить

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




Пост N: 5980
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.07.18 18:51. Заголовок: Да я уже оказывается..


Да я уже оказывается уже делал такое...
Блин, памяти нет вообще.
Вот делал в примере DBF_to_XLS_03.7z :
         nDecPole := FieldDec( FIELDNUM( cPole ) )  // для формата числа  
....
ELSEIF FIELDTYPE( cPole ) == "N"
IF nDecPole == 0 // значит целое число
oSheet:Cells( nLine, nI ):SET( 'NumberFormat', '## ### ###0' ) // числовая ячейка
ELSE
oSheet:Cells( nLine, nI ):SET( 'NumberFormat', '## ### ###0,00' ) // числовая ячейка
ENDIF
....

Пошёл исправлять.

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


Пост N: 1289
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.07.18 19:58. Заголовок: Andrey пишет: Пошёл..


Andrey пишет:

 цитата:
Пошёл исправлять


Ты не понял о чем я и Дима.
Далеко не уходи в исправлениях т. к. формат ячейки тут не причём.

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




Пост N: 5981
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.07.18 21:14. Заголовок: Haz пишет: копай лу..


Haz пишет:

 цитата:
копай лучше ExcelOle , где примерно так uData := Str( uData )


Да, я там уже исправил. Т.е. у себя в модуле. А исходник h_tbrowse.prg - не трогал.
Haz пишет:

 цитата:
Далеко не уходи в исправлениях т. к. формат ячейки тут не причём.


Ну если не задавать формата, то получиться фигня:

, т.е. потом самому юзеру придётся формат ставить на колонку.
А если задать формат, то всё нормально получается, с разделителем на 2 знака.
Я понимаю что может быть другой разделитель, т.е. как в Экселе заданы установки.
И сумма колонки теперь считается !
Спасибо за подсказки !

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




Пост N: 6887
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.07.18 21:26. Заголовок: Andrey пишет: Я пон..


Andrey пишет:

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


Ну так делай сразу правильно и не через

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


Пост N: 1290
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.07.18 21:36. Заголовок: Andrey пишет: Ну ес..


Andrey пишет:

 цитата:
Ну если не задавать формата


Ты с темы не соскакивай вопрос был почему не считает, ответ - потому что строки суммировать эксель не умеет. И формат тут по любому не причём.
Как сделать красиво вопроса не было
Что касается формата, есть еще разделители групп разрядов и как любят все финансисты - отрицательные числа в скобках и без минуса. Так что и красота у каждого своя



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




Пост N: 6888
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 23.07.18 21:44. Заголовок: Подсказка: ищи по ф..


Подсказка:
ищи по форуму GET_SDECIMAL Павел выкладывал а остальные 2 параметра сможешь считать из объекта Excel

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




Пост N: 5982
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 23.07.18 22:08. Заголовок: Спасибо ВАМ !!! :sm..


Спасибо ВАМ !!!

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




Пост N: 5986
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 31.07.18 17:31. Заголовок: Всём привет ! В ново..


Всём привет !
В новой версии МиниГуи 18.07 смотрите пример SAMPLES\Advanced\Tsb_Export
В примере:
1) Экспорт Tsbrowse в Word/Excel/OO Calc, форматы файлов: xls/xml/doc/dbf/csv
по дефолту - вывод только видимых колонок, но можно задать и свой вывод колонок.
2) Таблица может быть многостроковой (MULTILINE on) и экспорт на лист так же многостроковый.
3) Показ различных видов раскраски таблицы
4) Использование GRADIENTFILL для кнопок на форме
5) Можно загрузить/сохранить Tsbrowse из/в внешнего файла (TSB_NEW_FILE_EXTERN)
6) Величину строк в таблице и кол-во колонок можно задавать в CreateDatos()
7) Время экспорта в тот или иной формат можно посмотреть в _MsgLog.txt

Кто сможет сделать для этого примера ещё один экспорт в PDF ?
Т.е. нужно на основе Tsb4xlsOle.prg сделать экспорт в PDF.
Будет вообще отличный и законченный пример экспорта для МиниГуи.

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




Пост N: 5991
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.18 17:54. Заголовок: Всем привет. Кто зна..


Всем привет.
Кто знает, как картинку разместить на листе Экселя ?
Какие команды нужно использовать ?

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




Пост N: 6899
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.08.18 17:59. Заголовок: oRange:=oSheet:Range..


oRange:=oSheet:Range(osheet:cells(2,1),osheet:cells(2,1))
oExcel:ActiveSheet:Shapes:AddPicture(GetTempFolder()+"\logo.png",.F., .T., oRange:Left, oRange:Top, 78,59)


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




Пост N: 5992
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.08.18 21:06. Заголовок: Спасибо Dima ! :sm3..


Спасибо Dima !

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




Пост N: 5999
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.08.18 00:45. Заголовок: Ну и засада - вывест..


Ну и засада - вывести картинку на лист Экселя.
Беру размеры картинки через hb_GetImageSize( cDiskFile ), получаю размеры в пикселах (128х128).
Вывожу на лист Экселя - картинка раза в 2 больше оригинала.
Беру картинку через буфер обмена и видна БОЛЬШАЯ разница при выводе картинки.

Покопал в инете, нашёл интересные данные:
Эта хрень, очевидно, меряется в микрософтах. 1000 микрософтов = 1 миллисофт, 1000 миллисофтов = 1 софт. Эталонный экземпляр 1 софта хранится в Парижской Палате Мер и Софтов. В пиксели переводится по формуле 4 пикселя = 3 микрософта.
Интересна историческая подоплека появления такой единицы. Когда выбирался размер пикселя, ответственный за это Уильям Ворота (Сиэтл, США), выбрал пиксель равным 1/1024 ширины своей задницы. Когда дело дошло до выбора единицы измерений для свойств .Top и .Left у формы в Экселе, Уильям вспомнил о той своей концепции, и принял за единицу 1/1024 ширины своего зада. Однако он забыл учесть, что ввиду большого коммерческого успеха предыдущих продуктов его фирмы задница Уильяма стала шире на 33.3%. Так получилась новая единица измерения - микрософт....
На счет выбора единици измерений, points это еще не конец спектакля - в том же Access разработчикам очень полюбились
твипы (Твип - это 1/1440 дюйма). Вообщем, больше единиц измерений, хороших и разных, даешь.....
наверное такой плакат висит в комнате у программистов майкрософта....
Придётся наверное писать свою функцию для Экселя,
стандартная функция Экселя - oExcel:ActiveWindow:PointsToScreenPixelsY(128) какую то фигню выдаёт...

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




Пост N: 6901
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.08.18 09:05. Заголовок: Andrey Ты читал воо..


Andrey
Ты читал вообще какие параметры ?
https://msdn.microsoft.com/en-us/vba/excel-vba/articles/shapes-addpicture-method-excel

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




Пост N: 6000
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.08.18 11:46. Заголовок: Dima пишет: Ты чита..


Dima пишет:

 цитата:
Ты читал вообще какие параметры ?


Это не читал, читал на могучем:
https://msdn.microsoft.com/ru-ru/vba/excel-vba/articles/shapes-addpicture-method-excel
Не то, не срабатывает -1 !

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




Пост N: 6902
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 10.08.18 12:01. Заголовок: Andrey Можно еще пр..


Andrey
Можно еще пробнуть
oExcel:ActiveSheet:Pictures:Insert

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




Пост N: 6001
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 10.08.18 13:04. Заголовок: Вот Александр сделал..


Вот Александр сделал для этого функции 2:
 
aXY := hb_GetImageSize( cDiskFile )
aImage := { cDiskFile, aXY[1], aXY[2] }

oRange:=oSheet:Range(osheet:cells(1,1),osheet:cells(1,1))
oExcel:ActiveSheet:Shapes:AddPicture(aImage[1],0, -1, oRange:Left, oRange:Top, ;
PixelToPointX(aImage[2]),PixelToPointY(aImage[3]))
.....

///////////////////////////////////////////////////////////////////////////////////////////
Function PixelToPointX(iPixels)
Local lngDPI, rPixelToPoint
lngDPI = GetDPIX()
rPixelToPoint = (iPixels / lngDPI) * 72
Return rPixelToPoint

///////////////////////////////////////////////////////////////////////////////////////////
Function PixelToPointY(iPixels)
Local lngDPI, rPixelToPoint
lngDPI = GetDPIY()
rPixelToPoint = (iPixels / lngDPI) * 72
Return rPixelToPoint

#pragma BEGINDUMP

#include <windows.h>

HB_FUNC( GETDPIX )
{
HDC hDC = GetDC( GetDesktopWindow() );
hb_retni( ( LONG ) GetDeviceCaps(hDC, LOGPIXELSX) );
return;
}
HB_FUNC( GETDPIY )
{
HDC hDC = GetDC( GetDesktopWindow() );
hb_retni( ( LONG ) GetDeviceCaps(hDC, LOGPIXELSY) );
return;
}

#pragma ENDDUMP


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



Пост N: 208
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 10.08.18 14:44. Заголовок: Вот получил ошибку п..


Вот получил ошибку при попытке экспорта
Export to OLE-EXCEL 1 (XLS files)
Export to OLE-EXCEL 2 (XLS files)
в обеих случаях Excel нормально стартовал и выводил данные
Скрытый текст




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




Пост N: 1336
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 10.08.18 15:55. Заголовок: nick_mi пишет: полу..


nick_mi пишет:

 цитата:
получил ошибку при попытке экспорта


Благодарю за ссобщение.
Поправил исходник библиотеки TsBrowse для следующей сборки

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




Пост N: 6002
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 12.08.18 15:11. Заголовок: nick_mi пишет: Вот ..


nick_mi пишет:

 цитата:
Вот получил ошибку при попытке экспорта


А другой экспорт "New: Export to Ole-Excel 1 (xls)" - работает ?

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



Пост N: 209
Зарегистрирован: 19.05.05
ссылка на сообщение  Отправлено: 13.08.18 15:39. Заголовок: Да! Все остальные ча..


Да! Все остальные части нормально отработали

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




Пост N: 6003
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 13.08.18 19:14. Заголовок: Всем привет ! А мож..


Всем привет !

А можно как то убрать белые края на иконках в Tsbrowse ?
Если картинка квадратная, то красиво получается, а если нет то вот так получается:


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




Пост N: 6018
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.08.18 17:40. Заголовок: Сделал добавление в ..


Сделал добавление в пример (версия 9.7 - отправлена Григорию).
Вывод картинки и подзаголовка для модулей Tsb4DocOle.prg и Tsb4xlsOle.prg


Забыл ранее написать в чем разница эскпорт-ов:

1) Модуль - h_tbrowse.prg в библиотеке MiniGUI\SOURCE\TsBrowse и Tsb2xlsOleExtern.prg
2) Модуль - Tsb2doc.prg
Экспорт через буфер обмена.
При маленьких таблицах работает отлично, на больших таблицах НЕЛЬЗЯ делать другую работу, пока таблица не создастся. Юзера вечно открывают другие документы и начинают copy/paste использовать.
В результате в таблице пишется фигня всякая.... И вообще, очень нестабилен это метод.

3) Модуль - Tsb4xlsOle.prg
Экспорт через создание таблицы через массив ! Самый быстрый метод ! Большое спасибо за него, Pasha !
Таблица пишется блоками и их количество можно менять:
#define LINE_WRITE       100   // Количество строк для записи блоками 

4) Модуль - Tsb4DocOle.prg
Экспорт через метод Word'a создание таблицы.
oPar:Range:ConvertToTable(WordSeparatorBox,nRowDbf,nColDbf)


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




Пост N: 6116
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 06.11.18 14:22. Заголовок: Собрал проект Tsb_Ex..


Собрал проект Tsb_Export под MSVC 2017 64bit !
О чудо, на игровом компе, где раньше вылетало (меню "New: Export to Ole-Excel 1 (xls)"), теперь не вылетает !
Слава MSVC 2017.
Правда на меню "New: Export to Ole-Excel 2 (xls)" вылетает, что то с фонтами.

Разница в размере между 32бит и 64бит на 400Кб больше ехе-ник весит.

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




Пост N: 6124
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.11.18 22:03. Заголовок: Добавил следующее ме..


Добавил следующее меню - "Export to C# Dll Ole-Excel (xls)" !

Создание массивов таблицы и передача их в C# - ExcelOleLib.dll
сам проект ExcelOleLib.dll на C# (преобразование из массива и заполнение через OLE эксельной таблицы).

Вызов из харбора dll-ки на C# выглядит так:
 
aParam := { cFile, oBrw:nLen, aImage, aTTitle, aTTitle2, aTSuperHd, aTHeading, aTFooting, aTTitle3, aTCellType }

oCLR := CLR_RUNTIME():New("v4.0.30319") // clrdyn.dll - работа с Common Language Runtime
// (загрузка и выполнение C# сборок)
oAsm := oCLR:LoadAssembly("ExcelOleLib") // вызов ExcelOleLib.dll на C#
oExcel := oAsm:CreateInstance("Library.Runner")
//oAsm:CallStatic("Library.Debug", "PrintArray", aParam ) // отладка
oExcel:Call("SetSettings", aParam) // передача параметров в ExcelOleLib.dll на C#

oExcel:Call("AddData", aTCell) // передача массива всех ячеек таблицы
//oAsm:CallStatic("Library.Debug", "PrintArray", aTCell) // отладка

hExcelHandle := oExcel:Call("ShowAndGetHwnd") // возврат хендла окна экселя

На игровом компе не вылетает.
Большая просьба протестировать на ваших компах.

Сами ехе-ники собраны на 2-х компиляторах:
https://cloud.mail.ru/public/2QaA/52ay65T9T

Для работы с C# необходимы: clrdyn.dll и ExcelOleLib.dll
смотреть - http://clipper.borda.ru/?1-7-0-00000046-000-0-1-1540654515

Сами исходники отправлены Григорию.

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




Пост N: 6125
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.11.18 18:57. Заголовок: Вот пример аналог Ts..


Вот пример аналог Tsb_Export написанный на C# - https://cloud.mail.ru/public/2wYs/pJMfZSrtD
Демонстрация грида на C# - 239 Кб.
Исходники здесь - https://github.com/NoTimeForHero/TSBExport_CSharp/archive/master.zip

Обратите внимание на очень интересное поведение грида при растягивании окна !
Автоматом добавляются для всех колонок таблицы в той же пропорции что и была до растягивания.
Код на C# всего вот такой:


Как бы сделать ТАК ЖЕ и для Tsb_Export ?

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


Пост N: 1404
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 22.11.18 19:28. Заголовок: Andrey пишет: Как б..


Andrey пишет:

 цитата:
Как бы сделать ТАК ЖЕ


Так же и делай, по тому же алгоритму.
Есть же метод SetColSize(). Возможно не совсем плавная прорисов ка получится, но это другая история

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



Пост N: 2139
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 23.11.18 10:28. Заголовок: Haz пишет Так же и д..


Haz пишет
 цитата:
Так же и делай, по тому же алгоритму.


Можно задавать ВСЕ контролы в % к клиентской области и колонки тсб в % к ширине тсб.
Тогда не нужно сохранять OldWidth, всегда расчет от тек. width и %.
Фонты размеры так же наложить с учетом %.
Иногда исп. для форм. размеров 2-х окон (совместное использование) и контролов на них в % от desktop (c noresize)

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


Пост N: 1405
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 23.11.18 10:56. Заголовок: SergKis пишет: Можн..


SergKis пишет:

 цитата:
Можно задавать ВСЕ контролы в %


Согласен, тогда на разных мониторах будет приемлемо смотреться

Но ... Андрей хотел

 цитата:
сделать ТАК ЖЕ


и для этого в TS все есть, просто бери и делай

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




Пост N: 6130
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 28.11.18 18:52. Заголовок: Вот ещё один тестовы..


Вот ещё один тестовый проект - считывание DBF и передача его в Грид C# на DevExpress.
http://clipper.borda.ru/?1-7-0-00000046-000-0-1-1543420166
Пост N: 6129

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




Пост N: 6131
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.18 17:31. Заголовок: Возвращаюсь к измене..


Возвращаюсь к изменению ширин колонок Tsbrowse на окне.
Если сделать так:
      ON MAXIMIZE ( ResizeTable(oBrw) )              ; 
ON SIZE ( ResizeTable(oBrw) ) ;

То при изменение размеров окна таблица прямо таки вся мерцает (перерисовывается) !
Что не очень красиво.

В C# есть свойства для окна: Form_ResizeBegin(...) и Form_ResizeEnd(...)
Из-за этого там плавная перерисовка таблицы.

Можно ли как то в МиниГуи сделать похоже ?
Или как то клик мышки отловить, нажата она или отпустили её ?

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



Пост N: 2140
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.18 17:56. Заголовок: Andrey пишет То при ..


Andrey пишет
 цитата:
То при изменение размеров окна таблица прямо таки вся мерцает (перерисовывается) !


Может надо перевести пример на дискретные приращения размеров (масштаб +\- 10 %) к текущим значениям (кнопки zoom +\-)
Нажимай на окне примера кнопки Maximize, Normalize - приемлемо отображает, если тсб в светлых тонах, так совсем нормально

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


Пост N: 1408
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.11.18 18:04. Заголовок: Andrey пишет: Или к..


Andrey пишет:

 цитата:
Или как то клик мышки отловить, нажата она или отпустили её ?


в h_events.prg есть два события
WM_LBUTTONDOWN и WM_LBUTTONUP можешь вставить в них установку флага , а в процедуре ResizeTable этот флаг анализировать

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



Пост N: 2141
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.18 18:12. Заголовок: Haz пишет в h_events..


Haz пишет
 цитата:
в h_events.prg есть два события


Ловить их надо скорее в блоке кода тсб
:bEvents := {|oBrw, nMsg, nWParam, nLParam| ... }

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




Пост N: 6132
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.18 18:14. Заголовок: Haz пишет: в h_even..


Haz пишет:

 цитата:
в h_events.prg есть два события
WM_LBUTTONDOWN и WM_LBUTTONUP можешь вставить в них установку флага , а в процедуре ResizeTable этот флаг анализировать



Если я вставлю, то код точно работать не будет !
Да и это только у меня будет, а в других версиях потом не будет.
Как бы сделать общий код для всех, чтобы Григорий добавил в МиниГуи ?

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



Пост N: 2142
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 29.11.18 18:33. Заголовок: Andrey пишет Как бы ..


Andrey пишет
 цитата:
Как бы сделать общий код для всех, чтобы Григорий добавил в МиниГуи ?


Код общий чего надо вставлять ?
resize мне, к примеру совсем не нужен для работы с данными базы и клиента это вполне устраивает.
Все размеры идут от фонта _HMG_DefaultFont... устанавливаются извне.
Если понадобится обработчик для ловли сообщений, то сделать вполне можно
:bEvents := {|oBrw, nMsg, nWParam, nLParam| MyEvents(oBrw, nMsg, nWParam, nLParam) }
FUNC MyEvents(oBrw, nMsg, nWParam, nLParam)
If nMsg == WM_LBUTTONDOWN
...
ElseIf nMsg == WM_LBUTTONUP
...
EndIf
Return 0 // если выполнение главной Events(...) продолжать
или
Return 1 // если выполнение главной Events(...) НЕ продолжать, все уже сделано

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




Пост N: 6133
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 29.11.18 19:59. Заголовок: SergKis пишет: Код ..


SergKis пишет:

 цитата:
Код общий чего надо вставлять ?


Да я не про то подумал.

SergKis пишет:

 цитата:
resize мне, к примеру совсем не нужен для работы с данными базы и клиента это вполне устраивает.
Все размеры идут от фонта _HMG_DefaultFont... устанавливаются извне.


Согласен, но хочется сделать изменяемое окно. Или хотя бы попробовать сделать.
Т.е. типа такого ?
STATIC FUNCTION ResizeTable(oBrw) 
...
oBrw:bEvents := {|oBrw, nMsg, nWParam, nLParam| MyEvents(oBrw, nMsg, nWParam, nLParam) }
....


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


Пост N: 1409
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 29.11.18 20:39. Заголовок: SergKis пишет: Лови..


SergKis пишет:

 цитата:
Ловить их надо скорее в блоке кода тсб


Не проверял, но есть сомнения что это сработает когда таскаем за угол парент окна.

Проверил по быстрому , клики естественно ловятся только на TSB, парент окно на котором TSB - хоть обкликайся. Значит клики при таскании парента за угол так не поймать

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


Пост N: 1410
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 11:21. Заголовок: Andrey пишет: Если ..


Andrey пишет:

 цитата:
Если я вставлю, то код точно работать не будет !
Да и это только у меня будет, а в других версиях потом не будет.
Как бы сделать общий код для всех, чтобы Григорий добавил в МиниГуи ?



На деле все просто если хотя бы заглянуть в исходник . А в нем при нажатии кнопки устанавливаются переменные
 
_HMG_MouseRow := HIWORD( lParam )
_HMG_MouseCol := LOWORD( lParam )
_HMG_MouseState := 1, 2, 3 - зависит от какую кнопку давим


При отпускании
 
_HMG_MouseState := 0


Вот чтобы точно работало - ничего точно вставлять в общий код не надо. Надо в своем проверять _HMG_MouseState

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




Пост N: 6134
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.11.18 11:57. Заголовок: Haz пишет: Вот чтоб..


Haz пишет:

 цитата:
Вот чтобы точно работало - ничего точно вставлять в общий код не надо. Надо в своем проверять _HMG_MouseState



Понял. СПАСИБО !

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




Пост N: 6135
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 30.11.18 12:16. Заголовок: Нет изменения _HMG_M..


Нет изменения _HMG_MouseState в функции ResizeTable(), всегда возвращает 0.
Как тогда делать ?
STATIC FUNCTION ResizeTable(oBrw) 

nMouseState := _HMG_MouseState
nMouseRow := _HMG_MouseRow
nMouseCol := _HMG_MouseCol

? "nMouseState=", nMouseState, nMouseRow, nMouseCol
....

nMouseState= 0 410 1252
nMouseState= 0 410 1252
nMouseState= 0 410 1252

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


Пост N: 1411
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 12:38. Заголовок: Andrey пишет: Нет и..


Andrey пишет:

 цитата:
Нет изменения _HMG_MouseState в функции ResizeTable(), всегда возвращает 0.
Как тогда делать ?


Искать косяки , спецом проверил при нажатии и отпускании переменная меняется
Проверял так
DEFINE TIMER Timer_MTest OF Form_1 INTERVAL 100 ACTION {|| SetProperty( "Form_1", "TITLE", hb_NTOC( M->_HMG_MouseState ) ) }

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


Пост N: 1412
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 12:44. Заголовок: Andrey пишет: Нет и..


Andrey пишет:

 цитата:
Нет изменения _HMG_MouseState в функции ResizeTable(), всегда возвращает 0.


При таскании за угол - не меняется (НОЛЬ)
тогда искать другое решение

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


Пост N: 1413
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 13:22. Заголовок: Haz пишет: При таск..


Haz пишет:

 цитата:
При таскании за угол - не меняется (НОЛЬ)
тогда искать другое решение


Ловится через WAPI_GETKEYSTATE()

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



Пост N: 2143
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.11.18 15:06. Заголовок: Haz пишет Значит кли..


Haz пишет
 цитата:
Значит клики при таскании парента за угол так не поймать


Да это так, но и в др. местах не очень ловится

 цитата:
Ловится через WAPI_GETKEYSTATE()


Не ловится, как и через _HMG_MouseState
Добавил Скрытый текст

т.е. не поймали нажатие WM_LBUTTONDOWN, WM_LBUTTONUP, т.к. ловится нажатия над окном, но не при resize

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


Пост N: 1414
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 15:19. Заголовок: SergKis пишет: Не л..


SergKis пишет:

 цитата:
Не ловится,



Ловится ! У WAPI_GETKEYSTATE() есть параметр
WAPI_GETKEYSTATE( VK_LBUTTON ) при попытке ресайза парент окна за угол возвращает значение по модулю больше 1 при нажатой кнопке и 0/1 при отпускании

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



Пост N: 2144
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.11.18 15:35. Заголовок: Haz пишет У WAPI_GET..


Haz пишет
 цитата:
У WAPI_GETKEYSTATE() есть параметр


Добавил в примере параметр, теперь вывод выглядит примерно так:
? procname(), ..., 'VK_LBUTTON', WAPI_GETKEYSTATE(VK_LBUTTON), '_HMG_MouseState', _HMG_MouseState
получил файл Скрытый текст

т.е. во всех событиях, кроме timer значение -127
и надо переносить перерисовку на on timer ?

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


Пост N: 1415
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 15:40. Заголовок: SergKis пишет: и на..


SergKis пишет:

 цитата:
и надо переносить перерисовку на on timer ?



Нет , в процедуре по On Resize если -127 то не рисуем бровс, а ждем когда отпустят кнопку .
Но парадокс в том когда ее отпустят - то и on Resize уже не вызовется

ЗЫ таймер я испорльзовал для простоты и наглядности

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


Пост N: 1416
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 15:46. Заголовок: Haz пишет: Но парад..


Haz пишет:

 цитата:
Но парадокс в том когда ее отпустят - то и on Resize уже не вызовется



Получается с началом ON RESIZE запускаем сторожа ( через поток или через таймер ) и в нем ждем когда кнопка освободится.
Потом перерисовываем бровс в новых размерах.

Все реализуемо, но мне оно тоже не надо )))

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



Пост N: 2145
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 30.11.18 15:49. Заголовок: SergKis пишет т.е. в..


SergKis пишет
 цитата:
т.е. во всех событиях, кроме timer значение -127


Еще -128 появляется, точно не понял от чего, но похоже чередуются с -127, но может и не так
Haz пишет
 цитата:
Но парадокс в том когда ее отпустят - то и on Resize уже не вызовется


Потому и переносить прорисовку надо на куда то и timer активировать.
Мудрено как то. По мне лучше zoom +\- 10% к ширине окна добавлять и плясать перерисовкой контролов

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


Пост N: 1417
Зарегистрирован: 20.02.11
ссылка на сообщение  Отправлено: 30.11.18 15:54. Заголовок: SergKis пишет: Еще ..


SergKis пишет:

 цитата:
Еще -128 появляется, точно не понял от чего, но похоже чередуются с -127, но может и не так
Haz пишет


Именно так , сам не пойму почему
Чередуется -127/-128 и 0/1

SergKis пишет:

 цитата:
Мудрено как то


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

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





Пост N: 113
Зарегистрирован: 23.06.08
ссылка на сообщение  Отправлено: 02.12.18 19:42. Заголовок: Haz пишет: Получает..


Haz пишет:

 цитата:
Получается с началом ON RESIZE запускаем сторожа ( через поток или через таймер ) и в нем ждем когда кнопка освободится.
Потом перерисовываем бровс в новых размерах.


Зачем так сложно, когда в WinApi есть готовые WM_ENTERSIZEMOVE/WM_EXITSIZEMOVE?
Они же, кстати, и используются в C# под капотом у Form->ResizeBegin/ResizeEnd.

Andrey пишет:

 цитата:
Как бы сделать ТАК ЖЕ и для Tsb_Export ?


Через свою функцию-обработчик сообщений:
 
PROCEDURE Main()
SET EVENTS FUNCTION TO MYEVENTS
DEFINE WINDOW Form_1 ;
// ...........
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
RETURN

#define WM_ENTERSIZEMOVE 0x0231
#define WM_EXITSIZEMOVE 0x0232

FUNCTION MyEvents ( hWnd, nMsg, wParam, lParam )
DO CASE
CASE nMsg == WM_ENTERSIZEMOVE
Form1_ResizeBegin()
CASE nMsg == WM_EXITSIZEMOVE
Form1_ResizeEnd()
OTHERWISE
Events ( hWnd, nMsg, wParam, lParam )
ENDCASE
RETURN Events ( hWnd, nMsg, wParam, lParam )

Было бы хорошо, если эти события добавили в MiniGUI к Window, чтобы можно было просто задавать ON SIZE_BEGIN / SIZE_END.

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



Пост N: 2146
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 03.12.18 08:26. Заголовок: SkyNET пишет Через с..


SkyNET пишет
 цитата:
Через свою функцию-обработчик сообщений: ...
Было бы хорошо, если эти события добавили в MiniGUI к Window, чтобы можно было просто задавать ON SIZE_BEGIN / SIZE_END.



Тогда все, действительно, получается хорошо. Скрытый текст


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




Пост N: 6148
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.12.18 00:04. Заголовок: Вышла новая версия п..


Вышла новая версия примера Tsb_Export(9.88).
Реализована плавное увеличение окон и автоматическое увеличение/уменьшение таблицы.
Спасибо большое Григорию и Сергею за помощь !

Большая просьба протестировать на ваших компах следующее меню - "Export to C# Dll Ole-Excel (xls)" !
И результаты пожалуйста напишите здесь.

У меня даже на игровом компе не вылетает.
Григорий пишет, что у него на 7-ке вылетает.

Сами ехе-ники собраны на 2-х компиляторах:
https://cloud.mail.ru/public/C2ae/pkQkZh9kY

В системе должен быть установлен Microsoft.NET Framework версии 4.0.3 и выше.

Заранее благодарю за помощь.

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

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