On-line: гостей 1. Всего: 1 [подробнее..]
АвторСообщение



Пост N: 43
Зарегистрирован: 15.12.06
ссылка на сообщение  Отправлено: 09.03.07 14:33. Заголовок: Вывод текста в окно


Товарищи! Прошу ответить на два простых (для того, кто знает) вопроса.
1. Как вывести в окно просто текст (превышающий размер окна), т.е. как организовать консольное окно в числе других, чтобы можно было в него выводить текст через ?? (или как-то иначе), а потом закрыть и забыть.
Наверно, это совсем просто, но я не нашёл, как.
2. То же самое (видимо, это уже не консольное окно и не ??), но чтоб была возможность прокрутки вверх-вниз, и очень бы желательно с разными шрифтами. Редактирование не нужно.
Заранее благодарен.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]


модератор




Пост N: 448
Зарегистрирован: 25.05.05
ссылка на сообщение  Отправлено: 13.03.07 16:11. Заголовок: Пример с использованием библиотеки MiniGUI ;-)


AM пишет:

 цитата:
2. То же самое (видимо, это уже не консольное окно и не ??), но чтоб была возможность прокрутки вверх-вниз, и очень бы желательно с разными шрифтами. Редактирование не нужно.



#include "minigui.ch"

#define WM_VSCROLL 0x0115
#define SB_VERT 1
#define SB_PAGEDOWN 3

function main
set exact on
_w=800 //init width
_h=600 // init height

DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH _w ;
HEIGHT _h ;
TITLE 'Console' ;
MAIN ;
NOMAXIMIZE NOSIZE

ON KEY RETURN ACTION penter()

@ 20,10 EDITBOX Edit_1 ;
READONLY;
WIDTH _w-30 ;
HEIGHT _h-110;
FONT 'Verdana' SIZE 11 ;
VALUE "Hello, I am the console window ...."

@ _h-80,10 TEXTBOX Text_2 ;
VALUE '' ;
FONT 'Verdana' SIZE 12 ;
width _w-30;
height 28

END WINDOW

Form_1.Text_2.SetFocus

Form_1.Center
Form_1.Activate

return nil

***************************************
function penter()
private a

a=Form_1.Text_2.value
if a="cls"
Form_1.Edit_1.value :=""
else
tot=Form_1.Edit_1.value
if alltrim(tot) <> ""
tot=Form_1.Edit_1.value + chr(13)+chr(10) + a
Form_1.Edit_1.value := tot
else
Form_1.Edit_1.value := a
endif
endif
Form_1.Text_2.value :=""

ShowRowCol()

return nil

*************************************
Procedure ShowRowCol
local i, z := GetScrollRangeMax ( GetControlHandle("Edit_1","Form_1") , SB_VERT ) / 20
// code to show last lines
for i:=1 to z
SendMessage( GetControlHandle("Edit_1","Form_1") , WM_VSCROLL , SB_PAGEDOWN , 0 )
next
Return



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



Пост N: 44
Зарегистрирован: 15.12.06
ссылка на сообщение  Отправлено: 15.03.07 10:49. Заголовок: Re:


Спасибо, Григорий, подсказка помогла. Только чисто через SendMessage() не годится, т.к. надо выводить сразу (пока что-то делается с БД), чтобы человек не скучал. Так что добавил SHOW и ещё кое-что переделал под свои нужды. И жаль, что нельзя выделять шрифтами и цветом.

#define WM_VSCROLL 0x0115
#define SB_VERT 1
#define SB_PAGEDOWN 3
#define cr chr(13)+chr(10)
function consol_init(zag) //создание консольного окна
set exact on
_w=800 //init width
_h=600 // init height
DEFINE WINDOW ConsolW AT 0,0 WIDTH _w HEIGHT _h;
NOCAPTION NOSIZE TOPMOST BACKCOLOR BLUE //TITLE (zag)
@ 30,3 EDITBOX Edit_1 READONLY WIDTH _w-7 HEIGHT _h-90;
FONT 'Verdana' SIZE 11 NOHSCROLL FONTCOLOR WHITE BACKCOLOR BLACK
@ _h-40,_w-110 BUTTON Button_Q CAPTION 'Закрыть' ;
ACTION ConsolW.release
END WINDOW
ConsolW.Center
ConsolW.show
ConsolW.Button_Q.Enabled:=.f.
if !empty(zag)
DRAW TEXT IN WINDOW ConsolW AT 10,30 VALUE zag FONTCOLOR WHITE;
BACKCOLOR BLUE BOLD
endif
return nil
***************************************
function consol_out(text) //вывод в консольное окно
private a
a=text
tot=ConsolW.Edit_1.value
if alltrim(tot) <> ""
tot=ConsolW.Edit_1.value+cr+a
ConsolW.Edit_1.value:=tot
else
ConsolW.Edit_1.value:=a
endif
ShowRowCol()
ConsolW.Show
return nil
*************************************
Procedure ShowRowCol
local i,z:=GetScrollRangeMax(GetControlHandle("Edit_1","ConsolW"),SB_VERT)/20
// code to show last lines
for i:=1 to z
SendMessage(GetControlHandle("Edit_1","ConsolW"),WM_VSCROLL,SB_PAGEDOWN,0)
next
Return

proc consol_end() //конец вывода в консольное окно (разрешение закрытия)
ConsolW.Button_Q.Enabled:=.t.
ConsolW.Activate
return

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



Пост N: 45
Зарегистрирован: 15.12.06
ссылка на сообщение  Отправлено: 19.03.07 15:09. Заголовок: Так лучше


Всё-таки в том варианте сильно мелькает и даже тормозит при большом выводе. Вот несколько переработал, теперь лучше. Кнопка "Вывод" позволяет отключить вывод, если всё же слишком сильно мелькает, и опять включить, если надо. Правда, иногда медленно реагирует на включение. Может, кто подскажет, как дальше улучшить?
#define cr chr(13)+chr(10)
#define WM_VSCROLL 0x0115
#define SB_BOTTOM 7
function consol_init(zag) //создание консольного окна
public tot:=''
set exact on
_w=800 //init width
_h=600 // init height
DEFINE WINDOW ConsolW AT 0,0 WIDTH _w HEIGHT _h;
NOCAPTION NOSIZE TOPMOST BACKCOLOR BLUE TITLE (zag)
@ 30,3 EDITBOX Edit_1 READONLY WIDTH _w-7 HEIGHT _h-90;
FONT 'Courier' SIZE 11 NOHSCROLL FONTCOLOR WHITE BACKCOLOR BLACK
@ _h-40,_w-220 CHECKBUTTON Button_S CAPTION 'Вывод' VALUE .t.;
ON CHANGE (ConsolW.Edit_1.value:=tot,;
SendMessage(GetControlHandle("Edit_1","ConsolW"),WM_VSCROLL,SB_BOTTOM,0),;
DoMethod('ConsolW','Show'))
@ _h-40,_w-110 BUTTON Button_Q CAPTION 'Закрыть' ;
ACTION ConsolW.release
END WINDOW
ConsolW.Center
ConsolW.show
ConsolW.Button_Q.Enabled:=.f.
if !empty(zag)
DRAW TEXT IN WINDOW ConsolW AT 10,30 VALUE zag FONTCOLOR WHITE;
BACKCOLOR BLUE BOLD
endif
return nil
***************************************
function consol_out(text) //вывод в консольное окно
memvar tot
tot=if(empty(tot),text,tot+cr+text)
if ConsolW.Button_S.value
ConsolW.Edit_1.value:=tot
endif
ShowRowCol()
return nil
*************************************
Procedure ShowRowCol()
static flag:=.f.
if flag
return
endif
flag=.t.
SendMessage(GetControlHandle("Edit_1","ConsolW"),WM_VSCROLL,SB_BOTTOM,0)
ConsolW.Show
flag=.f.
Return
proc consol_end() //конец вывода в консольное окно (разрешение закрытия)
ConsolW.Button_Q.Enabled:=.t.
ConsolW.Button_Q.SetFocus
ConsolW.Activate
return

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

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