Выбрать главу

• Ctrl + S — вкл/выкл зачеркнутого шрифта

• Ctrl + U — вкл/выкл подчеркнутого шрифта

Пример:

const

 KEY_CTRL_B = 02;

 KEY_CTRL_I = 9;

 KEY_CTRL_S = 19;

 KEY_CTRL_U = 21;

procedure TForm1.RichEdit1KeyPress(Sender: TObject; var Key: Char);

begin

 case Ord(Key) of

 KEY_CTRL_B: begin

  Key := #0;

  if fsBold in (Sender as TRichEdit).SelAttributes.Style then (Sender as TRichEdit).SelAttributes.Style := (Sender as TRichEdit).SelAttributes.Style - [fsBold]

  else (Sender as TRichEdit).SelAttributes.Style := (Sender as TRichEdit).SelAttributes.Style + [fsBold];

 end;

 KEY_CTRL_I: begin

  Key := #0;

  if fsItalic in (Sender as TRichEdit).SelAttributes.Style then (Sender as TRichEdit).SelAttributes.Style := (Sender as TRichEdit).SelAttributes.Style - [fsItalic]

  else (Sender as TRichEdit).SelAttributes.Style := (Sender as TRichEdit).SelAttributes.Style + [fsItalic];

 end;

 KEY_CTRL_S: begin

  Key := #0;

  if fsStrikeout in (Sender as TRichEdit).SelAttributes.Style then (Sender as TRichEdit).SelAttributes.Style := (Sender as TRichEdit).SelAttributes.Style-[fsStrikeout]

  else (Sender as TRichEdit).SelAttributes.Style := (Sender as TRichEdit).SelAttributes.Style+[fsStrikeout];

 end;

 KEY_CTRL_U: begin

  Key := #0;

  if fsUnderline in (Sender as TRichEdit).SelAttributes.Style then (Sender as TRichEdit).SelAttributes.Style := (Sender as TRichEdit).SelAttributes.Style-[fsUnderline]

  else (Sender as TRichEdit).SelAttributes.Style := (Sender as TRichEdit).SelAttributes.Style+[fsUnderline];

 end;

 end;

end; 

Вопрос:

В документации компонента TRegIniFile говорится, что можно изменять корневой ключ (root key). Я пытаюсь это сделать но ничего не получается.

Ответ:

См. пример.

Пример:

uses Registry;

procedure TForm1.Button1Click(Sender: TObject);

var WinIni : TRegIniFile;

begin

 WinIni := TRegIniFile.Create('');

 WinIni.RootKey := HKEY_LOCAL_MACHINE;

 WinIni.WriteString('Frank','Borland','Writes Fast Code!');

 WinIni.Free;

end;

Вопрос:

Можно ли динамически изменять свойство "owner" компонента во время выполнения программы?

Ответ:

Вы можете менять свойство "owner" и после создания компонента с помощью методов InsertComponent() и RemoveComponent().

Вопрос:

Как очистить содержимое Canvas'а?

Ответ:

Просто нарисуйте прямоугольник любого цвета.

Пример:

Canvas.Brush.Color := ClWhite;

Canvas.FillRect(Canvas.ClipRect); 

Вопрос:

Можно ли динамически менять какая форма считается главной в приложении во время работы программы?

Ответ:

Можно, но только во время загрузки приложения. Чтобы сделать это выберите "View→Project Source" и измените код инициализации приложения, так что порядок создания форм зависил от какого-то условия.

Примечание: Вам придется редактировать этот код, если Вы добавите в приложение новые формы.

begin

 Application.Initialize;

 if <какое-то условие> then begin

  Application.CreateForm(TForm1, Form1);

  Application.CreateForm(TForm2, Form2);

 end else begin

  Application.CreateForm(TForm2, Form2);

  Application.CreateForm(TForm1, Form1);

 end;

end.

Application.Run;

Вопрос:

Как программно "щелкнуть" по компоненту speed button? Я пытался использовать SendMessage но у Speedbuttons нет "handle".

Ответ:

В примере используется метод Perform класса TControl для отправки сообщения.

Пример:

procedure TForm1.SpeedButton1Click(Sender: TObject);

begin

 ShowMessage('clicked');

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 SpeedButton1.Perform(WM_LBUTTONDOWN, 0, 0);

 SpeedButton1.Perform(WM_LBUTTONUP, 0, 0);

end; 

Вопрос:

Можно ли отключить определенный элемент в RadioGroup?

Ответ:

В примере показано как получить доступ к отдельным элементам компонента TRadioGroup.

Пример:

procedure TForm1.Button1Click(Sender: TObject);

begin

 TRadioButton(RadioGroup1.Controls[1]). Enabled := False;

end; 

Вопрос:

Почему методы рисования Delphi (например MoveTo и LineTo) рисуют на один пиксел короче?

Ответ:

Так работает большинство графических систем, включая Windows. Библиотека VCL просто передает вызовы в функции GDI. Если Вы хотите нарисовать линию с последним пикселом включительно просто добавте единицу к координатам.

Вопрос:

Как показать подсказки "hints" для элементов меню?

Ответ:

В примере создается обработчик события Application.Hint — подсказки меню изображаются на status panel.

Пример:

type TForm1 = class(TForm)

 Panel1: TPanel;

 MainMenu1: TMainMenu;

 MenuItemFile: TMenuItem;

 MenuItemOpen: TMenuItem;

 MenuItemClose: TMenuItem;

 OpenDialog1: TOpenDialog;

 procedure FormCreate(Sender: TObject);

 procedure MenuItemCloseClick(Sender: TObject);

 procedure MenuItemOpenClick(Sender: TObject);

private

 {Private declarations}

 procedure HintHandler(Sender: TObject);

public

 {Public declarations}

end;

var Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);

begin

 Panel1.Align := alBottom;

 MenuItemFile.Hint := 'File Menu';

 MenuItemOpen.Hint := 'Opens A File';

 MenuItemClose.Hint := 'Closes the Application';

 Application.OnHint := HintHandler;

end;

procedure TForm1.HintHandler(Sender: TObject);

begin

 Panel1.Caption := Application.Hint;

end;

procedure TForm1.MenuItemCloseClick(Sender: TObject);