Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
Страниц: [1] 2 3 4 ... 10
 1 
 : 15-03-2019 10:58 
Автор ..::SCRIBE::.. - Последний ответ от ..::SCRIBE::..
Всем привет.

Может уже кто-то знает о готовом решении, интересует подключение к БД, редактирование записей через какой-то API (скриптовый, допустим PHP, или что угодно, что можно получить нахаляву на хостинге), а не через прямое подключение.
Задача стоит в обходе запрета бесплатных/дешевых планов хостинга на подключение к БД удаленно.
Ну и скажу сразу, что вопрос о скорости не стоит, главное доступ, какой никакой.

Спасибо.

 2 
 : 08-03-2019 12:57 
Автор erslgoeirjh - Последний ответ от Алексей++
erslgoeirjh, было больно смотреть )) Набросал вот вариант, попробуй. Но при изменении мышкой размеров заголовков или при прокрутке нужно обеспечить перерисовку контрола, учти это


 3 
 : 07-03-2019 16:13 
Автор Ugandon - Последний ответ от Sla
Как я и предполагал

пошла раскрутка о л запа

 4 
 : 07-03-2019 07:29 
Автор erslgoeirjh - Последний ответ от RXL
https://docs.microsoft.com/en-us/windows/desktop/api/windowsx/nf-windowsx-selectfont

 5 
 : 07-03-2019 07:10 
Автор erslgoeirjh - Последний ответ от erslgoeirjh
Я разрабатываю проект в среде MS Visual Studio 2012, в юникодовской кодировке.

В моей таблице (потомок класса CListCtrl) в методе OnPaint я осуществляю прорисовку линий и вывод текста в её клетки. Вывод текста я пробую осуществить двумя вариантами--либо с помощью функции CDC::ExtTextOut, либо с помощью функции ::DrawText. В первом случае, при использовании функции CDC::ExtTextOut, у меня текст выводится нормально, без посторонних символов, но по левому краю клеток. Во втором случае, при использовании функции ::DrawText, текст выводится посередине клеток, но помимо моего текста выводятся также ещё какие-то непонятные символы.

Как сделать так, чтобы текст в клетках выводился посередине, но нормально, без всяких посторонних символов?
Может быть, мне следует изменить используемый шрифт MS Sans Serif на какой-то другой? Или же мне как-то по-другому надо использовать функцию SelectObject?

Код:

Код:
void CListCtrlEx2::OnPaint()
{
    int  i, j, n, m, nItem, topIndex, nTextLen;
    CString  myText;
    RECT  rect, textRect;
    UINT  nOptions = 0;
    LOGFONT  mylf;
    LPCWSTR  pzText;

    const MSG *msg = GetCurrentMessage();
    DefWindowProc(msg->message,msg->wParam,msg->lParam);
    if ((GetStyle() & LVS_TYPEMASK)==LVS_REPORT)
    {
        CClientDC  dc(this);
        dc.SetDCBrushColor(RGB(255,0,0));
        CBrush *pBrush = dc.GetCurrentBrush();
        CHeaderCtrl* pHeader = (CHeaderCtrl*)GetDlgItem(0);
        int  nColumnCount = pHeader->GetItemCount();
        HDC  hDC = dc.m_hDC;
        nOptions |= ETO_OPAQUE;
        CFont *pFont = dc.GetCurrentFont();
        pFont->GetLogFont(&mylf);
        memset(&mylf,0.0,sizeof(mylf));
        mylf.lfHeight = 12;
        mylf.lfWidth = 6;
        mylf.lfWeight = FW_NORMAL;
        wcscpy(mylf.lfFaceName,L"MS Sans Serif");
        CFont *pFont2 = new CFont();
        pFont2->CreateFontIndirectW(&mylf);
        RECT  rect;
        pHeader->GetClientRect(&rect);
        int  top = rect.bottom;
        GetClientRect(&rect);
        int  borderx = 0 - GetScrollPos(SB_HORZ);
        for (int i=0; i<nColumnCount; i++)
        {
            borderx += GetColumnWidth(i);
            if (borderx>=rect.right)  break;
            dc.MoveTo(borderx-1,top);
            dc.LineTo(borderx-1,rect.bottom);
        }
        if (!GetItemRect(0,&rect,LVIR_BOUNDS))
            return;
        int  height = rect.bottom - rect.top;
        GetClientRect(&rect);
        int  width = rect.right;
        m = flagsVector.size();
        if (m==0)
        {
            for (int i=1; i<=GetCountPerPage();i++)
            {
                dc.MoveTo(0,top+height*i);
                dc.LineTo(width,top+height*i);
            }
        }
        else
        {
            topIndex = GetTopIndex();
            for (int i=1; i<=GetCountPerPage();i++)
            {
                if ((topIndex+i)<=m)
                {
                    if ((int)(flagsVector.at(topIndex+i-1))==1)
                    {
                        dc.MoveTo(0,top+height*i);
                        dc.LineTo(width,top+height*i);
                    }
                    borderx = 0 - GetScrollPos(SB_HORZ);
                    dc.SelectObject(pFont2);
                    for (j=0; j<nColumnCount; j++)
                    {
                        myText = GetItemText(topIndex+i-1,j);
                        nTextLen = myText.GetLength();
                        pzText = myText.GetBuffer();
                        textRect.top = top + height*(i-1)+1;
                        textRect.left = borderx+1;
                        textRect.bottom = top + height*i-1;
                        textRect.right  = borderx + GetColumnWidth(j)-1;
                        CRect  tmpRect(textRect);
                        dc.ExtTextOut(textRect.left,textRect.top,nOptions,&textRect,myText,nTextLen,NULL); // текст выводится нормально, но не по центру
                        //::DrawTextW(hDC,myText,nTextLen,&textRect,DT_CENTER); // текст выводится по центру, но выводятся также посторонние символы
                        borderx += GetColumnWidth(j);
                    }
                    dc.SelectObject(pBrush);
                }
                else
                {
                    dc.MoveTo(0,top+height*i);
                    dc.LineTo(width,top+height*i);
                }
            }
        }
    }
    //CListCtrl::OnPaint();
}

 6 
 : 26-02-2019 11:50 
Автор RXL - Последний ответ от Ochkarik
RXL, ну ок.
1. в статье нет слова периодически. наоборот сказано: от 100 выборок в секунду. то есть каждой выборке - свое время. "от" означает что может быть и больше и меньше и вообще произвольно изменятся. верхнюю границу он кстати не оговорил.
так что у вас разные подходы и разное назначение протокола.
у автора пакет: 8 байт данных + 4 байта время, итого 12 байт на пакет, он сожрал 14 байт.
у тебя: заголовок 16 байт данных вместе с временем+8 байт данных.
у автора поток от 1.4КБ/с при 100 выборках
у тебя от 2.4КБ/с.
разница почти в два раза, в условиях автора. но возможно подойдет для какой то другой задачи - вопрос граничных условий.

2. кстати в комментах автор пишет, что приоритет был - объем, и флешка распаяна на плату. и там же пишет, что внемлет рекоменации использования байтстаффинга.
хотя если приоритет объем и флешка - можно было бы вообще по адресам флешки разложить с известным сдвигом и зациклить буфер записи на кратном адресе флешки.

3. и кстати искажение данных ради заголовка FFFFFFFF- вообще некрасиво как-то, даже если это АЦП. опять же, на этот случай используется байтстаффинг.

и оффтоп. была у нас чем то похожая задача управления. данных было 80бит , контроллер был 8 битный. выжать надо было максимум быстродействия, так RS422 на планируемой скорости стал работать с ошибками и было поздно менять интерфейс.  так-же сначала сделали битовый флаг, первое что пришло в голову и быстро. потом переделали на байстаффинг с цр-цой.
тоже как и автор про байтстаффинг до этого случая не знали и не додумались)
так что все это вопрос нюансов задачи...

 7 
 : 26-02-2019 07:52 
Автор RXL - Последний ответ от RXL
Сто отсчетов это всего лишь ceil(6 * 10 / 8 ) * 100 = 800 байт или 8 кбит/с для асинхронного формата 8N1. Даже за 9600 не вышли. Если у него непосредсвенное подключение к РС, на 115200 он может себе позволить 1900 точек. Есть RS232 и быстрее, наверняка у него порт в конвертере USB-COM.

 8 
 : 26-02-2019 06:46 
Автор RXL - Последний ответ от Ochkarik
RXL, там в начале текста есть фраза на которую я тоже сразу внимания не обратил "от 100 раз в секунду" не Герц! еще и  "от 100". то есть никто не обещал периодичный процесс.
и уж точно автор не просто так прилепил метку времени к КАЖДОМУ набору семплов АЦП а не сразу к сотне отсчетов)  
а это существенно меняет задачу)
PS ИМХО, писать на эту тему статью на хабре... ну это как-то... и вообще)))

 9 
 : 26-02-2019 00:23 
Автор RXL - Последний ответ от RXL
Ochkarik, ты про непрерывность передачи? Это не совсем так, данные посылаются периодически, по мере появления. Если есть время послать таймстамп, есть время и на заголовок.
Если задача "здесь и сейчас на коленке", решение вполне адекватное. Только зачем тогда статью писать было? Я вот вчера смеситель на кухне поменял, теперь статью писать? Улыбаюсь

 10 
 : 25-02-2019 22:25 
Автор RXL - Последний ответ от Ochkarik
RXL, алгоритмы у вас для разных случаев. твой - автору не подойдет, из за двух буковок в постановке задачи) /типа тест на внимательность/
у него вполне адекватный задаче алгоритм. не понимаю, зачем копья ломать?
разве что можно было-бы байтстаффинг прикрутить, как альтернативу битовому флагу, но тогда на плавающий размер пакета попал бы.

Страниц: [1] 2 3 4 ... 10
Powered by SMF 1.1.21 | SMF © 2015, Simple Machines