Читать «Виртуальная библиотека Delphi» онлайн - страница 154

Unknown

   StringGrid1.Hint :=IntToStr(r)+#32+IntToStr(c);

  end;

 end;

end;

Вопрос:

Как внести изменения в код VCL?

Ответ:

Примечание: внесение изменений в VCL не поддерживается Borland или Borland Developer Support.

Но если Вы решили сделать это...

Изменения в код VCL никогда не должны вносится в секцию "interface" модуля — только в секцию "implimentation". Наиболее безопасный способ внести изменения в VCL — создать новый каталог названный "исправленный VCL". Скопируйте файл VCL который Вы хотите изменить в этот каталог. Внесите изменения (лучше прокомментировать их) в этот файл. Затем добавьте путь к Вашему каталогу "исправленный VCL" в самое начало "library path". Перезапустите Delphi/C++ Builder и перекомпилируйте Ваш проект. "library path" можно изменить в меню:

Delphi 1 : Options | Environment | Library

Delphi 2 : Tools | Options | Library

Delphi 3 : Tools | Environment Options | Library

Delphi 4 : Tools | Environment Options | Library C++

Builder : Options | Environment | Library

Вопрос:

Как в Delphi реализовать функцию — эквивалент TwipsPerPixel из VisualBasic?

Ответ:

Функции TwipsPerPixelX и TwipsPerPixelY, приведенные в примере реализуют ту же функциональность в Delphi.

Пример:

function TwipsPerPixelX(Canvas : TCanvas) : Extended;

begin

 result := 1440 / GetDeviceCaps(Canvas.Handle, LOGPIXELSX);

end;

function TwipsPerPixelY(Canvas : TCanvas) : Extended;

begin

 result := 1440 / GetDeviceCaps(Canvas.Handle, LOGPIXELSY);

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

 ShowMessage(FloatToStr(TwipsPerPixelX(Form1.Canvas)));

 ShowMessage(FloatToStr(TwipsPerPixelY(Form1.Canvas)));

end;

Вопрос:

Как вставить содержимое файла в текущую позицию курсора в компонете TMemo?

Ответ:

Считайте файл в TMemoryStream, затем используйте метод TMemo SetSelTextBuf() для вставки текста;

var

 TheMStream : TMemoryStream;

 Zero : char;

begin

 TheMStream := TMemoryStream.Create;

 TheMStream.LoadFromFile('C:\AUTOEXEC.BAT');

 TheMStream.Seek(0, soFromEnd); //Null terminate the buffer!

 Zero := #0;

 TheMStream.Write(Zero, 1);

 TheMStream.Seek(0, soFromBeginning);

 Memo1.SetSelTextBuf(TheMStream.Memory);

 TheMStream.Free;

end;

Вопрос:

Как в компоненте TMemo перехватить нажатие Ctrl-V и вставить специальный текст не из буфера обмена (clipboard)?

Ответ:

См. пример.

Пример:

uses ClipBrd;

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);

begin

 if ((Key = ord('V')) and (ssCtrl in Shift)) then begin

  if Clipboard.HasFormat(CF_TEXT) then ClipBoard.Clear;

  Memo1.SelText := 'Delphi is RAD!';

  key := 0;

 end;

end;

Вопрос:

Как создать эквивалент TEdit но только с выравниваением вводимого текста по центру или по правой стороне?

Ответ:

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