Форум: "WinAPI";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
ВнизСоздание рисованной программы. Найти похожие ветки
← →
Iron Maiden (2003-09-28 16:50) [0]Здравствуйте! Я создаю программу с рисованным интерфейсом. Для этого делаю у формы BorderStyle:=bsNone, а потом рисую на ней, что хочу. Но у такой формы нельзя изменять размер. Можно ли обойти эту неприятность? Спасибо.
← →
Song (2003-09-28 17:09) [1]Поищи по слову SC_DRAGMOVE. Однако при растяжке компонента, раз ты сам его перерисовываешь, ты должен предусмотреть, чтобы твой интерфейс также рисовался корректно.
← →
(3223)jab (2003-09-29 16:41) [2]Ну я так понял тебе хотелось бы намутить своё окно под свою картинку? Там типа с отверстиями и т.п. Тогда тебе нужно с регионами поработать:
function TForm1.BitmapToRgn(Image: TBitmap): HRGN;
var
TmpRgn: HRGN;
x, y: integer;
ConsecutivePixels: integer;
CurrentPixel: TColor;
CurrentColor: TColor;
begin
Result := CreateRectRgn(0, 0, Image.Width, Image.Height);
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];
if CurrentColor = CurrentPixel
then inc(ConsecutivePixels)
else begin
if CurrentColor = clWhite then
begin
TmpRgn := CreateRectRgn(x-ConsecutivePixels, y, x, y+1);
CombineRgn(Result, Result, TmpRgn, RGN_DIFF);
DeleteObject(TmpRgn);
end;
CurrentColor := CurrentPixel;
ConsecutivePixels := 1;
end;
end;
if (CurrentColor = clWhite) and (ConsecutivePixels > 0) then
begin
TmpRgn := CreateRectRgn(x-ConsecutivePixels, y, x, y+1);
CombineRgn(Result, Result, TmpRgn, RGN_DIFF);
DeleteObject(TmpRgn);
end;
end;
end;
добавил функцию??? Если да то теперь мутим дальше...
procedure TForm1.FormCreate(Sender: TObject);
var
sd: tstringList;
reg: TRegistry;
o: boolean;
MyRGN : HRGN;
b: TBitmap;
begin
b:=TBitmap.Create;
b.LoadFromResourceName(hInstance,"bit");
//LoadFromFile(ExtractFilePath(ParamStr(1))+"bit.bmp");
form1.Width:=b.Width; form1.Height:=b.Height;
MyRGN := BitmapToRgn(b);
b.free;
SetWindowRgn(Handle, MyRGN, True);
DeleteObject(MyRGN);
end;
Ну типа теперь ты можеш менять скины к своей форме :):):)
Файл "bit.bmp" - это типа маска окна.... там черный цвет будет виден в виде формы, а остальные цвета будут прозрачными... Типа удачи!
← →
Iron Maiden (2003-09-29 18:23) [3]Спасибо, сейчас попробую.
← →
Iron Maiden (2003-09-30 16:12) [4](3223)jab,
Как я понял, эта процедура помогает создавать форму любой формы :). Но мне этого, вобщем-то не требуется, хотя тоже спасибо. Получается, что заголовок формы можно как бы зарисовать? Это мне не восем подходит, и вот почему:
В этом случае у формы остаются бордюры (которые вобщем-то тоже можно зарисовать), а когда формы передвигаешь высвецивается её истинный размер.
Нельзя ли сделать, как я хотел, форму с bsNone, но только чтобы у неё можно было размер менять? Или всё же делать, как вы предложили?
← →
Rem (2003-09-30 19:27) [5]Попробуй в событии на нажатие мыши
ReleaseCapture;
Perform(WM_SYSCOMMAND, $f012, 0);
Отсяда и пляши. Определяй, в каком районе нажата мышь (район бордюра), и отсылай события. А уж коды $f012 и ему подобные сам подбирай... у меня где-то было, но влом искать. Попробуй коды в диапазоне от $f000 до $f02a.
← →
Rem (2003-09-30 19:32) [6]2 (3223)jab
Удалять регион нельзя.
After a successful call to SetWindowRgn, the operating system owns the region specified by the region handle hRgn. The operating system does not make a copy of the region. Thus, you should not make any further function calls with this region handle. In particular, do not close this region handle.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.017 c