Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
3 / 3 / 0
Регистрация: 23.11.2011
Сообщений: 90
1

Вывод на форму прозрачного текста поверх компонентов

15.04.2013, 16:46. Показов 4768. Ответов 31
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравсвуйте!
Возникла необходимость вывести по центру формы прозрачный текст (чтобы под символами виднелись компоненты).
Для этого я решил сделать снимок формы, сохранить его в Image, после чего нужным образом наложить на Image текст и вывести Image на форму (таким образом, на время показа надписи будет невозможно взаимодействовать с компонентами формы, т.к. пользователь будет видеть лишь снимок, но это не важно в данном случае).
Пытаюсь, для начала, выполнить хотя бы снимок формы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.FormCreate(Sender: TObject);
begin
...
Image1:=TImage.Create(Form1);
Image1.BoundsRect:=Form1.BoundsRect;
Image1.BringToFront;
...
end;
 
procedure TForm1.ShowImage();
begin
    BitBlt(Image1.Canvas.Handle,0,0,ClientWidth,ClientHeight,GetDC(Handle),0,0,SRCCOPY);
    ... // убираю с формы все компоненты, кроме Image, для того, чтобы понять, сделался ли снимок
    Image1.Show; //в итоге форма пустая, на ней нету никакого снимка
end;
Подскажите пожалуйста, что я делаю неправильно?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2013, 16:46
Ответы с готовыми решениями:

Вывод прозрачного слоя графики поверх всех окон
Пришла в голову мысль написать программу для стумуляции скорости печати. Идея такая: при печати на...

Вывод текста на экран, поверх всех игр, C#
Как это реализовать? Желательно в среде C#

Вывод текста на экран, поверх всех окон
Каким образом можно выводить текст на экран, поверх всех окон, включая всякие игрушки. То есть...

Установить форму поверх окна, которое ее вызвало, но не поверх других окон в системе
Есть приложение типа "блокнот" - это форма1. Форма2 - форма поиска и замены текста вызывается,...

31
Житель Земли
3002 / 3004 / 391
Регистрация: 26.07.2011
Сообщений: 11,463
Записей в блоге: 1
17.04.2013, 08:34 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от _Vitalii_ Посмотреть сообщение
Я не вижу ничего сложного в том, чтобы переопределить свойство Visible у панели
что значит "переопределить". у этого свойства два значения - ВКЛ и ВЫКЛ. что там ты хочешь переопределить?!!
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
17.04.2013, 08:49 22
Цитата Сообщение от _Vitalii_ Посмотреть сообщение
Прошу, скажите, где найти исходник TPanel ?
модуль ExtCtrls TCustomControl<-TWinControl<-TControl<-модуль Controls TComponent<-модуль Classes и т.д. к родителю всего - TObject
1
Ушел наливать чай
188 / 138 / 32
Регистрация: 02.03.2013
Сообщений: 650
17.04.2013, 17:54 23
Цитата Сообщение от _Vitalii_ Посмотреть сообщение
Спасибо большое, аналогичный вариант предлагал cotseec, но у этого способа решения проблемы есть свои недостатки: попробуйте поперемещать основную форму после вывода текста, и вы увидите, что остаются чудовищные следы, и текст "не успевает" за ней. А в моей программе перемещать основную форму нужно обязательно. Да мало ли, какие ещё проблемы могу возникнуть из-за второй формы (программа у меня довольно большая).

Я не вижу ничего сложного в том, чтобы переопределить свойство Visible у панели. Не понимаю, чем вариант с созданием второй формы "проще". С точки зрения "количества кода", разве что.
Прошу, скажите, где найти исходник TPanel ?
Форму закрепить в форме можно.

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

Добавлено через 7 минут
Нет, не сработало(

Добавлено через 15 минут
Цитата Сообщение от _Vitalii_ Посмотреть сообщение
Спасибо большое, аналогичный вариант предлагал cotseec, но у этого способа решения проблемы есть свои недостатки: попробуйте поперемещать основную форму после вывода текста, и вы увидите, что остаются чудовищные следы, и текст "не успевает" за ней. А в моей программе перемещать основную форму нужно обязательно. Да мало ли, какие ещё проблемы могу возникнуть из-за второй формы (программа у меня довольно большая).

Я не вижу ничего сложного в том, чтобы переопределить свойство Visible у панели. Не понимаю, чем вариант с созданием второй формы "проще". С точки зрения "количества кода", разве что.
Прошу, скажите, где найти исходник TPanel ?
Visible:=true - полностью невидима, false - полностью видима. Ни о какой прозрачности речь не может идти. У лэйбла нет свойств прозрачности.
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
17.04.2013, 19:11 24
Цитата Сообщение от _Vitalii_ Посмотреть сообщение
Но, всё-таки, идея с двумя формами кажется мне какой-то корявой.
во вложении с одной формой, по принципу, описанному в первом посте (снимаешь скрин формы и выводишь поверх), чтобы добавить текст необходимо ввести его в эдит и нажать кнопку показать текст, чтобы убрать -необходимо нажать ESC
Вложения
Тип файла: 7z Test20.7z (170.8 Кб, 7 просмотров)
1
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
17.04.2013, 19:30 25
а чтобы текст был действительно прозрачный (сквозь тело букв, а не между буквами видны элементы) см. способ вывода текста тут
1
Ушел наливать чай
188 / 138 / 32
Регистрация: 02.03.2013
Сообщений: 650
17.04.2013, 19:39 26
Цитата Сообщение от cotseec Посмотреть сообщение
а чтобы текст был действительно прозрачный (сквозь тело букв, а не между буквами видны элементы) см. способ вывода текста тут
На скрине написать текст можно через редактор изображений (fotoshop,gimp...)
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
17.04.2013, 19:41 27
Цитата Сообщение от Stas_Garcia Посмотреть сообщение
На скрине написать текст можно
можно, в процессе работы программа делает свой скрин (внешний вид программы меняется, например что-то вводится/выводится в мемо), сама открывает редактор (или просит об этом пользователя), добавляет текст и выводит свой скрин......какая-то хрень получается
0
Ушел наливать чай
188 / 138 / 32
Регистрация: 02.03.2013
Сообщений: 650
17.04.2013, 19:44 28
Цитата Сообщение от cotseec Посмотреть сообщение
можно, в процессе работы программа делает свой скрин (внешний вид программы меняется, например что-то вводится/выводится в мемо), сама открывает редактор (или просит об этом пользователя), добавляет текст и выводит свой скрин......какая-то хрень получается
Не учел, извиняюсь)

Добавлено через 2 минуты
Но ведь можно просто вывести картинку которая будет совпадать с формой только в части, вот пример(грубый):
и просто сделать границы image как границы формы а картинку поместить посредине.
0
Ушел наливать чай
188 / 138 / 32
Регистрация: 02.03.2013
Сообщений: 650
17.04.2013, 19:45 29
Цитата Сообщение от Stas_Garcia Посмотреть сообщение
Не учел, извиняюсь)

Добавлено через 2 минуты
Но ведь можно просто вывести картинку которая будет совпадать с формой только в части, вот пример(грубый):
и просто сделать границы image как границы формы а картинку поместить посредине.
вот::
Миниатюры
Вывод на форму прозрачного текста поверх компонентов  
0
Ушел наливать чай
188 / 138 / 32
Регистрация: 02.03.2013
Сообщений: 650
17.04.2013, 19:53 30
Вот пример программы:
Вложения
Тип файла: rar TextLalka.rar (211.1 Кб, 8 просмотров)
1
Ушел наливать чай
188 / 138 / 32
Регистрация: 02.03.2013
Сообщений: 650
17.04.2013, 19:56 31
Ну если лень в центр подстраивать то можно пустую Timage добавить а на нее обычную.
0
3 / 3 / 0
Регистрация: 23.11.2011
Сообщений: 90
18.04.2013, 18:51  [ТС] 32
Цитата Сообщение от DenNik Посмотреть сообщение
что значит "переопределить". у этого свойства два значения - ВКЛ и ВЫКЛ. что там ты хочешь переопределить?!!
Метод SetVisible, а точнее - его подметод, отвечающий за прорисовку (VisibleChanging, если я не ошибаюсь). Убрать оттуда стирание "бэкграунда" перед отрисовкой (как я понял, именно поэтому происходит мерцание). Но, т.к. это всё в private, придётся подменять свойство Visible своим.

Цитата Сообщение от cotseec Посмотреть сообщение
во вложении с одной формой
Спасибо, твой вариант почему то не мерцает. Вроде бы, всё точно так же (разве что элементы расположены наоборот). У меня же форма конкретно белой становится на доли секунд. Может, потому что все компоненты стиля win7.

P.S. завтра попробую реализовать написанное выше, выложу, что получится.
0
18.04.2013, 18:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2013, 18:51
Помогаю со студенческими работами здесь

Как отобразить форму поверх панели задач, но при этом НЕ поверх других форм?
Всем привет. Прошу помощи с этим простым, казалось бы, вопросом. Местный поиск юзал, гуглил -...

Вывод текста на форму
Добрый день. Не могу придумать способ вывести на форму текст Есть такой код procedure...

Вывод текста на форму
Добрый вечер, такой вопрос: В oracle forms (pl/sql) по нажатию кнопки делаю select из таблицы...

Вывод текста на форму
Привет. Мне надо вывести в label или edit переменную плюс текст: как это можно сделать? ...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru