Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2010, 07:56   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Рисование текста на рабочем столе

Доброе утро! Как вывести текст на рабочем столе в том месте, где я указываю мышкой? Например, как это делается в Paint или Paint.NET, когда нужно вывести текст на картинку.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.07.2010, 08:00   #2
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Получаешь координаты курсора
Код:
var
   Pos: TPoint;
 begin
   GetCursorPos(Pos);
и рисуешь текст на канве рабочего стола:

Код:
GetWindowDC(GetDesktopWindow)
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 30.07.2010, 08:03   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Че т не понял. А что будет передаваться в Pos?
Цитата:
GetWindowDC(GetDesktopWindow)
И какие параметры передавать в эти функции?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.07.2010, 08:11   #4
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Че т не понял. А что будет передаваться в Pos?
И какие параметры передавать в эти функции?)
В Pos будут передавать координаты курсора. Дальше их можно использовать так:

Код:
Твоя функция вывода текста (с координатами Pos.X, Pos.Y)
GetWindowDC(GetDesktopWindow) - это получение Handle рабочего стола.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 30.07.2010, 08:15   #5
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
var Canvas:TCanvas;
begin
 Canvas:=TCanvas.Create;
 Canvas.Handle:=GetDC(0);
 Canvas.Brush.Style:=bsClear;
 Canvas.TextOut(x,y,'Text');
 ReleaseDC(0,Canvas.Handle);
 Canvas.Free;
end;
SERG1980 вне форума Ответить с цитированием
Старый 30.07.2010, 08:34   #6
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

SERG1980, поместил твой код в кнопку, но нажимаю на нее и ничего не происходит. Может еще нужно что-то дописать?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.07.2010, 09:41   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но нажимаю на нее и ничего не происходит.
Происходит
Просто ты этого не видишь. Присмотрись мвимательно, возьми Лупу )))
Шутка. Не видишь ты этого потому что рабстол накрыт компонентом ListView, код Сержа рисует под ним, а тебе для того чтоб лицезреть свое творчество нужно рисовать не на рабстоле а на его ListView:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, QuickRpt, QRCtrls, ExtCtrls, DB, DBTables, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var c:TCanvas;
  Form1: TForm1;

implementation

{$R *.dfm}
 function GetDesktopListViewHandle: THandle;

var

S: String;
begin

Result := FindWindow('ProgMan', nil);
Result := GetWindow(Result, GW_CHILD);
Result := GetWindow(Result, GW_CHILD);
SetLength(S, 40);
GetClassName(Result, PChar(S), 39);
if PChar(S) <> 'SysListView32' then Result := 0;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
 c:=TCanvas.Create;
 c.Handle:=GetDC(GetDesktopListViewHandle);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  c.TextOut(10,10,'adasdasdas');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 c:=nil;
end;

end.
Ферштеен?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.07.2010, 14:14   #8
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Иа вольт . Только есть несколько вопросов и уточнений.
1. Вместо "ProgMan" нужно указывать имя своей программы?
2. Что значит эта строчка:
Код:
if PChar(S) <> 'SysListView32' then Result := 0;
?
3. Как сделать, чтобы фон текста был прозрачный? Необязательно конечно, но так, на всякий случай.
4. То, что текст затирается при наведении на него мыши это нормально?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 30.07.2010, 15:30   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
1. Вместо "ProgMan" нужно указывать имя своей программы?
Ни в коем. Progman - это и есть рабстол по Виндовсовски.
Цитата:
Что значит эта строчка:
Эта строчка значит Если найденное дочернее окно имеет класс SysListView32 (Название класса ЛистВью рабстола в ХРюше) то все ок, иначе вернуть 0 - ошибочный хендл.
Цитата:
Как сделать, чтобы фон текста был прозрачный?
Легко и даже изяшно
Код:
 Canvas.Brush.Style:=bsClear;
Цитата:
То, что текст затирается при наведении на него мыши это нормально?
Абсолютно, рабстол то тоже как и все окна перерисовыввается своими процедурами а не твоей, иначе перехватывай оконную процедуру его на свою.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 23.10.2010, 06:08   #10
Mifig
Пользователь
 
Регистрация: 02.07.2009
Сообщений: 11
По умолчанию

всровно фон белый даже если использовать Canvas.Brush.Style:=bsClear;
Mifig вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Анимация на рабочем столе Djonik Помощь студентам 2 09.12.2009 19:58
кнопка на рабочем столе guffer Общие вопросы Delphi 3 08.07.2009 12:15
Значки на рабочем столе Xardas Свободное общение 4 01.03.2008 20:21
SpeedButton на рабочем столе ERASERROR Общие вопросы Delphi 10 22.01.2008 16:58
html на рабочем столе >AdepT< Win Api 4 28.02.2007 20:06