Пятница, 17.05.2024
Королевство Delphi
Главное меню
Статьи
Наш опрос
Нашли свой исходник?
Всего ответов: 94
Статистика
Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Статьи » Графика » Разные

Работа с графикой, графические подсказки

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

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

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;

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

Получить ссылку на материал

Категория: Разные | Добавил: Барон (13.12.2011)
Просмотров: 1412 | Теги: подсказки, графика | Рейтинг: 1.0/1
[ Пожертвования для сайта ] [ Пожаловаться на материал ]

Если вам помог материал сайта кликните по оплаченной рекламе размещенной в центре

Поиск
Категории раздела
DirectX [17]
OpenGL [2]
Игры [15]
Разные [28]
Королевство Delphi © 2010-2024
Яндекс цитирования