FreeBasic
Главная
Вход
Регистрация
Четверг, 05.12.2024, 19:12Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Прозрачный фон TextGadget-у
DarkDemonДата: Четверг, 26.01.2017, 23:19 | Сообщение # 1
Полковник
Группа: Друзья
Сообщений: 200
Репутация: -1
Статус: Offline
Есть вопрос по Window9, как можно поставить TextGadget-у прозрачный фон(т.е. чтобы под текстом не закрашивалось)?

Пытаюсь и так и сяк,  не могу заставить работать эту штуку.
Пробовал устанавливать в RGBA разные параметры, пробовал во флаги засовывать WS_EX_TRANSPARENT.
Пробовал получать хендл гаджета и делать что-то типа
SetWindowLong(GadgetID(35), GWL_EXSTYLE, WS_EX_TRANSPARENT)
Пробовал так
SetGadgetStyle ( 35, 0, WS_EX_TRANSPARENT, 0)

Короче хз как это сделать. Просто очень не хочется возиться с теми же WindowStartDraw\FontDraw\TextDraw\StopDraw и т.д.
 
haavДата: Пятница, 27.01.2017, 06:16 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Я так понял Леха у тебя классическая схема в винде? Попробуй так (первое , что пришло в голову):

Код
#Include "window9.bi"

Dim As Integer iEvent,iColor
Dim As HWND hw

Function GetTranspColorHwnd(hw As HWND) As Integer
    Dim As HDC hdc
    hdc = GetDC(hw)
    ' В GetPixel можно получать цвет по координатам рядом с гаджетом (TextGadget),
    '   если по координатам (1,1) в окне что-то предусматривается
    ' Например: GetPixel(hdc,9,10)
    Function = GetPixel(hdc,1,1)
    ReleaseDC(hw,hdc)
End Function

hw = OpenWindow("1",300,10,500,500)
iColor = GetTranspColorHwnd(hw)
TextGadget(1,10,10,80,30,"Hello World")
SetGadgetColor(1, iColor,0,1)

Do
    iEvent = WaitEvent()
    If iEvent = EventClose Then Exit Do
Loop


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
DarkDemonДата: Пятница, 27.01.2017, 20:38 | Сообщение # 3
Полковник
Группа: Друзья
Сообщений: 200
Репутация: -1
Статус: Offline
>>>Я так понял Леха у тебя классическая схема в винде?

Да все так.

Стас спасибо за решение. Я понял идею(просто не знаю откуда мне захватить прозрачный цвет,
цвет формы непрозрачный), но походу вариантов кроме WindowStartDraw\...\StopDraw
нету. Т.к. хотел положить ImageGadget и на нём отображать TextBox контрол, чтобы он не затирал
картинку.
 
haavДата: Пятница, 27.01.2017, 22:15 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Репутация: 50
Статус: Offline
Цитата DarkDemon ()
Стас спасибо за решение. Я понял идею(просто не знаю откуда мне захватить прозрачный цвет,
цвет формы непрозрачный), но походу вариантов кроме WindowStartDraw\...\StopDraw
нету. Т.к. хотел положить ImageGadget и на нём отображать TextBox контрол, чтобы он не затирал
картинку.


Да, наверно лучше "ручками" рисовать в таком случае. Я бы вообще создал свой класс окна для этого и рисовал бы картинку и текст. Советую раздел 2D_DRAWA, там сглаживание шрифтов получше выглядит.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
DarkDemonДата: Суббота, 28.01.2017, 04:12 | Сообщение # 5
Полковник
Группа: Друзья
Сообщений: 200
Репутация: -1
Статус: Offline
Всё перепробовал, но по факту пришлось использовать 2D_DRAWA.

В просто 2DDRAW есть баг библиотеки, когда загружаешь картинку, а потом начинаешь рисовать этим имаджем по
созданному имаджу, то первый кадр рисует нормально, а потом всё отваливается и уже не рисует.
Я сначала думал, что в моей программе ошибка, 3 раза перепроверил, опух, а потом решил протестить функции
библиотеки и понял что это баг библы.
 
  • Страница 1 из 1
  • 1
Поиск: