VR
Virtual Reality On-line   Журнал
Новости   |     Журнал    |    Хаkер    |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]

[ Download  ]
[  Конкурс  ]
[ Анекдоты  ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Язык программирования Delphi.
Работа с графикой, графические подсказки
:
Logo

Что я имел ввиду под выражением "графические подсказки"? Всё очень просто. Ты каждый день встречаешь в программах строку состояния внизу экрана, в которой выскакивают подсказки. Сегодня я покажу тебе, как сделать эти подсказки трёхмерными.
Logo
Рис 1. Пример

На рисунке 1 показана форма, которая будет использоваться нами для вывода графической подсказки. Прежде чем мы приступим, я хочу рассказать, как вообще выводятся подсказки. Вот пример программы (точнее огрызок от программы), которая выводит подсказки:

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnHint := ShowHint;
end;

procedure TForm1.ShowHint(Sender: TObject);
begin
StatusBar1.SimpleText:=Application.Hint;
end;

Теперь о том, что же здесь происходит. В процедуре FormCreate, мы устанавливаем событию Application.OnHint свою процедуру ShowHint . Теперь, когда будет происходить событие OnHint (т.е. когда нужно вывести подсказку), будет вызываться процедура ShowHint . В этой процедуре я просто вывожу подсказку в StatusBar1.

Как видишь, всё очень просто. Теперь можно переходить к графической подсказке. Вот полный исходник:

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    StatusBar1: TStatusBar;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure ShowHint(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
 Application.OnHint := ShowHint;
end;

procedure TForm1.ShowHint(Sender: TObject);
var
 l,t:Integer;
begin
 StatusBar1.Repaint;
 with StatusBar1.Canvas do
  begin
   Brush.Style:=bsClear;
   Font.Color:=clWhite;
   l:=10;
   t:=1;
   TextOut(l,t,Application.Hint);
   if RadioButton1.Checked then
    begin
     inc(l);
     inc(t);
    end
   else
    begin
     dec(l);
     dec(t);
    end;
   Font.Color:=clBlue;
   TextOut(l,t,Application.Hint);
  end;
end;

end.

Здесь тоже ничего сложного нет. Я просто вывожу два раза текст подсказки с разным цветом и небольшим смещением. Единственное, что может показаться для тебя новым, так это конструкция:

with StatusBar1.Canvas do
  begin
  end;

Как я помню, я уже говорил о ней, но всё же решил вернуться и объяснить ещё раз. Она означает, что всё, что находиться между begin и end будет выполняться вместе с StatusBar1.Canvas. На первый взгляд не понятно. Сейчас попробую растолковать. Если ты просто напишешь в процедуре Font:=MyFont, то измениться свойство Font у твоей формы. А если ты напишешь тоже самое внутри конструкции WITH, то измениться Font у StatusBar1.Canvas. Конечно же ты мог бы записать это как StatusBar1.Canvas.Font:=MyFont, но представь, что тебе надо обработать несколько параметров у StatusBar1.Canvas. В этом случае у тебя может конструкция вырости до больших размеров. Например:

StatusBar1.Canvas.Font:=MyFont
StatusBar1.Canvas.Brush:=MyBrush;

Намного проще записать всё это так:

with StatusBar1.Canvas do
 begin
  Font:=MyFont
  StatusBar1.Canvas.Brush:=MyBrush;
 End;

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

На сегодня новостей больше нет. Удачи тебе.

 Исходники примера забирай здесь


Design by FMk group ©
Copyright©: Horrific aka Флёнов Михаил ©