• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом


  • Иллюстрированный самоучитель по Delphi 7 для профессионалов

    Вывод графики с использованием отображаемых файлов

    Теперь загруженные данные нужно суметь нарисовать на канве, в данном случае на канве объекта PaintBox. Делается это следующим образом:

    procedure TForml.PaintMe(Sender: TObject);
    var OldP: hPalette;i: integer;
    begin
    if Memory=nil then Exit;
    OldP: = SelectPalette(PaintBox.Canvas.Handle, Palette, False);
    RealizePalette(PaintBox.Canvas.Handle);
    SetStretchBltMode(PaintBox.Canvas.Handle, STRETCH_DELETESCANS);
    case ViewMode of
    vmStretch:
    with bminfo^ do
    i: =
    StretchDIBits(PaintBox.Canvas.Handle,
    0.0,PaintBox.Height,PaintBox.Width,
    0.0,biWidth,Abs(biHeight),
    Memory, pBitmapInfo(bminfo)^, DIB_RGB_COLORS,
    PaintBox.Canvas.CopyMode);
    vmlxl:
    with bminfoA,PaintBox.ClientRect do
    i: = SetDIBitsToDevice
    (PaintBox.Canvas.Handle,Left,Top,Right-Left,
    Bottom-Top,
    Left,Top,Top,Bottom-top,
    Memory, pBitmapInfо(bminfo)^, DIB_RGB_COLORS);
    vmZoom:
    begin
    with bminfo^,PaintBox.ClientRect do
    i: = StretchDIBits
    (PaintBox.Canvas.Handle,Left,Top,Right-Left,
    Bottom-Top,
    0.0,biWidth,Abs(biHeight),
    Memory, pBitmapInfo(bminfo)^, DIB_RGB_COLORS, PaintBox.Canvas.CopyMode);
    end;
    end;
    if (i=0) or (i=GDI_ERROR) then
    begin
    ec: = GetLastError;
    Forml.Caption: = 'Error code '+IntToStr(ec);
    end;
    SelectPalette(PaintBox.Canvas.Handle, OldP, False);
    end;
    

    В зависимости от установленного режима отображения (vmstretch, vmzoom или vmlxl) применяются разные функции WIN API: stretchoisits или SetoiBitsToDevice. Выигрыш в скорости работы приложения особенно ощущается, если загружаемые файлы становятся велики и должны размещаться в файле подкачки. Наше же приложение не использует его и отображает данные прямо из файла на экран (рис. 10.3).

    Иллюстрированный самоучитель по Delphi 7 для профессионалов › Использование графики › Вывод графики с использованием отображаемых файлов
    Рис. 10.3. Этот снимок с метеорологического спутника имеет размер десятки мегабайт

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.