![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| X-Serge |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.10.2002 Репутация: нет Всего: нет |
Народ, подскажите.
Вот есть форма, на ней расположена картинка. Как сделать так, чтобы форма имела форму картинки (это я спрашиваю для Win98, в 2000 и выше это можно сделать с помощью транспорантности). И вот еще что, желательно, чтобы при таскании шлейфа сильно не оставалось. |
|||
|
||||
| Dexter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1562 Регистрация: 2.7.2002 Где: Москва, Бирюлево Репутация: 1 Всего: 4 |
Пользуйся регионами
-------------------- The only thing you really know about me is... ...that's all you'll ever know |
|||
|
||||
| X-Serge |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.10.2002 Репутация: нет Всего: нет |
Хотелось бы чуть-чуть по подробнее :-)
Если не трудно небольшой примерчик. |
|||
|
||||
| Dexter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1562 Регистрация: 2.7.2002 Где: Москва, Бирюлево Репутация: 1 Всего: 4 |
Уст. региона
SetWindowRgn(Handle, R, True); Handle - указатель на форму, вид которой хотим поменять R - указатель на регион Третий параметр - флаг, при значении TRUE сразу после установки перерисовка Создание: CreateRectRgn(0, 0, Width, Height); Ну и еще там всякие CombineRgn.
Должны остаться одни кнопки -------------------- The only thing you really know about me is... ...that's all you'll ever know |
|||
|
||||
| X-Serge |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 6.10.2002 Репутация: нет Всего: нет |
Большое спасибо, сейчас попробую помутить.
|
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
Этот пример есть где-то в интернете (не помню где). Немного переделан под свои нужды.
По нажатию на кнопку на форме рисуется обнаженная девушка (супер! :-) ) на белом фоне, после чего белый фон убирается и остается форма в виде этой самой девушки. :-) В общем класно. Картинку могу намылить. D6, W2K. unit Modifi; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; function BitmapToRgn(Image: TBitmap): HRGN; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var MaskBmp: TBitmap; begin MaskBmp := TBitmap.Create; try MaskBmp.LoadFromFile('C:\67.bmp'); Height := MaskBmp.Height; Width := MaskBmp.Width; SetWindowRgn(Handle, BitmapToRgn(MaskBmp), True); finally MaskBmp.Free; end; end; function BitmapToRgn(Image: TBitmap): HRGN; var TmpRgn: HRGN; x, y: integer; ConsecutivePixels: integer; CurrentPixel: TColor; CreatedRgns: integer; CurrentColor: TColor; begin CreatedRgns := 0; Result := CreateRectRgn(0, 0, Form1.Width, Form1.Height); inc(CreatedRgns); if (Image.Width = 0 ) or (Image.Height = 0) then exit; for y := 0 to Image.Height - 1 do begin CurrentColor := Image.Canvas.Pixels[0,y]; ConsecutivePixels := 1; for x := 0 to Image.Width - 1 do begin CurrentPixel :=Image.Canvas.Pixels[x,y]; Form1.Canvas.Pixels[x,y]:=Image.Canvas.Pixels[x+4,y+23]; if CurrentColor = CurrentPixel then inc(ConsecutivePixels) else begin //Цвет фона не чисто белый а с градациями поэтому диапазон if (CurrentColor = 16777215) or (CurrentColor >=15724527 ) then begin TmpRgn := CreateRectRgn(x-ConsecutivePixels, y, x, y+1); CombineRgn(Result, Result, TmpRgn, RGN_DIFF); inc(CreatedRgns); DeleteObject(TmpRgn); end; CurrentColor := CurrentPixel; ConsecutivePixels := 1; end; end; if ((CurrentColor <= 16777215) or (CurrentColor >=15724527 )) and (ConsecutivePixels > 0) then begin TmpRgn := CreateRectRgn(x-ConsecutivePixels, y, x, y+1); CombineRgn(Result, Result, TmpRgn, RGN_DIFF); inc(CreatedRgns); DeleteObject(TmpRgn); end; end; end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); const SC_DragMove = $F012; { a magic number } begin ReleaseCapture; Form1.perform(WM_SysCommand, SC_DragMove, 0); end; end. |
|||
|
||||
| Dexter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1562 Регистрация: 2.7.2002 Где: Москва, Бирюлево Репутация: 1 Всего: 4 |
Да на CodeNet по-мойму -------------------- The only thing you really know about me is... ...that's all you'll ever know |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |