Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-78848
MORA
2003-11-03 00:46
2003.11.24
Как написать UDF - нужен пример!


3-78783
KIR
2003-11-05 15:34
2003.11.24
Народ, можли как-то добавить пустую строчку в НД?


14-79165
Ёжик
2003-10-19 21:58
2003.11.24
Как написать операционную систему?


14-79127
sagchat
2003-11-01 12:41
2003.11.24
сбрасываются игры


3-78842
Ann
2003-11-03 14:12
2003.11.24
Ошибка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский