Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод инфы в углу экрана, Имеются идеи, но нужна помощь. 
:(
    Опции темы
Fel
Дата 11.3.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



Добрый день. Имеется одна проблема - вывод некой информации в углу экрана, когда программа находится в свёрнутом состоянии.

Пути реализации: 

1). Создание формы в нужных координатах с требуемыми компонентами для вывода инфо. Вопрос: 

Как сделать, чтобы форма была прозрачной, а компоненты видимыми на сто процентов?

2). Вывод требуемой информации напрямую, через создание канваса, по следующему принципу:

Код

procedure WriteDC(s: string); 
var c: TCanvas; 
begin 
  c := TCanvas.Create; 
  c.Brush.Color := clBlue; 
  c.Font.color := clYellow; 
  c.Font.name := 'Fixedsys'; 
  c.Handle := GetDC(GetWindow(GetDesktopWindow, GW_OWNER)); 
  c.TextOut(screen.Width - c.TextWidth(s) - 2, screen.Height - 43, s); 
  c.free; 
end; 


(взято из Delphi Russian Knowledge Base v2.2 by Vit)

Вопрос:

Каким образом можно стереть выводимую информацию?

то есть, скажем, при активизации формы Канва, вместе со всем содержимым удалялась.
PM MAIL   Вверх
Sunvas
Дата 11.3.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(Fel @  11.3.2007,  16:53 Найти цитируемый пост)
Как сделать, чтобы форма была прозрачной, а компоненты видимыми на сто процентов?

Кажется прозрачность наследственна..

Цитата(Fel @  11.3.2007,  16:53 Найти цитируемый пост)
Каким образом можно стереть выводимую информацию?

Обновить экран.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
ivan219
Дата 11.3.2007, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Вот код который делает форму невидимой а ресунок на катринке видимым т.е. рисуй на Image1
эта называется работать с регионами
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, Buttons, XPMan;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Label1: TLabel;
    XPManifest: TXPManifest;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
    Dragging   : Boolean;
    OldLeft,OldTop   : Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

function CreateRgnFromBitmap(rgnBitmap: TBitmap): HRGN;
var
  TransColor: TColor;
  i, j: Integer;
  i_width, i_height: Integer;
  i_left, i_right: Integer;
  rectRgn: HRGN;
begin
 Result := 0;
 i_width := rgnBitmap.Width;
 i_height := rgnBitmap.Height;
 transColor := rgnBitmap.Canvas.Pixels[0, 0];
 for i := 0 to i_height - 1 do
  begin
   i_left := -1;
   for j := 0 to i_width - 1 do
    begin
     if i_left < 0 then
      begin
       if rgnBitmap.Canvas.Pixels[j, i] <> transColor then
        i_left := j;
      end
     else
      if rgnBitmap.Canvas.Pixels[j, i] = transColor then
       begin
        i_right := j;
        rectRgn := CreateRectRgn(i_left, i, i_right, i + 1);
        if Result = 0 then
         Result := rectRgn
        else
         begin
          CombineRgn(Result, Result, rectRgn, RGN_OR);
          DeleteObject(rectRgn);
         end;
        i_left := -1;
       end;
    end;
   if i_left >= 0 then
    begin
     rectRgn := CreateRectRgn(i_left, i, i_width, i + 1);
     if Result = 0 then
      Result := rectRgn
     else
      begin
       CombineRgn(Result, Result, rectRgn, RGN_OR);
       DeleteObject(rectRgn);
      end;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 WindowRgn: HRGN;
begin
 BorderStyle := bsNone;
 ClientWidth := Image1.Picture.Bitmap.Width;
 ClientHeight := Image1.Picture.Bitmap.Height;
 windowRgn := CreateRgnFromBitmap(Image1.Picture.Bitmap);
 SetWindowRgn(Handle, WindowRgn, True);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 Canvas.Draw(0, 0, Image1.Picture.Bitmap);
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if button=mbLeft then
  begin
   Dragging := True;
   OldLeft := X;
   OldTop := Y;
  end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if Dragging then
  begin
   Left := Left+X-OldLeft;
   Top := Top+Y-OldTop;
  end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 Dragging := False;
end;

end.


Добавлено @ 20:11 
Пример на рабочем столе smile 
user posted image

Добавлено @ 20:20 
user posted image
PM MAIL ICQ   Вверх
Fel
Дата 11.3.2007, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



Sunvas
Цитата
Обновить экран.


недопустимо, ибо все это дело происходит в таймере. Получается что экран будет обновлятся через каждую секунду.

ivan219

Спасибо, сейчас опробую smile
PM MAIL   Вверх
ivan219
Дата 11.3.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Попробуй не пожелееш smile 

Вот так можно через таймер.
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private

  public
    { Public declarations }
  end;

function CreateRgnFromBitmap(rgnBitmap: TBitmap): HRGN;  

var
  Form1: TForm1;
  X: Integer;
implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var
 WindowRgn: HRGN;
begin
 Image1.Canvas.MoveTo(10,10);
 Image1.Canvas.LineTo(20,30);
 BorderStyle := bsNone;
 ClientWidth := Image1.Picture.Bitmap.Width;
 ClientHeight := Image1.Picture.Bitmap.Height;
 windowRgn := CreateRgnFromBitmap(Image1.Picture.Bitmap);
 SetWindowRgn(Handle, WindowRgn, True);
end;

function CreateRgnFromBitmap(rgnBitmap: TBitmap): HRGN;
var
  TransColor: TColor;
  i, j: Integer;
  i_width, i_height: Integer;
  i_left, i_right: Integer;
  rectRgn: HRGN;
begin
 Result := 0;
 i_width := rgnBitmap.Width;
 i_height := rgnBitmap.Height;
 transColor := rgnBitmap.Canvas.Pixels[0, 0];
 for i := 0 to i_height - 1 do
  begin
   i_left := -1;
   for j := 0 to i_width - 1 do
    begin
     if i_left < 0 then
      begin
       if rgnBitmap.Canvas.Pixels[j, i] <> transColor then
        i_left := j;
      end
     else
      if rgnBitmap.Canvas.Pixels[j, i] = transColor then
       begin
        i_right := j;
        rectRgn := CreateRectRgn(i_left, i, i_right, i + 1);
        if Result = 0 then
         Result := rectRgn
        else
         begin
          CombineRgn(Result, Result, rectRgn, RGN_OR);
          DeleteObject(rectRgn);
         end;
        i_left := -1;
       end;
    end;
   if i_left >= 0 then
    begin
     rectRgn := CreateRectRgn(i_left, i, i_width, i + 1);
     if Result = 0 then
      Result := rectRgn
     else
      begin
       CombineRgn(Result, Result, rectRgn, RGN_OR);
       DeleteObject(rectRgn);
      end;
    end;
  end;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 Canvas.Draw(0, 0, Image1.Picture.Bitmap);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
 WindowRgn: HRGN;
begin
 Image1.Picture:=nil;
 Image1.Canvas.MoveTo(10+X,10);
 Image1.Canvas.LineTo(20,30);
 windowRgn := CreateRgnFromBitmap(Image1.Picture.Bitmap);
 SetWindowRgn(Handle, WindowRgn, True);
 if X<20 then Inc(X)
 else X:=0;
 Canvas.Draw(0, 0, Image1.Picture.Bitmap);
end;

end.

PM MAIL ICQ   Вверх
Yanis
Дата 12.3.2007, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Fel
Может просто baloon hint показывать? Какого рода инфу нужно показывать?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Fel
Дата 12.3.2007, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



Вообще программа считает время, траффик и деньги по траффу в Инете.  Это уже всё есть. В свёрнутом состоянии в трее она должа всё это выводить в правом нижнем углу экрана поверх всего. Текстом, или на прозрачной форме. Вот над этим пока работаю. Вариант ivan219 понравился, пока на на нём остановился. 

Yanis а что такое baloon hint? 

Это сообщение отредактировал(а) Fel - 12.3.2007, 20:15
PM MAIL   Вверх
Elfebet
Дата 12.3.2007, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 2
Всего: 14



а може что-то типа такого?

Это сообщение отредактировал(а) Elfebet - 12.3.2007, 21:25

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  taskbarnotifier.rar 24,25 Kb


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
Fel
Дата 12.3.2007, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



Ссылка битая. Скачать не получается
PM MAIL   Вверх
Elfebet
Дата 12.3.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 2
Всего: 14



сцылку исправил



--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
ivan219
Дата 12.3.2007, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Цитата(Fel @  12.3.2007,  20:04 Найти цитируемый пост)
Yanis а что такое baloon hint?

Это обычный Hint только в форме балона.
PM MAIL ICQ   Вверх
Fel
Дата 12.3.2007, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.3.2007

Репутация: нет
Всего: нет



Elfebet спасибо, неплохой компонентик smile. Если б ещё и прозрачный можно было бы фон делать цены б ему не было smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0643 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.