Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 01.11.2013
Сообщений: 3
1

Изображение скрытого TWinControl

01.11.2013, 18:54. Показов 547. Ответов 1
Метки нет (Все метки)

Среда разработки C++ Builder XE

Есть динамически созданный и скрытый наследник от TWinControl, например TMemo.

Требуется получить его полное изображение.
Т.е. сделать"скриншот" компонента, не показывая его на форме.

Все это требуется для написания собственного управляющего компонента...
Пробовал считать и отрисовать контекст.
Но увы, он не отрисовывается пока компонент скрыт:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    // создаем виртуальный компонент
    TWinControl *win_control = new TMemo(this);
 
    // скрываем
    win_control->Hide();
    // привязываем к текущему окну
    win_control->Parent = this;
 
    // устанавливаем позицию и размеры
    win_control->Left = 0;
    win_control->Top = 0;
    win_control->Width = this->ClientWidth;
    win_control->Height = this->ClientHeight;
 
    // получаем конекст устройства для формы и компонента
    HDC__ *hdc_object = GetDC(win_control->Handle);
    HDC__ *hdc_panel = GetDC(this->Handle);
 
    // отрисовываем
    BitBlt(hdc_panel, 0, 0, win_control->ClientWidth, win_control->ClientHeight, hdc_object, 0, 0, SRCCOPY);
 
    // закрываем контексты
    ReleaseDC(win_control->Handle, hdc_object);
    ReleaseDC(this->Handle, hdc_panel)
Какие еще есть способы получения изображения?

Буду благодарен за любую помощь. Спасибо!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2013, 18:54
Ответы с готовыми решениями:

Создание скрытого раздела на флешке
Здравствуйте! Вообщем требуется создать скрытый раздел на флешке (размер 22 байта). Мне он...

Проблема с TwinControl
Доброго дня! Пожалуйста, подскажите ошибку\недоработку в коде. Условие задачи: есть более десятка...

TWinControl и String
Приветствую. Подскажите возможно ли как-тнибудь назначить NameOfParent свойству Parent? var ...

Свой компонент на основе TWinControl
И сново здравствуйте :) На этот раз пишу к Вам с небольшой проблемкой, касательно компонентов. ...

1
0 / 0 / 0
Регистрация: 01.11.2013
Сообщений: 3
07.11.2013, 23:38  [ТС] 2
к решению натолкнули на другом форуме...

в общем дело было так:

Код
	//////////////////////////////////////////////////////////////////
	//  Создание тестовох компонентов
	//////////////////////////////////////////////////////////////////
	// создем виртуальную форму
	TForm *virtual_form = new TForm(Application);

	// делаем прозрачной
	virtual_form->AlphaBlendValue = 0;
	virtual_form->AlphaBlend = true;
	// отображаем для включение функций прорисовки
	virtual_form->Show();

	// создаем виртуальный компонент
	TMemo *memo = new TMemo(virtual_form);
	TWinControl *win_control = memo;
	// привязываем к виртуальному окну
	win_control->Align = alClient;
	win_control->Dock(virtual_form, virtual_form->ClientRect);
	memo->Lines->Add("Невидимый компонент на \"виртуальной\", сцуко, форме )))))) ААААААААААААА");
	// отображаем
	win_control->Show();

	//////////////////////////////////////////////////////////////////
	//  Прорисовка
	//  ее можно делать в WM_PAINT основной формы например
	//////////////////////////////////////////////////////////////////
	// установка размеров
	virtual_form->Width = this->Width;
	virtual_form->Height = this->Height;
	// прорисовка под новые размеры
	virtual_form->Repaint();

	// счтиваем контексты виртуальной и текущей формы
	HDC__ *hdc_object = GetDC(virtual_form->Handle);
	HDC__ *hdc_panel = GetDC(this->Handle);

	// отрисовываем виртуальную форму на текущей
	BitBlt(hdc_panel, 0, 0, virtual_form->ClientWidth, virtual_form->ClientHeight, hdc_object, 0, 0, SRCCOPY);

	// завершаем работу с контекстами форм
	ReleaseDC(virtual_form->Handle, hdc_object);
	ReleaseDC(this->Handle, hdc_panel);
Конечно, это все через одно место, но, блин, работает)))
Осталось добраться до механизма отрисовки прозрачной формы, но это как появится время...
Однако у нас, ничто так не постоянно, как временное

Буду рад мыслям и предостережениям по данному методу.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2013, 23:38

Дочернее окно на основе TWinControl
Всем привет. Какое то время программировал на mfc, там можно было создать к примеру дочернее окно...

Преобразование массива указателей на TPanel в TWinControl
Доброго времени года. У меня используется динамически созданный массив указателей на динамически...

В чем разница между классами TWinControl, TControl, TComponent?
Вопрос в названии темы.

Тег скрытого текста
Есть ли в HTML специальный тег скрытого текста, аналогичный тегу CUT на этом форуме? Я хочу сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.