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




Пост N: 5855
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 14.05.18 21:33. Заголовок: Вылет из программы...


Всем привет !
Как можно в МиниГуи программе сделать вызов своих функций при аварийном завершении программы (т.е. при вылете) ?
Т.е. хочу сделать сразу после появления MsgBox() вызов 2-3 функций и потом сделать DbCloseAll().
Как это реализовать ?

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

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


постоянный участник




Пост N: 3634
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.21 17:03. Заголовок: Andrey пишет И как п..


Andrey пишет
 цитата:
И как понять из-за чего свалилась программа ?


тут
Called from SITEDBFLOG(1093) in module: Source\form_site.prg
Called from COPYPGSQL3ALGORITM(1293) in module: Source\form_site.prg
Сообщение о ON RELEASE это уже следствие, т.к. окно нормальное, наверно, есть и окно WaitWindow висит индикатором.

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




Пост N: 6925
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.21 22:03. Заголовок: Понял тебя. Убрал на..


Понял тебя. Убрал нафиг это самописное окно, поставил стандартное и сделал вывод в лог-файл.
Спасибо !

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




Пост N: 6926
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 22.03.21 22:30. Заголовок: Вот сегодняшняя ошиб..


Вот сегодняшняя ошибка у юзера.
На кнопке вызываю контекстное меню - примерно как в примере SAMPLES\BASIC\Menu\menudemo6.prg
У меня не вылетает, а у юзера 7 минут работы и вылет...
Вот такая ошибка:
 
Time from start: 0 days 1 hours 7 mins 13 secs
Error MGERROR/0 Form Form_3Card is not defined. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(100) in module: h_error.prg
Called from GETFORMHANDLE(2248) in module: h_windows.prg
Called from _DEFINECONTEXTMENU(709) in module: h_menu.prg
Called from DYNAMICCONTEXTMENUEXTEND(159) in module: Source\menu_context.prg
Called from SPISKI_MENU_PRINT(808) in module: Source\tsb_form_card.prg
Called from (b)FORM_TSB_CARD(274) in module: Source\tsb_form_card.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from TWNDDATA:DOEVENT(726) in module: h_objects.prg
Called from DO_ONWNDLAUNCH(250) in module: h_objmisc.prg
Called from (b)INIT(123) in module: h_init.prg
Called from EVENTS(1241) in module: h_events.prg
Called from MYEVENTSHANDLER(1511) in module: Source\main.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(1516) in module: h_windows.prg
Called from FORM_TSB_CARD(282) in module: Source\tsb_form_card.prg

Вот код:
   _ShowContextMenu(cForm, nY, nX, .F. ) ; InkeyGui(10)  // menu runs through the queue 

RELEASE FONT Font_1dcm
RELEASE FONT Font_2dcm

DEFINE CONTEXT MENU OF &cForm // deleting menu after exiting - строка 159
END MENU

И почему окно теряется ? Как исправить ?

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




Пост N: 3635
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 22.03.21 22:52. Заголовок: Andrey пишет И почем..


Andrey пишет
 цитата:
И почему окно теряется ? Как исправить ?


Почему нет окна, ты скорее ответишь. Исправить, как обычно
 
IF _IsWindowDefined( cForm )
DEFINE CONTEXT MENU OF &cForm // deleting menu after exiting - строка 159
END MENU
ENDIF


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




Пост N: 6932
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.04.21 15:34. Заголовок: Появляется периодиче..


Появляется периодически вот такая ошибка:
Error BASE/2020 Неверный аргумент: PQRESULTSTATUS 
--------------------------------- Stack Trace ---------------------------------
Called from PQRESULTSTATUS(0)
Called from TPQSERVER:LISTTABLES(237) in module: tpostgre.prg
Called from MYISTABLEPG(122) in module: Source\use_Postgres.prg
Called from PGSQLMYOTVET(554) in module: Source\form_site2otvet.prg
Called from DOWNLDOTVETMAST(354) in module: Source\form_site2otvet.prg
Called from (b)SHOW_OTVETMASTER(198) in module: Source\form_site2otvet.prg

Вылет идёт в модуле самой библиотеки.
А как понять и исправить чтобы не вылетало ?

Во второй программе такая же ошибка:
 
Error BASE/2020 Неверный аргумент: PQRESULTSTATUS</p>
--------------------------------- Stack Trace ---------------------------------
Called from PQRESULTSTATUS(0)
Called from TPQSERVER:LISTTABLES(237) in module: tpostgre.prg
Called from MYISTABLEPG(122) in module: use_Postgres.prg
Called from PGSQLMYOTVET(616) in module: form_site3otvet.prg
Called from DOWNLDOTVETMAST(544) in module: form_site3otvet.prg
Called from (b)FORM_OTVETMASTER(269) in module: form_site3otvet.prg
Called from DO_WINDOWEVENTPROCEDURE(82) in module: h_objmisc.prg
Called from TWNDDATA:DOEVENT(726) in module: h_objects.prg
Called from DO_ONWNDLAUNCH(250) in module: h_objmisc.prg
Called from (b)INIT(123) in module: h_init.prg
Called from EVENTS(1241) in module: h_events.prg


Посмотрел сам исходник:
 
METHOD ListTables() CLASS TPQserver

LOCAL result := {}
LOCAL i

LOCAL res := PQexec( ::pDB, ;
"SELECT table_name" + ;
" FROM information_schema.tables" + ;
" WHERE table_schema = " + DataToSql( ::Schema ) + " AND table_type = 'BASE TABLE'" )

IF ( ::lError := PQresultStatus( res ) != PGRES_TUPLES_OK )
::cError := PQresultErrorMessage( res )
ELSE
FOR i := 1 TO PQlastrec( res )
AAdd( result, PQgetvalue( res, i, 1 ) )
NEXT
::cError := ""
ENDIF

RETURN result // строка 237

Мой исходник:
   cPgTable := "response" 
// Проверка на существование таблицы
lRet := MyIsTablePg( cPgTable, M->oServer )
IF !lRet
? "Нет таблицы ["+cPgTable+"] на СЕРВЕРЕ-БД !" // выводим надпись
......

// Проверка на существование таблицы
FUNCTION MyIsTablePg( cNamePgTable, oSrvPg )
LOCAL oTbl, cTable, lSeek := .f.

cTable := LOWER( cNamePgTable )
oTbl := oSrvPg:ListTables() // строка 122
? ProcNL()

Я библиотеку C:\MiniGUI\SOURCE\HbPgSql собрал ещё в 2017 году и так не менял. А нужно менять ?

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




Пост N: 3709
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 08.04.21 16:42. Заголовок: Andrey пишет А как п..


Andrey пишет
 цитата:
А как понять и исправить чтобы не вылетало ?


Ты уже приходил с таким вопросом и даже согласился использовать begin .. sequnce ...
И где оно ...
Например так сделать
 
FUNC aSrvPgListTables( oSrvPg, nWhl )
LOCAL lRet, oTbl

Default nWhl := 10
WHILE nWhl-- > 0
lRet := .F.
BEGIN SEQUENCE WITH { |e|break(e) }
oTbl := oSrvPg:ListTables()
lRet := .T.
END SEQUENCE
IF lRet ; EXIT
ENDIF
wApi_Sleep(100)
END
Default oTbl := {}

RETU oTbl

И замени
oTbl := oSrvPg:ListTables()
на
oTbl := aSrvPgListTables(oSrvPg, 20) // ~ 2 сек.
IF Empty(oTbl) ; MsgStop("Нет данных о таблице[ах]", "ERROR")
ENDIF

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




Пост N: 6933
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 08.04.21 17:25. Заголовок: SergKis пишет: Ты у..


SergKis пишет:

 цитата:
Ты уже приходил с таким вопросом и даже согласился использовать begin .. sequnce ...


Да поставил дополнительно PQping( M->cPubPgConnInfo ) // проверка доступности сервера
и пропала та ошибка, сейчас другая вылезла.
Спасибо !

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




Пост N: 6937
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 09.04.21 18:02. Заголовок: Блин, как это достал..


Блин, как это достало...
Переделал сохранение данных вместо формы на контейнер, т.е. на окно делаю так:
      (This.Object):Cargo := oKeyData()   // создать объект (контейнер) для окна &cFormName 
oCrg := (This.Object):Cargo
oCrg:aGlobalSection := aGlobalSection
oCrg:aRunFunc := {cGlobSection,cFormName,nTable}
oCrg:cAlias := ALIAS()
oCrg:aMemIndexOpen := aCargoMemIndexOpen
... и т.д. порядка 20 переменных

Прога перестала падать в местах где читаю/записываю данные в контейнер.
Всего 4 раза упала за этот день, и то 2 раза по ОДИНАКОВОЙ ошибке. Достижение.
Классно ! Спасибо SergKis !

Но вот с выводом сообщений на форму - беда. Теперь там стала падать.
Вот ошибка:
User: SERVER/User2/Алла 
1раз - Time from start: 0 days 1 hours 16 mins 27 secs
2раз - Time from start: 0 days 3 hours 6 mins 56 secs
Error MGERROR/0 Control: Label_Filter Of Form_Table_Abon Not defined. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(0)
Called from VERIFYCONTROLDEFINED(0)
Called from GETPROPERTY(0)
Called from TSBLBL_FILTER(890) in module: Source\Tbrw_table.prg
Called from MYINITFORMTABLE(839) in module: Source\Tbrw_table.prg
Called from (b)FORM_MYTABLE(353) in module: Source\Tbrw_table.prg
Called from DO_WINDOWEVENTPROCEDURE(0)
Called from TWNDDATA:DOEVENT(0)
Called from DO_ONWNDLAUNCH(0)
Called from (b)INIT(0)
Called from EVENTS(0)
Called from MYEVENTSHANDLER(1539) in module: Source\main.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(0)
Called from FORM_MYTABLE(706) in module: Source\Tbrw_table.prg
Called from TBRWABONENT(36) in module: Source\Tbrw_1Run.prg
Called from (b)HB_MACROBLOCK(0) ....

Вот мой код:
FUNCTION TsbLbl_Filter(cForm, cLabel) 
LOCAL nLblWidth := GetProperty(cForm, "Label_Filter", "Width") // строка 890
LOCAL nSize := GetProperty(cForm, "Label_Filter", "FontSize" )
LOCAL cFont := GetProperty(cForm, "Label_Filter", "FontName" )
LOCAL cStroka := "Поиск: " + cLabel
// nSize и cFont оставил для изменения шрифта для длиного текста
SetProperty(cForm, "Label_Filter", "Value" , cStroka)
SetProperty(cForm, "Label_Filter", "Tooltip" , cStroka)

RETURN NIL

И как эту ошибку обойти ? Куда делся объект Label_Filter с формы ?
Форма на экране, объект тоже должен быть - ОКНО ЖЕ НЕ ЗАКРЫТО !

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




Пост N: 6941
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 16.04.21 17:33. Заголовок: Всем привет ! Хочу п..


Всем привет !
Хочу поделиться своим опытом по работе ТСБ в МиниГуи.
Делал программу, одновременная работа одного модуля с пятью похожими таблицами.
Кол-во полей для редактирования от 50 до 200.
Прога создавалась с 2015 года, вроде работала, но коряво,
постоянно терялись объекты на окнах и вылет программы.
За день раз 10 программа могла упасть у одного пользователя, а если открывал несколько таблиц, то труба,
обязательно упадёт.

Пока не помог SergKis исправить данную ситуацию, перевести все на контейнер и события !
Огромное спасибо тебе SergKis !
Сейчас прога перестала вылетать на этом модуле. Правлю другие вылеты проги.

Кому интересно, привожу заготовку как надо делать.
На кнопки всегда ставлю НОМЕР события и имя объекта (имя кнопки), а уже в событие ставлю функции обработки.
Писать код в событиях одно удовольствие.

В ини-файле описываю все поля, цвета, кнопки таблицы, иконки, фонты и т.д.
Скрытый текст

Примерный шаблон программы:
Скрытый текст


Полная функция вывода кнопки:
Скрытый текст


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




Пост N: 6944
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.04.21 16:38. Заголовок: Очередной вылет из п..


Очередной вылет из программы:
Error DBFCDX/1022 Требуется блокировка 
--------------------------------- Stack Trace ---------------------------------
Called from FIELDPUT(0)
Called from MYSAVECARD(2737) in module: Source\Tbrw_fCard.prg
Called from (b)MYCARDFIELDGETBOX(1983) in module: Source\Tbrw_fCard.prg
Called from _DOCONTROLEVENTPROCEDURE(0)
Called from EVENTS(0)
Called from MYEVENTSHANDLER(1554) in module: Source\main.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(0)
Called from SHOW_CARD(373) in module: Source\Tbrw_fCard.prg
Called from MYCARDTABLE(3362) in module: Source\Tbrw_table.prg
Called from MYACTIONENTER(1604) in module: Source\Tbrw_table.prg
Called from (b)FORM_MYTABLE(688) in module: Source\Tbrw_table.prg
Called from DO_WINDOWEVENTPROCEDURE(0)
Called from TWNDDATA:DOEVENT(0)
Called from DO_ONWNDLAUNCH(0)
Called from (b)INIT(0)
Called from EVENTS(0)

Вот код программы:
 
// сетевой захват записи
IF (cAlias)->(RLock())

FOR nI := 1 TO LEN(aStatEditFields)
cObj := aStatEditFields[ nI, 1 ]
cFld := aStatEditFields[ nI, 2 ]
If ( nPos := FieldPos(cFld) ) > 0
FieldPut( nPos, _GetValue(cObj, cForm) ) // строка 2737
//MsgLog(nI,cObj,cFld, _GetValue(cObj, cForm) )
EndIf
NEXT

(cAlias)->KOPERAT := M->nOperat
(cAlias)->DATEVVOD := DATE()

Почему вылет, что не так делаю ?

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




Пост N: 7325
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.04.21 16:57. Заголовок: (cAlias)->(Field..


(cAlias)->(FieldPut(..........

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




Пост N: 6945
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.04.21 17:16. Заголовок: Спасибо Dima ! :sm3..


Спасибо Dima !
Уже про это Сергей писал, да я код старый перекинул, торопился и вот результат...
Ошибка плавающая, вылазит только когда несколько таблиц открываю, т.е. после переключения между таблицами.

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




Пост N: 7326
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 20.04.21 21:40. Заголовок: Andrey пишет: Ошибк..


Andrey пишет:

 цитата:
Ошибка плавающая, вылазит только когда несколько таблиц открываю


Не забывай всегда (где он допустим) указывать (cAlias)-> , ну ты понял , надеюсь......

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




Пост N: 3720
Зарегистрирован: 17.02.12
ссылка на сообщение  Отправлено: 21.04.21 00:55. Заголовок: Andrey пишет ..


Andrey пишет
 цитата:
If ( nPos := FieldPos(cFld) ) > 0
FieldPut( nPos, _GetValue(cObj, cForm) ) // строка 2737
//MsgLog(nI,cObj,cFld, _GetValue(cObj, cForm) )
EndIf


Уже предлагал тебе использовать объект-контейнер для работы с записями dbf (думаю, ошибок будет меньше)
Повторю твой код, но с объектом
LOCAL oRec := oKeyData()
...
oRec:&(cFld) := _GetValue(cObj, cForm)
oRec:KOPERAT := M->nOperat
oRec:DATEVVOD := DATE()
...
IF (cAlias)->( RLock() )
(cAlias)->( oRecPut(oRec) )
(cAlias)->( dbUnLock() )
ENDIF
Выкладывал ф-ии, повторю что бы не искать Скрытый текст


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




Пост N: 6946
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.04.21 13:49. Заголовок: Спасибо БОЛЬШОЕ ! :..


Спасибо БОЛЬШОЕ !
Этот код ещё в 2016 делал, перетаскивал из терминалки.

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




Пост N: 6955
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 21.05.21 09:36. Заголовок: Продолжаю бороться с..


Продолжаю бороться с ошибками в своей программе.
У меня прога не вылетает, а у юзера иногда вылетает.
Вот код такой:
DEFINE WINDOW Form_SeekAdr       ; 
....
@ nRow, 550 BUTTONEX Button_Street WIDTH 44 HEIGHT nFontSize*2 ;
CAPTION "?" FONTCOLOR BLACK BOLD NOXPSTYLE HANDCURSOR NOTABSTOP ;
ACTION {|| aRet2 := SelectStreet(nCity) ,; // показ другого окна MODAL со списком улиц
IF( LEN(aRet2) == 0, cStreet := "", cStreet := aRet2[2] ) ,;
Form_SeekAdr.GetBox_CDom.Value := "" ,;
Form_SeekAdr.GetBox_CStro.Value := "" ,;
Form_SeekAdr.GetBox_CKorp.Value := "" ,;
Form_SeekAdr.GetBox_CPdzd.Value := "" ,;
Form_SeekAdr.GetBox_CKvar.Value := "" ,;
cDom := cStro := cKorp := cPdzd := cKvar := "" ,;
Form_SeekAdr.Label_Street.Value := " "+cStreet ,;
SayLabelAdres(2,cCity,cStreet) ,;
MyFocus() } // ошибка !!! строка 314

Ошибка у юзера:
Time from start: 0 days 5 hours 2 mins 54 secs 
Error MGERROR/0 Control: GetBox_CDom Of Form_SeekAdr Not defined. Program terminated.
--------------------------------- Stack Trace ---------------------------------
Called from MSGMINIGUIERROR(0)
Called from VERIFYCONTROLDEFINED(0)
Called from SETPROPERTY(0)
Called from (b)FORM_F7ADRES(314) in module: Source\table_F7Adres.prg
Called from _DOCONTROLEVENTPROCEDURE(0)
Called from EVENTS(0)
Called from MYEVENTSHANDLER(1554) in module: Source\main.prg
Called from DOMESSAGELOOP(0)
Called from _ACTIVATEWINDOW(0)
Called from FORM_F7ADRES(459) in module: Source\table_F7Adres.prg

Почему так происходит ?
Как избавиться от этой ошибки ?

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




Пост N: 6974
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.07.21 14:47. Заголовок: Вот такая у меня оши..


Вот такая у меня ошибка:
Error BASE/1102 Неверный аргумент: UPPER Args: [1] = U 
--------------------------------- Stack Trace ---------------------------------
Called from UPPER(0)
Called from (b)TCNLDATA(795) in module: h_objects.prg
Called from TCNLDATA:DEL(0)
Called from (b)TCNLDATA(834) in module: h_objects.prg
Called from TCNLDATA:DESTROY(0)
Called from TWNDDATA:__msgDestructor(736) in module: h_objects.prg
Called from SHELLEXECUTE(0)
Called from PRINT_A81(1437) in module: Source\table_f5sklad4.prg
Called from (b)FORM_A81(1029) in module: Source\table_f5sklad4.prg

Строка 1437 - ShellExecute( , "Open", cFileLog,,, 1 )

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




Пост N: 7404
Зарегистрирован: 17.05.05
ссылка на сообщение  Отправлено: 04.07.21 15:09. Заголовок: Andrey пишет: Error..


Andrey пишет:

 цитата:
Error BASE/1102 Неверный аргумент: UPPER Args: [1] = U


Ну так и проверь что у тебя попадает в качестве параметра в функцию UPPER

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




Пост N: 6975
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 04.07.21 16:26. Заголовок: Dima пишет: Ну так ..


Dima пишет:

 цитата:
Ну так и проверь что у тебя попадает в качестве параметра в функцию UPPER


Это не у меня попадает.
Я вызываю ShellExecute( , "Open", cFileLog,,, 1 ), блокнот поднимается с файлом, а потом наступает КРАХ программы.
Почему ?
Я ещё вижу в блокноте - две строчки ENTER-ом сдвигает. Хотя ничего не посылаю блокноту.
Вот этот код почему срабатывает ?
Called from UPPER(0)  
Called from (b)TCNLDATA(795) in module: h_objects.prg
Called from TCNLDATA:DEL(0)
Called from (b)TCNLDATA(834) in module: h_objects.prg
Called from TCNLDATA:DESTROY(0)
Called from TWNDDATA:__msgDestructor(736) in module: h_objects.prg


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


Пост N: 1616
Зарегистрирован: 27.01.07
ссылка на сообщение  Отправлено: 04.07.21 18:14. Заголовок: Andrey пишет: UPPER..


Andrey пишет:

 цитата:
UPPER Args: [1] = U



Это означает, что первый аргумент функции Upper имеет тип Undefined. Вот и проверяй, что за херня в cFileLog в этот момент содержится.

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

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