Виртуальная библиотека Delphi - [81]

Шрифт
Интервал

Ответ:

TEdit не поддерживает выравниваение текста по центру и по правой стороне — лучше использовать компонент TMemo. Вам понадобится запретить пользователю нажимать Enter, Ctrl-Enter и всевозможные комбинации клавиш со стрелками, чтобы избежать появления нескольких строк в Memo. Этого можно добиться и просматривая содержимое текста в TMemo в поисках кода возврата каретки (13) и перевода строки(10) на событиях TMemo Change и KeyPress. Можно также заменять код возврата каретки на пробел — для того чтобы позволять вставку из буфера обмена многострочного текста в виде одной строки.

Пример:

>procedure TForm1.FormCreate(Sender: TObject);

>begin

> Memo1.Alignment := taRightJustify;

> Memo1.MaxLength := 24;

> Memo1.WantReturns := false;

> Memo1.WordWrap := false;

>end;


>procedure MultiLineMemoToSingleLine(Memo : TMemo);

>var t : string;

>begin

> t := Memo.Text;

> if Pos(#13, t) > 0 then begin

>  while Pos(#13, t) > 0 do delete(t, Pos(#13, t), 1);

>  while Pos(#10, t) > 0 do delete(t, Pos(#10, t), 1);

>  Memo.Text := t;

> end;

>end;


>procedure TForm1.Memo1Change(Sender: TObject);

>begin

> MultiLineMemoToSingleLine(Memo1);

>end;


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

>begin

> MultiLineMemoToSingleLine(Memo1);

>end;


Вопрос:

Как запрограммировать undo?

Ответ:

См. пример

>Memo1.Perform(EM_UNDO, 0, 0);

Если Вы хотите узнать, возможно ли выполнить операцию "Undo", проверьте "Undo status":

>If Memo1.Perform(EM_CANUNDO, 0, 0) <> 0 then begin

> {Undo is possible}

>end;

Для выполнения "Redo" выполните "Undo" еще раз.


Вопрос:

Можно ли создать форму, которая получает дополнительные параметры в методе Сreate?

Ответ:

Просто замените конструктор Create класса Вашей формы.

Пример:

>unit Unit2;

>interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;


>type TForm2 = class(TForm)

>private

> {Private declarations}

>public

> constructor CreateWithCaption(aOwner: TComponent; aCaption: string);

> {Public declarations}

>end;

>var Form2: TForm2;


>implementation

>{$R *.DFM}


>constructor TForm2.CreateWithCaption(aOwner: TComponent; aCaption: string);

>begin

> Create(aOwner);

> Caption := aCaption;

>end;


>uses Unit2;


>procedure TForm1.Button1Click(Sender: TObject);

>begin

> Unit2.Form2 :=Unit2.TForm2.CreateWithCaption(Application, 'My Caption');

> Unit2.Form2.Show;

>end;


Вопрос:

Как бы мне создать эдакий trackbar в котором вместо широкой белой полоски с ползунком была бы тонкая линия?

Ответ:

В примере создается компонент, унаследованный от TTrackbar который переопределяет метод CreateParams и убират флаг TBS_ENABLESELRANGE из Style. Константа TBS_ENABLESELRANGE обьявленна в модуле CommCtrl.

Пример:

>uses CommCtrl, ComCtrls;

>type TMyTrackBar = class(TTrackBar)

> procedure CreateParams(var Params: TCreateParams); override;

>end;


>procedure TMyTrackBar.CreateParams(var Params: TCreateParams);

>begin

> inherited;

> Params.Style := Params.Style and not TBS_ENABLESELRANGE;

>end;


>var MyTrackbar : TMyTrackbar;

>procedure TForm1.Button1Click(Sender: TObject);

>begin

> MyTrackBar := TMyTrackbar.Create(Form1);

> MyTrackbar.Parent := Form1;

> MyTrackbar.Left := 100;

> MyTrackbar.Top := 100;

> MyTrackbar.Width := 150;

> MyTrackbar.Height := 45;

> MyTrackBar.Visible := true;

>end;


Вопрос:

Мне нужен временный canvas, но когда я пытаюсь его создать получаю сообщения об ошибках. Как создать TCanvas?

Ответ:

Создайте Bitmap и используйте свойство canvas класса TBitmap. Пример создает Bitmap, рисует на его canvas'е, выводит этот canvas на форму и освобождает bitmap.

Пример:

>procedure TForm1.Button1Click(Sender: TObject);

>var bm : TBitmap;

>begin

> bm := TBitmap.Create;

> bm.Width := 100;

> bm.Height := 100;

> bm.Canvas.Brush.Color := clRed;

> bm.Canvas.FillRect(Rect(0, 0, 100, 100));

> bm.Canvas.MoveTo(0, 0);

> bm.Canvas.LineTo(100, 100);

> Form1.Canvas.StretchDraw(Form1.ClientRect,Bm);

> bm.Free;

>end;


Вопрос:

В некоторых видео режимах прозрачная часть glyph'а стандартного TBitBtn становится видной. Как этого избежать?

Ответ:

В примере используется техника закраски прозрачной части glyph'а цветом кнопки на которой он находится — таким образом glyph кажется прозрачным.

Пример:

>function InitStdBitBtn(BitBtn : TBitBtn; kind : TBitBtnKind) : bool;

>var

> Bm1 : TBitmap;

> Bm2 : TBitmap;

>begin

> Result := false;

> if Kind = bkCustom then exit;

> Bm1 := TBitmap.Create;

> case Kind of

> bkOK : Bm1.Handle := LoadBitmap(hInstance, 'BBOK');

> bkCancel : Bm1.Handle := LoadBitmap(hInstance, 'BBCANCEL');

> bkHelp : Bm1.Handle := LoadBitmap(hInstance, 'BBHELP');

> bkYes : Bm1.Handle := LoadBitmap(hInstance, 'BBYES');

> bkNo : Bm1.Handle := LoadBitmap(hInstance, 'BBNO');

> bkClose : Bm1.Handle := LoadBitmap(hInstance, 'BBCLOSE');

> bkAbort : Bm1.Handle := LoadBitmap(hInstance, 'BBABORT');

> bkRetry : Bm1.Handle := LoadBitmap(hInstance, 'BBRETRY');

> bkIgnore : Bm1.Handle := LoadBitmap(hInstance, 'BBIGNORE');

> bkAll : Bm1.Handle := LoadBitmap(hInstance, 'BBALL');

> end;

> Bm2 := TBitmap.Create;

> Bm2.Width := Bm1.Width;

> Bm2.Height := Bm1.Height;

> Bm2.Canvas.Brush.Color := ClBtnFace;

> Bm2.Canvas.BrushCopy(Rect(0, 0, bm2.Width, bm2.Height), Bm1, Rect(0, 0, Bm1.width, Bm1.Height), Bm1.canvas.pixels[0,0]);


Еще от автора Неизвестный Автор
Галчонок

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


Призраки ночи

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


Закат  вечности

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


mmmavro.org | День 131, Победа

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


Песнь о Нибелунгах

…«Песнь о Нибелунгах» принадлежит к числу наиболее известных эпических произведений человечества. Она находится в кругу таких творений, как поэмы Гомера и «Песнь о Роланде», «Слово о полку Игореве» и «Божественная комедия» Данте — если оставаться в пределе европейских литератур…В. Г. Адмони.


mmmavro.org | День 132, Поэт

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


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.



DirectX 8. Начинаем работу с DirectX Graphics

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


Симуляция частичной специализации

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


Обработка событий в С++

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.