> 1 <

Автор Сообщение

anokata

Members


Статус

9 сообщений

Где: St. Helena Jamestown
Род занятий:
Возраст: 76

#3892   2011-01-27 18:39 GMT+3 часа(ов)      
Подскажите пожалуйста как программно установить клавиатурный фокус объекту класса text% ?
Или какой другой класс использовать?
А так же как изменить цвет и поменять шрифт части текста?
[: +.`*./ (3 2="0 2])@(-~ [: +/ ((3&# ,. 9&$) <: i.3) |.!.0 ]) , ] ^:

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3893   2011-01-29 21:00 GMT+3 часа(ов)      
> Подскажите пожалуйста как программно установить клавиатурный фокус объекту класса text%?
Необходимо переопределение обработчика необходимого Вам события. Пример нужен?

> А так же как изменить цвет и поменять шрифт части текста?
Базовые классы этого не позволяют, да и расширенные тоже. Если со шрифтами работать умеете, то лучше реализовать собственный компонент.

anokata

Members


Статус

9 сообщений

Где: St. Helena Jamestown
Род занятий:
Возраст: 76

#3897   2011-02-02 13:40 GMT+3 часа(ов)      
Да пример не помешает, если можно.
Как компонент реализовать? Как именно со шрифтами надо уметь работать? напрямую с файлом шрифта?
а то я уже подумываю делать что то типа:
 
#lang racket/gui
(define f (new frame% [label "A"] [width 300] [height 300]))
(send f show #t)
(define bm (make-object bitmap% 300 300))
(define bm-dc (make-object bitmap-dc% bm))
(send bm-dc set-background (make-object color% 180 180 185))
(send bm-dc clear)
(define c (new canvas% [parent f] [paint-callback (lambda (c dc)
(send dc draw-bitmap bm 0 0))]))
(define fn (make-object font% 18 'roman 'slant 'bold #f 'unsmoothed))
(send bm-dc set-text-background (make-object color% 1 200 0))
(send bm-dc set-text-foreground (make-object color% 200 0 0))
 
(send bm-dc set-font fn)
(send bm-dc draw-text "text-0" 10 30)
 
[: +.`*./ (3 2="0 2])@(-~ [: +/ ((3&# ,. 9&$) <: i.3) |.!.0 ]) , ] ^:

anokata

Members


Статус

9 сообщений

Где: St. Helena Jamestown
Род занятий:
Возраст: 76

#3899   2011-02-02 15:30 GMT+3 часа(ов)      
Дошло до следующего:
(define f (new frame% [label "A"] [width 300] [height 300]))
(send f show #t)
 
(define ed (new text% [auto-wrap #t]))
(define ec (new editor-canvas% [parent f] [editor ed] ))
(define sd (make-object style-delta%))
(send sd set-delta-background (make-object color% 0 0 200))
(send sd set-delta-foreground (make-object color% 200 0 0))
(send sd set-delta-face "Comic Sans MS" 'default)
(send sd set-size-add 4)
 
(send ed change-style sd 0)


Вот только фоновый цвет не изменить. Только если переопределять on-paint в editor-canvas% , но тогда потом всё равно белым часть закрасится. А если переопределять в text% то надо же и текст уже самостоятельно правильно отображать?...
Как же программно установить клавиатурный фокус?
[: +.`*./ (3 2="0 2])@(-~ [: +/ ((3&# ,. 9&$) <: i.3) |.!.0 ]) , ] ^:

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3902   2011-02-02 19:04 GMT+3 часа(ов)      
>> А так же как изменить цвет и поменять шрифт части текста?
>Базовые классы этого не позволяют, да и расширенные тоже. Если со шрифтами работать >умеете, то лучше реализовать собственный компонент.

Это мое заблуждение), но компонент создавать все равно придется.
#lang racket/gui
 
(define txt-app%
(class frame%
(super-new [label "Text"]
[width 600]
[height 400])
 
(define style-delta (new style-delta%))
 
(define text-field
(new text-field%
[label #f]
[init-value "ABCDEFGHIJK"]
[style '(multiple hscroll)]
[parent this]))
 
(define edit (send text-field get-editor))
 
(define/override (on-subwindow-char receiver event)
(and (eq? receiver text-field)
(not (eq? (send event get-key-code)
'release))
(send this set-status-text
(format "Keyboard key: ~a"
(send event get-key-code))))
(super on-subwindow-char receiver event))
 
(define/override (on-subwindow-event receiver event)
(and (eq? receiver text-field)
(not (memq (send event get-event-type)
'(enter leave motion)))
(send this set-status-text
(format "Mouse event: ~a"
(send event get-event-type))))
(super on-subwindow-event receiver event))
 
(send* this [create-status-line]
[set-status-text "Status text"])
(send* style-delta [set-delta-foreground "red"]
[set-delta 'change-bold]
[set-size-add 12])
(send edit change-style style-delta 3 8)
(send text-field set-field-background
(make-object color% "wheat"))
(send this show #t)))
 
(new txt-app%)

отредактировал(а) misha: 2011-02-02 19:34 GMT+3 часа(ов)

misha

Moderators


Статус

1275 сообщений
http://racket-lang.org/
Где: Yemen
Род занятий:
Возраст:

#3903   2011-02-02 19:32 GMT+3 часа(ов)      
> Как компонент реализовать?
Компонент - это модуль!

> Как именно со шрифтами надо уметь работать?
Хотя бы уметь изменять свойства шрифта и отображать текст на холсте.

anokata

Members


Статус

9 сообщений

Где: St. Helena Jamestown
Род занятий:
Возраст: 76

#3905   2011-02-03 02:34 GMT+3 часа(ов)      
Отлично, то что надо. Огромное Спасибо!
[: +.`*./ (3 2="0 2])@(-~ [: +/ ((3&# ,. 9&$) <: i.3) |.!.0 ]) , ] ^:
> 1 <


Онлайн :

0 пользователь(ей), 29 гость(ей) :




Реклама на сайте: