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

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

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


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;  

Так тот же код выглядит намного компактнее, хотя для неопытного пользователя может создать проблемы с чтением. Всё же тебе стоит приучаться к этой конструкции, потому что она очень часто используется другими. Если ты её не поймёшь, то не сможешь читать тексты других программистов.
Теги:
графические подсказки
Добавлено: 30 Июля 2018 18:15:54 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...