воскресенье, 31 августа 2025 г.

Ошибка 0x0000011b: Как исправить сбой подключения к общему принтеру в Windows 10

При попытке подключить общий принтер \\pc01\printer01 выдаётся сообщение «Windows не удалось подключиться к принтеру» с ошибкой 0x0000011b. Решение этой проблемы я нашёл на странице сайта https://remontka.pro/0x0000011b-error-printer/. Здесь я опишу способ, который помог именно мне. Если он не сработает для вас, то в упомянутой статье есть и другие методы решения этой ошибки, возможно, они вам помогут.

Для исправления ошибки 0x0000011b с сообщением «Windows не удалось подключиться к принтеру» необходимо на компьютере, к которому физически подключён принтер (в моём случае это pc01), сделать следующее:

  1. Откройте Редактор реестра.

  2. Перейдите в ветку:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print

  3. Создайте параметр DWORD (32 бита).

  4. Дайте ему имя RpcAuthnLevelPrivacyEnabled.

  5. Присвойте ему значение 0.

  6. Перезагрузите компьютер pc01.

После перезагрузки попробуйте с pc02 перейти на компьютер pc01 и заново подключить общий принтер printer01. Ошибка должна исчезнуть, и принтер будет успешно подключён.

Борьба с тормозами в Excel 2016: удаляем скрытые объекты

Проблема: Одной из частых причиной сильного замедления работы больших файлов Excel 2016 (например, размером от 30 МБ) являются скрытые графические объекты (Смотрите рисунок 1).

Рисунок 1. Пример скрытых объектов в Excel 

Решение: Если файл начал подтормаживать, проверьте его на наличие ненужных скрытых изображений. Вот как это сделать:

  1. Откройте панель выбора:

    • Перейдите на вкладку «Главная» в ленте меню.

    • В разделе «Редактирование» нажмите кнопку «Найти и выделить».

    • В выпадающем меню выберите пункт «Область выделения». Смотрите рисунок 2.

       Рисунок 2. Открытие панели со списком объектов
       

  2. Проверьте объекты:

    • Справа откроется панель со списком всех объектов на листе. Просмотрите его и убедитесь, что эти объекты вам не нужны.

  3. Вариант А: Удаление конкретных объектов

    • На панели выделения зажмите клавишу Ctrl и щелкните левой кнопкой мыши по всем объектам, которые хотите удалить.

    • Нажмите клавишу Delete.

  4. Вариант Б: Массовое удаление всех объектов

    • На вкладке «Главная» в разделе «Редактирование» нажмите «Найти и выделить» -> «Перейти». Смотрите рисунок 3.

    • В диалоговом окне «Переход» нажмите кнопку «Выделить». Смотрите рисунок 4.

    • В новом окне «Выделить группу ячеек» выберите опцию «объекты» и нажмите «OK». Все объекты на листе будут выделены. Смотрите рисунок 5.

    • Нажмите Ctrl + Delete для удаления.

Рисунок 3.  Вызов диалога "Переход"
 
Рисунок 4. Диалог "Переход"

 
Рисунок 5. Диалог "Выделить группу ячеек"
 
Рисунок 6. Пример выделенных скрытых объектов Excel

Важно! Процесс удаления большого количества объектов может занять значительное время (иногда несколько часов). Дождитесь его полного завершения, не закрывая программу.

Результат: После очистки файл может значительно уменьшиться в размере (например, с 30 МБ до 300 КБ, как в моем случае) и начать работать гораздо быстрее.

Установка .NET Framework 3.5 без подключения к интернету

Если вы пытались установить .NET Framework 3.5 через официальный установщик Microsoft или функцию «Включение или отключение компонентов Windows» без подключения к интернету и получили ошибку (Смотрите рисунок 1) о том, что для установки требуется подключение к сети, у меня для вас есть решение.

Рисунок 1. Ошибка установки .NET Framework 3.5 

Существует способ установить .NET Framework 3.5 без интернета, но при одном условии: у вас должен быть в наличии архив с необходимыми файлами. Этот архив можно получить из официального ISO-образа Windows 10 (скачанного с сайта Microsoft) той же версии, что установлена на вашем компьютере. Например, если у вас стоит Windows 10 22H2, то и образ вам понадобится именно Windows 10 22H2.

  1. Откройте ISO-образ с помощью архиватора (например, 7Zip).

  2. Найдите внутри папку sources.

  3. Перейдите в папку sxs — в ней и находится нужный файл.

  4. Его имя будет примерно таким: microsoft-windows-netfx3-ondemand-package~31bf3856ad364e35~amd64~~.cab. Скопируйте этот файл на компьютер, на котором нужно произвести установку.

Допустим, вы скопировали файл в папку C:\Temp. Далее:

  1. Запустите командную строку от имени администратора (в заголовке окна должно быть указано «Администратор»).
  2. Перейдите в папку с файлом с помощью команды: cd /d C:\Temp
  3. Выполните команду: dism.exe /Online /Enable-Feature /FeatureName:NetFx3 /All /Source:C:\Temp /LimitAccess

После выполнения этой команды .NET Framework 3.5 будет установлен на ваш компьютер без необходимости подключения к интернету (Смотрите рисунок 2).

Рисунок 2. Установка .NET Framework 3.5  

понедельник, 25 августа 2025 г.

Начальный пример подключения библиютеки Three.js в веб-проекте

Three.js – это JavaScript-библиотека для создания 3D-графики. Для создания начального примера я отправился на официальный сайт разработчиков (https://threejs.org/).

Первым делом я скачал библиотеку с GitHub (https://github.com/mrdoob/three.js/archive/master.zip). На компьютере я создал папку проекта с именем web_p1. После распаковки архива я скопировал папку build в мой проект web_p1. В этой папке находится файл three.module.js – это и есть библиотека Three.js.

Затем в папке проекта web_p1 я создал стартовый файл index.html, в который планировал подключить библиотеку.

Как подключить библиотеку Three.js в HTML-файле?

  1. В документации на официальном сайте предлагается установить среду выполнения Node.js и библиотеку three.js через менеджер пакетов npm. Этот вариант мне не подошел, так как я уже скачал библиотеку вручную.

  2. Также в документации указано, что можно подключить библиотеку с помощью HTML-тега <script> с атрибутом типа importmap. Этот вариант нам и подойдет.

Однако прежде чем привести код файла index.html с примером вращающегося зеленого куба на черном фоне (смотрите рисунок 1) , важно понять, как правильно его запустить.

Может показаться, что достаточно просто открыть index.html через проводник Windows, и он запустится в браузере. Но это не так. Пример с подключенной библиотекой Three.js не заработает, потому что современные браузеры из соображений безопасности блокируют выполнение JavaScript-модулей, загруженных напрямую с локального диска (схема file://).

Чтобы файл index.html с библиотекой Three.js работал корректно, необходимо запустить его через локальный веб-сервер. Для этого нужно установить одну из сборок, например, XAMPP, Denwer, Open Server или любой другой сервер на ваш вкус.

Порядок действий:

  1. Установите и запустите выбранный веб-сервер.

  2. Переместите папку вашего проекта web_p1 в корневую директорию веб-сервера (часто это папки htdocs или www).

  3. В адресной строке браузера перейдите по адресу локального хоста, указав путь к вашему проекту (например, http://localhost:8080/web_p1/ или http://localhost/web_p1/). Точный адрес зависит от конфигурации вашего сервера.

 Код проекта:

<!DOCTYPE html>
<html lang="en">
<head>
<title>My first three.js app</title>
</head>
<body>
<script type="importmap">
{
"imports": {
"three": "./build/three.module.js"
}
}</script>

<script type="module">
import * as THREE from "three";
console.log(THREE);

// Создаем сцену
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();

renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// Создаем куб
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

camera.position.z = 5;

// Анимация
function animate() {
requestAnimationFrame(animate);

cube.rotation.x += 0.01;
cube.rotation.y += 0.01;

renderer.render(scene, camera);
}

animate();
</script>
</body>
</html>

 

Рисунок 1. Пример работы библиотеки Three.js в браузере Firefox

понедельник, 18 августа 2025 г.

Проблемы с проводником Windows 10 при работе с сетевыми папками

В данной статье я рассмотрю две проблемы проводника Windows 10, с которыми столкнулся при работе с сетевыми папками и файлами на общем файловом сервере в локальной сети. Возможно, эти проблемы возникают из-за низкой скорости работы локальной сети.

1. Проводник зависает при работе с файлами на сервере

Если проводник Windows 10 зависает при попытке работы с файлами и папками на файловом сервере (так, что помогает только принудительное завершение процесса explorer.exe через Диспетчер задач), проблема может быть связана с включённой областью предварительного просмотра.

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

Решение:
Отключите область просмотра в проводнике:

  1. Откройте проводник.

  2. Перейдите на вкладку «Вид» в ленте меню.

  3. В разделе «Области» нажмите кнопку «Область просмотра», чтобы она стала неактивной (подсветка пропадёт).

После этого проводник должен перестать зависать. Смотрите рисунок 1.


Рисунок 1. Отключение предварительного просмотра в проводнике Windows 10 
 

2. Некорректный поиск файлов на сервере

Если при поиске файлов по имени в проводнике Windows 10 (на файловом сервере в локальной сети) вместо нужных результатов вы получаете нерелевантные файлы, проблема связана с настройками поиска.

По умолчанию проводник ищет совпадения не только в именах файлов, но и в их содержимом. В медленной сети это может приводить к бесконечному поиску или некорректным результатам.

Решение:
Отключите поиск в содержимом файлов, оставив только поиск по именам:

  1. Откройте проводник.

  2. Перейдите на вкладку «Поиск»«Параметры поиска».

  3. Выберите «Дополнительные параметры».

  4. Снимите опцию с параметра «Содержимое файлов» чтобы она не была активна.

После этого поиск будет работать корректно. Смотрите рисунок 2.

 

 
Рисунок 2. Отключение поиска содержимого фалов в проводнике Windows 10

Как скрыть и отобразить документ в окне Excel 2016

Если при открытии любого документа формата XLS или XLSX Вы видите пустое окно, то, возможно, окно открываемого документа скрыто, и его необходимо отобразить. Эта возможность в Excel 2016 называется "Скрыть/Отобразить текущее окно". Данная функция находится на ленте меню "Вид" в разделе "Окно". Должна быть активна кнопка "Отобразить" (Смотрите рисунок 1 и рисунок 2). Если Вы нажмете на кнопку "Отобразить", то, скорее всего, Вы увидите окно Вашего скрытого документа.

Рисунок 1. Кнопка Скрыть/Отобразить документ 
 
 Рисунок 2. Выбор скрытого окна книги


Внимание! Если Вы скрываете документ с помощью этой функции Excel 2016, то при закрытии окна Excel документа в этом состоянии и последующем открытии документ будет находиться в скрытом состоянии, пока Вы не нажмете кнопку "Отобразить" на ленте меню "Вид" в разделе "Окно". Многие пользователи нажимали на кнопку "Скрыть", видели, что документ исчезал в окне Excel 2016, после этого закрывали Excel 2016 и пытались открыть документ заново, и, соответственно, окно Excel 2016 было пустым, так как документ в нем был скрыт.

Возможность скрывать документ в Excel, скорее всего, разработчики Microsoft создали на тот случай, если Excel 2016 будет работать в многодокументном режиме, т.е. режиме, позволяющем в одном окне Excel 2016 открывать множество документов Excel. Тогда в этом случае кнопки "Скрыть" и "Отобразить" для множества дочерних окон Excel 2016 имеют смысл. Однако многодокументное отображение Excel 2016 у многих отключено или не работает, так как пользователям неудобно работать с более чем одним документом Excel в одном открытом окне Excel 2016.

Не открываются ссылки e1c на документ 1С:8.3 в HCL Notes 12.0.2

Если в HCL Notes 12.0.2 вам пришло письмо со ссылкой на документ 1С:8.3 вида e1c://<ссылка_на_документ_1С>, но при нажатии на неё не открывается, а вместо этого запускается браузер Windows 10 (установленный по умолчанию), то для решения проблемы необходимо установить HCL Notes 12.0.2 Fix Pack 6 (или более новую версию).

Ссылку на скачивание не привожу, так как для доступа к файлам требуется регистрация на официальном сайте разработчика HCL Notes.

воскресенье, 2 февраля 2025 г.

Пример приложения печатающий текст в стиле терминала из фильма Matrix "Матрица"

Спустя 12 лет довел до ума пример приложения, который печатает текст в стиле терминала из фильма Матрица с DelphiX на OpenGL. Оригинальный пример, на основе которого сделан мой пример, взят с сайта Delphi-Graphics. Мой код базируется на Delphi, OpenGL, WinAPI. Код моего примера оставляю без комментарий, т. к. написание проводилось без детального разбора работы алгоритма оригинального приложения и осуществлялся банальный подбор функций OpenGL и их параметров. На рисунке 1 представлена работа моего примера в Windows 10. 

Рисунок 1. Пример приложения вывода текста в стиле терминала из фильма "Матрица"

program matrix;

uses
  Windows,
  Messages,
  OpenGL;

var
  h_Rc: HGLRC;
  h_Dc: HDC;
  h_Wnd: HWND;
  base: GLuint;

  keys: array [0..255] of BOOL;

  text: array[0..4] of String = ('Wake up, Neo.',
                                 'The Matrix has you.',
                                 'Follow the White Rabbit.',
                                 'Disconnecting...',
                                 '');

  Active: bool = true;
  FullScreen:bool = true;
  f,z: boolean;
  a,b: byte;
  sx: integer;
  cur: byte;
  all: string;

procedure ReSizeGLScene(Width: GLsizei; Height: GLsizei);
begin
  if (Height=0) then
     Height:=1;
  glViewport(0, 0, Width, Height);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(0, Width, Height, 0, 1, -1);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
end;

procedure BuildFont;
var
  font: HFONT;
  oldfont: HFONT;
begin

  base := glGenLists(96);

  font := CreateFont( -30,
                        0,
                        0,
                        0,
                        FW_BOLD,
                        0,
                        0,
                        0,
                        ANSI_CHARSET,
                        OUT_TT_PRECIS,
                        CLIP_DEFAULT_PRECIS,
                        ANTIALIASED_QUALITY,
                        FF_DONTCARE or DEFAULT_PITCH,
                        'Courier New');

  oldfont := SelectObject(h_DC, font);                       
  wglUseFontBitmaps(h_DC, 32, 96, base);
  SelectObject(h_DC, oldfont);
  DeleteObject(font);
end;

procedure KillFont;
begin
  glDeleteLists(base, 96);
end;

procedure glPrint(const Fmt: String);
begin

if Fmt = '' then
  Exit;

glPushAttrib(GL_LIST_BIT);
glListBase(base - 32);
glCallLists(Length(Fmt), GL_UNSIGNED_BYTE, Pointer(Fmt));
glPopAttrib();

end;

function IntToStr(Num: Integer) : String;
begin
  Str(Num, Result);  
end;

function InitGL:bool;
begin

  glClearColor(0.0, 0.0, 0.0, 0.0);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  glOrtho(0, 640, 480, 0, 0, 1);
  glDisable(GL_DEPTH_TEST);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

  BuildFont();

  a:=0;
  b:=0;
  sx:=0;
  cur:=0;

  Result:=true;
end;

procedure addchar;
begin
  if length(all)=length(text[cur]) then
  begin
    inc(cur);
    sx:=0;
    z:=false;
    all:='';
    Exit;
  end;
  if cur<=5 then
  begin
    all := all + text[cur][length(all)+1];
  end
  else
  begin
    exit;
  end;
end;

function DrawGLScene():bool;
var
  i: integer;
  kk2:integer;
  kk: integer;
begin
  glClear(GL_COLOR_BUFFER_BIT);

  glEnable(GL_ALPHA_TEST);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

  glLoadIdentity();

  if not z then
    inc(sx);
  if sx=200 then
    z:=true;

  if z then
  begin
    inc(B);
    if b=20 then addchar;
    if b>20 then b:=0;
  end;

  if not f then
    inc(a,5)
  else dec(a,5);

  if (a>=255)or(a=0) then f:=not f;

  glColor3f(0.196078, 0.8, 0.196078);
  for i := 0 to cur - 1 do
  begin
    glRasterPos2f(0.0, 20.0 + i*30);
    glPrint(text[i]);
  end;

  if i=5 then
  begin
    i:=0;
    cur:=0;
    a:=0;
    b:=0;
    sx:=0;
    z:=false;
    f:=False;
    all:='';
    glClearColor(0, 0, 0, 0);
    glClear(GL_COLOR_BUFFER_BIT);
  end;

  kk := 18*length(all);
  kk2 := cur*30;

  glRasterPos2f(0.0, 20.0 + cur*30);
  glPrint(all);

  glColor4f(0.196078, 0.8, 0.196078, a / 255); // Colour LimeGreen
  glRectf(0.0+kk, 0.0+kk2, 23.0+kk, 23.0+kk2);

  glDisable(GL_BLEND);
  glDisable(GL_ALPHA_TEST);

  Result := true;
end;


function WndProc(hWnd: HWND;
                 message: UINT;
                 wParam: WPARAM;
                 lParam: LPARAM):
                                  LRESULT; stdcall;
begin
  if message=WM_SYSCOMMAND then
  begin
      case wParam of
        SC_SCREENSAVE,SC_MONITORPOWER:
          begin
            result:=0;
            exit;
          end;
      end;
  end;
  
  case message of
    WM_ACTIVATE:
      begin
        if (Hiword(wParam)=0) then
          active:=true
        else
          active:=false;
        Result:=0;
      end;
    WM_CLOSE:
      Begin
        PostQuitMessage(0);
        result:=0
      end;
    WM_KEYDOWN:
      begin
        keys[wParam] := TRUE;
        result:=0;
      end;
    WM_KEYUP:
      begin
    	  keys[wParam] := FALSE;
        result:=0;
      end;
    WM_SIZe:
      begin
    	  ReSizeGLScene(LOWORD(lParam),HIWORD(lParam));
        result:=0;
      end
    else

      begin
      	Result := DefWindowProc(hWnd, message, wParam, lParam);
      end;
    end;
end;


procedure KillGLWindow;
begin
  if FullScreen then
    begin
      ChangeDisplaySettings(devmode(nil^),0);
      showcursor(true);
    end;
  if h_rc<> 0 then
    begin
      if (not wglMakeCurrent(h_Dc,0)) then
        MessageBox(0,'Release of DC and RC failed.',' Shutdown Error',MB_OK or MB_ICONERROR);
      if (not wglDeleteContext(h_Rc)) then
        begin
          MessageBox(0,'Release of Rendering Context failed.',' Shutdown Error',MB_OK or MB_ICONERROR);
          h_Rc:=0;
        end;
    end;
  if (h_Dc=1) and (releaseDC(h_Wnd,h_Dc)<>0) then
    begin
      MessageBox(0,'Release of Device Context failed.',' Shutdown Error',MB_OK or MB_ICONERROR);
      h_Dc:=0;
    end;
  if (h_Wnd<>0) and (not destroywindow(h_Wnd))then
    begin
      MessageBox(0,'Could not release hWnd.',' Shutdown Error',MB_OK or MB_ICONERROR);
      h_Wnd:=0;
    end;
  if (not UnregisterClass('OpenGL',hInstance)) then
    begin
      MessageBox(0,'Could Not Unregister Class.','SHUTDOWN ERROR',MB_OK or MB_ICONINFORMATION);
    end;
end;


function CreateGlWindow(title:Pchar; width,height,bits:integer;FullScreenflag:bool):boolean stdcall;
var
  Pixelformat: GLuint;
  wc:TWndclass;
  dwExStyle:dword;
  dwStyle:dword;
  pfd: pixelformatdescriptor;
  dmScreenSettings: Devmode;
  h_Instance:hinst;
  WindowRect: TRect;
begin
  WindowRect.Left := 0;
  WindowRect.Top := 0;
  WindowRect.Right := width;
  WindowRect.Bottom := height;
  h_instance:=GetModuleHandle(nil);
  FullScreen:=FullScreenflag;
  with wc do
    begin
      style:=CS_HREDRAW or CS_VREDRAW or CS_OWNDC;
      lpfnWndProc:=@WndProc;
      cbClsExtra:=0;
      cbWndExtra:=0;
      hInstance:=h_Instance;
      hIcon:=LoadIcon(0,IDI_WINLOGO);
      hCursor:=LoadCursor(0,IDC_ARROW);
      hbrBackground:=0;
      lpszMenuName:=nil;
      lpszClassName:='OpenGl';
    end;
  if  RegisterClass(wc)=0 then
    begin
      MessageBox(0,'Failed To Register The Window Class.','Error',MB_OK or MB_ICONERROR);
      Result:=false;
      exit;
    end;
  if FullScreen then
    begin
      ZeroMemory( @dmScreenSettings, sizeof(dmScreenSettings) );
      with dmScreensettings do
        begin
          dmSize := sizeof(dmScreenSettings);
          dmPelsWidth  := width;
	        dmPelsHeight := height;
          dmBitsPerPel := bits;
          dmFields     := DM_BITSPERPEL or DM_PELSWIDTH or DM_PELSHEIGHT;
        end;

      if (ChangeDisplaySettings(dmScreenSettings, CDS_FULLSCREEN))<>DISP_CHANGE_SUCCESSFUL THEN
        Begin

          if MessageBox(0,'This FullScreen Mode Is Not Supported. Use Windowed Mode Instead?'
                                             ,'Matrix',MB_YESNO or MB_ICONEXCLAMATION)= IDYES then
                FullScreen:=false
          else
            begin

              MessageBox(0,'Program Will Now Close.','Error',MB_OK or MB_ICONERROR);
              Result:=false;
              exit;
            end;
          end;
    end;
  if FullScreen then
    begin
      dwExStyle:=WS_EX_APPWINDOW;
      dwStyle:=WS_POPUP or WS_CLIPSIBLINGS or WS_CLIPCHILDREN;
      Showcursor(false);
    end
  else
    begin
      dwExStyle:=WS_EX_APPWINDOW or WS_EX_WINDOWEDGE;
      dwStyle:=WS_OVERLAPPEDWINDOW or WS_CLIPSIBLINGS or WS_CLIPCHILDREN;
    end;
  AdjustWindowRectEx(WindowRect,dwStyle,false,dwExStyle);

  H_wnd:=CreateWindowEx(dwExStyle,
                               'OpenGl',
                               Title,
                               dwStyle,
                               0,0,
                               WindowRect.Right-WindowRect.Left,
                               WindowRect.Bottom-WindowRect.Top,
                               0,
                               0,
                               hinstance,
                               nil);
  if h_Wnd=0 then
    begin
      KillGlWindow();
      MessageBox(0,'Window creation error.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;
      exit;
    end;
  with pfd do
    begin
      nSize:= SizeOf( PIXELFORMATDESCRIPTOR );
      nVersion:= 1;
      dwFlags:= PFD_DRAW_TO_WINDOW
        or PFD_SUPPORT_OPENGL
        or PFD_DOUBLEBUFFER;
      iPixelType:= PFD_TYPE_RGBA;
      cColorBits:= bits;
      cRedBits:= 0;
      cRedShift:= 0;
      cGreenBits:= 0;
      cBlueBits:= 0;
      cBlueShift:= 0;
      cAlphaBits:= 0;
      cAlphaShift:= 0;
      cAccumBits:= 0;
      cAccumRedBits:= 0;
      cAccumGreenBits:= 0;
      cAccumBlueBits:= 0;
      cAccumAlphaBits:= 0;
      cDepthBits:= 16;
      cStencilBits:= 0;
      cAuxBuffers:= 0;
      iLayerType:= PFD_MAIN_PLANE;
      bReserved:= 0;
      dwLayerMask:= 0;
      dwVisibleMask:= 0;
      dwDamageMask:= 0;
    end;
  h_Dc := GetDC(h_Wnd);
  if h_Dc=0 then
    begin
      KillGLWindow();
      MessageBox(0,'Cant''t create a GL device context.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;
      exit;
    end;
  PixelFormat := ChoosePixelFormat(h_Dc, @pfd);
  if (PixelFormat=0) then
    begin
      KillGLWindow();
      MessageBox(0,'Cant''t Find A Suitable PixelFormat.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;
      exit;
    end;
  if (not SetPixelFormat(h_Dc,PixelFormat,@pfd)) then
    begin
      KillGLWindow();
      MessageBox(0,'Cant''t set PixelFormat.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;
      exit;
    end;
  h_Rc := wglCreateContext(h_Dc);
  if (h_Rc=0) then
    begin
      KillGLWindow();
      MessageBox(0,'Cant''t create a GL rendering context.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;
      exit;
    end;
  if (not wglMakeCurrent(h_Dc, h_Rc)) then
    begin
      KillGLWindow();
      MessageBox(0,'Cant''t activate the GL rendering context.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;
      exit;
    end;
  ShowWindow(h_Wnd,SW_SHOW);
  SetForegroundWindow(h_Wnd);
  SetFOcus(h_Wnd);
  ReSizeGLScene(width,height);
  if (not InitGl()) then
    begin
      KillGLWindow();
      MessageBox(0,'initialization failed.','Error',MB_OK or MB_ICONEXCLAMATION);
      Result:=false;
      exit;
    end;
  Result:=true;
end;


function WinMain(hInstance: HINST;
		 hPrevInstance: HINST;
		 lpCmdLine: PChar;
		 nCmdShow: integer):
                        integer; stdcall;
var
  msg: TMsg;
  done: Bool;

begin
  done:=false;

  if MessageBox(0,'Would You Like To Run In FullScreen Mode?','Start FullScreen', MB_YESNO or MB_ICONQUESTION)=IDNO then
    FullScreen:=false
  else
    FullScreen:=true;

  if not CreateGLWindow('Matrix',640,480,16,FullScreen) then
  begin
    Result := 0;
    exit;
  end;

  while not done do
  begin
    if (PeekMessage(msg, 0, 0, 0, PM_REMOVE)) then
    begin
      if msg.message=WM_QUIT then
        done:=true
      else
      begin
        TranslateMessage(msg);
        DispatchMessage(msg);
      end;
    end
    else
    begin

      if (Active and (not DrawGLScene()) or keys[VK_ESCAPE]) then
      begin
        done:=true;
      end;

      if (keys[VK_F1]) then
      begin
        Keys[VK_F1] := false;
        KillGLWindow();
        FullScreen := not FullScreen;

        if not CreateGLWindow('Matrix',640,480,16,fullscreen) then Result := 0;
      end;

      SwapBuffers(h_Dc);
    end;
  end;

  KillFont();
  killGLwindow();

  result:=msg.wParam;
end;

begin
  WinMain( hInstance, hPrevInst, CmdLine, CmdShow );
end.

пятница, 24 января 2025 г.

Несколько проблемных МФУ

Кому интересно, перечислю проблемные, относительно новые модели МФУ, которые я не рекомендую покупать.


Xerox VersaLink B405dn

1) Безобразно захватывает бумагу из обоих лотков. Направляющие бумаги у данного принтера реализованы плохо, из-за этого бумага идет не ровно и часто застревает. Замена роликов подачи бумаги или ролика лотка не решает проблему.

2) Печка портится очень быстро, покупка новой выходит дорого. Из-за этого МФУ придётся утилизировать.

3) Сенсорный экран может не нажиматься (Пересекался с двумя такими МФУ с такой проблемой). Может брак.

4) Оба лотка представляют из себя хлипкое изделие, которое болтается в руках как погремушка. При малейшем движение направляющие бумаги лотка разъезжаются.

Xerox WorkCentre 3345

1) Через 3-4 года сенсорный экран перестает реагировать на нажатия или сам по себе начнёт нажиматься без участия пользователя. Покупка сенсорной панели выходит очень дорого. Из-за этого МФУ придётся утилизировать.

HP Laser Jet Pro M428dnf

1) По сети документы Word или PDF печатаются с задержкой в 1 минуту на одну страницу документа. Переустановка драйверов не решает проблему.

2) Драйвера МФУ не корректно работают с масштабированием документа. Иногда в таких программах как Word, ты видишь на предварительном просмотре печати, что документ выглядит как надо, таблица заполняет всю страницу. Отправляешь на принтер, а он выдает таблицу на пол страницы, таким образом сжав таблицу по горизонтали. В свойствах драйвера это можно исправить, но каждый раз при такой проблеме необходимо заходить в свойства драйвера, чтобы распечатать документ.

HP Laser Jet Pro 4103dw

1) Такая же проблема с масштабированием как и в случае с HP Laser Jet Pro M428dnf

 

По мере накопления проблем с разными МФУ и принтерами, буду пополнять список.