Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API | PureBasic | Управление буфером консольного окна

Ответить
Настройки темы
Win32 API | PureBasic | Управление буфером консольного окна

Аватара для unhappy

Новый участник


Сообщения: 18
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


Добрый день.
Мне необходимо изменить размер буфера консольного окна.
Я нашел описание функции SetConsoleScreeBufferSize_ на http://msdn.microsoft.com
Но когда я запускаю на выполнение такой код:
Код: Выделить весь код
If OpenConsole()    
  stdout.l=GetStdHandle_(#STD_OUTPUT_HANDLE)  
  mySize.COORD 
  mySize\x = 80 
  mySize\y = 29 
  SetConsoleScreenBufferSize_(stdout, mySize) 
  Debug(Str(GetLastError_()) ) 
EndIf
ничего не происходит. В дебаге я получаю код ошибки 87 (на MSDN сказано: ERROR_INVALID_PARAMETER - The parameter is incorrect.)
Вместе с тем параметр, как видно из кода, заявлен как и нужно COORD, handle окна ловится нормально потому что вот такой код, к примеру, работает нормально:
Код: Выделить весь код
If OpenConsole()    
  stdout.l=GetStdHandle_(#STD_OUTPUT_HANDLE)  
  NewSize.SMALL_RECT
  NewSize\Top = 0
  NewSize\Left = 0
  NewSize\Bottom=29
  NewSize\Right=80
  SetConsoleWindowInfo_(stdout,1,@NewSize)
EndIf
и окно (само окно, а не буфер) ресайзится нормально.
Кто сталкивался с чем-либо похожим?

Отправлено: 10:20, 22-11-2006

 

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


unhappy
спасибо за сабж... очень неплох, жаль небесплатный
насколько понял из справки пурибасик поддерживает передачу сруктур (в функции и процедуры) только "по ссылке", а SetConsoleScreenBufferSize принимает структуру "по значению".
Цитата:
You must pass a pointer to this variable as you cannot pass structured variables directly.
...тем не менее удалось его обмануть заменив структуру на число двойной длины:
Код: Выделить весь код
If OpenConsole()    
  stdout.l=GetStdHandle_(#STD_OUTPUT_HANDLE)  
  NewSize.SMALL_RECT
  NewSize\top = 0
  NewSize\left = 0
  NewSize\bottom=50
  NewSize\right=50
  SetConsoleWindowInfo_(stdout,1,@NewSize)
  
  mySize.l
  mySize = (51 << 16) + 51
  SetConsoleScreenBufferSize_(stdout, mySize) 
  Debug(Str(GetLastError_()) ) 
EndIf
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:51, 23-11-2006 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для unhappy

Новый участник


Сообщения: 18
Благодарности: 1

Профиль | Сайт | Отправить PM | Цитировать


amel27
Спасибо! Сейчас попробовал - всё работает.
Действительно же в описаниии функции на msdn указано, что надо передавать не указатель на структуру, а именно параметр в dword. это всё невнимательность
Полную версию PureBasic можно найти на ru-board'е

-------
--- Homo Fortunatus.


Отправлено: 11:34, 26-03-2007 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Win32 API | PureBasic | Управление буфером консольного окна

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Настройка размера консольного окна ITSpec Microsoft Windows 2000/XP 2 29-12-2009 17:37
CMD/BAT - [решено] Сворачивание (не скрытие) консольного окна. Smarty Скриптовые языки администрирования Windows 6 15-05-2009 20:12
Win32 API | Hint в StatusBar Ryjka Программирование и базы данных 2 30-07-2006 22:17
Win32 API | Нужна помошь по API функциям! vasika_hk Программирование и базы данных 2 23-05-2006 09:51
Win32 API | Дозвон XCodeR Программирование и базы данных 5 08-04-2006 12:26




 
Переход