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

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

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

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

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;

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

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



Опубликовал admin
8 Май, Четверг 2003г.



Программирование для чайников.