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

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

Запустите BRCC32.exe (Borland Resource CommandLine Compiler) — программа находится в каталоге Bin Delphi/C++ Builder'а — передав ей в качестве параметра полный путь к rc-файлу. В нашем примере:

>C:\DelphiPath\BIN\BRCC32.EXE C:\ProjectPath\FOO.RC

Вы получите откомпилированный ресурс — файл с расширением ".res". (в нашем случае — foo.res). Далее добавьте ресурс к своему приложению.

>{Грузим ресурс}

>{$R FOO.RES}

>uses Jpeg;


>procedure LoadJPEGFromRes(TheJPEG : string; ThePicture : TPicture);

>var

> ResHandle : THandle;

> MemHandle : THandle;

> MemStream : TMemoryStream;

> ResPtr : PByte;

> ResSize : Longint;

> JPEGImage : TJPEGImage;

> begin ResHandle := FindResource(hInstance, PChar(TheJPEG), 'JPEG');

> MemHandle := LoadResource(hInstance, ResHandle);

> ResPtr := LockResource(MemHandle);

> MemStream := TMemoryStream.Create;

> JPEGImage := TJPEGImage.Create;

> ResSize := SizeOfResource(hInstance, ResHandle);

> MemStream.SetSize(ResSize);

> MemStream.Write(ResPtr^, ResSize);

> FreeResource(MemHandle);

> MemStream.Seek(0, 0);

> JPEGImage.LoadFromStream(MemStream);

> ThePicture.Assign(JPEGImage);

> JPEGImage.Free;

> MemStream.Free;

>end;


>procedure TForm1.Button1Click(Sender: TObject);

>begin

> LoadJPEGFromRes('MYJPEG', Image1.Picture);

>end;


Вопрос:

Как перехватить сообщения прокрутки в TScrollBox?

Ответ:

Следующий пример перехватывает сообщения о прокрутке компонента TScrollBox и синхронизирует обе линейки прокрутки. Сообщения прокрутки перехватываются с помощью переопределения оконной процедуры (WinProc) ScrollBox'а.

Пример:

>type

>{$IFDEF WIN32}

>WParameter = LongInt;

>{$ELSE}

>WParameter = Word;

>{$ENDIF}

>LParameter = LongInt;


>{Declare a variable to hold the window procedure we are replacing}

>var OldWindowProc : Pointer;


>function NewWindowProc(WindowHandle : hWnd; TheMessage : WParameter; ParamW : WParameter; ParamL : LParameter) : LongInt

>{$IFDEF WIN32} stdcall; {$ELSE} ; export; {$ENDIF}

>var

> TheRangeMin : integer;

> TheRangeMax : integer;

> TheRange : integer;

>begin

> if TheMessage = WM_VSCROLL then begin

>  {Get the min and max range of the horizontal scroll box}

>  GetScrollRange(WindowHandle, SB_HORZ, TheRangeMin, TheRangeMax);

>  {Get the vertical scroll box position}

>  TheRange := GetScrollPos(WindowHandle, SB_VERT);

>  {Make sure we wont exceed the range}

>  if TheRange < TheRangeMin then TheRange := TheRangeMin else if TheRange > TheRangeMax then TheRange := TheRangeMax;

>  {Set the horizontal scroll bar}

>  SetScrollPos(WindowHandle, SB_HORZ, TheRange, true);

> end;

> if TheMessage = WM_HSCROLL then begin

>  {Get the min and max range of the horizontal scroll box}

>  GetScrollRange(WindowHandle, SB_VERT, heRangeMin, TheRangeMax);

>  {Get the horizontal scroll box position}

>  TheRange := GetScrollPos(WindowHandle, SB_HORZ);

>  {Make sure we wont exceed the range}

>  if TheRange < TheRangeMin then TheRange := TheRangeMin else if TheRange > TheRangeMax then TheRange := TheRangeMax;

>   {Set the vertical scroll bar}

>   SetScrollPos(WindowHandle, SB_VERT, TheRange, true);

>  end;

> {Call the old Window procedure to allow processing of the message.}

> NewWindowProc := CallWindowProc(OldWindowProc, WindowHandle, TheMessage, ParamW, ParamL);

>end;


>procedure TForm1.FormCreate(Sender: TObject);

>begin

> {Set the new window procedure for the control and remember the old window procedure.}

> OldWindowProc := Pointer(SetWindowLong(ScrollBox1.Handle, GWL_WNDPROC, LongInt(@NewWindowProc)));

>end;


>procedure TForm1.FormDestroy(Sender: TObject);

>begin

> {Set the window procedure back to the old window procedure.}

> SetWindowLong(ScrollBox1.Handle, GWL_WNDPROC, LongInt(OldWindowProc));

>end;


Вопрос:

Как сделать прямоугольник для выделения части картинки для редактирования?

Ответ:

Самый простой способ — воспользоваться функцией Windows API DrawFocusRect. Функция DrawFocusRect использует операцию XOR при рисовании — таким образом вывод прямоугольника дважды с одними и теми же координатами стирает прямоугольник, и прямоугольник всегда будет виден, на фоне какого бы цвета он не выводился.

Пример:

>type TForm1 = class(TForm)

> procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

> procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

> procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

>private

> {Private declarations}

> Capturing : bool;

> Captured : bool;

> StartPlace : TPoint;

> EndPlace : TPoint;

>public

> {Public declarations}

>end;


>var Form1: TForm1;


>implementation

>{$R *.DFM}


>function MakeRect(Pt1 : TPoint; Pt2 : TPoint) : TRect;

>begin

> if pt1.x < pt2.x then begin

>  Result.Left := pt1.x;

>  Result.Right := pt2.x;

> end else begin

>  Result.Left := pt2.x;

>  Result.Right := pt1.x;

> end;

> if pt1.y < pt2.y then begin

>  Result.Top := pt1.y;

>  Result.Bottom := pt2.y;

> end else begin

>  Result.Top := pt2.y;

>  Result.Bottom := pt1.y;

> end;

>end;


>procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

>begin

> if Captured then DrawFocusRect(Form1.Canvas.Handle,MakeRect(StartPlace,EndPlace));

> StartPlace.x := X;

> StartPlace.y := Y;


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

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


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

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


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

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


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

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


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

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


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

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


Рекомендуем почитать
Графика DirectX в Delphi

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


Вторая жизнь старых компьютеров

Сейчас во многих школах, институтах и других учебных заведениях можно встретить компьютеры старого парка, уже отслужившие свое как морально, так и физически. На таких компьютерах можно изучать разве что Dos, что далеко от реалий сегодняшнего дня. К тому же у большинства, как правило, жесткий диск уже в нерабочем состоянии. Но и выбросить жалко, а новых никто не дает. Различные спонсоры, меценаты, бывает, подарят компьютер (один) и радуются, как дети. Спасибо, конечно, большое, но проблемы, как вы понимаете, этот компьютер в общем не решает, даже наоборот, усугубляет, работать на старых уже как-то не хочется, теперь просто есть с чем сравнивать.


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

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


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

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


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

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


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

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