Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.03.2015, 18:59   #1
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
Злость Контролы поверх картинки

Всем привет, есть пример сплеша
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  GPImage: TGPImage;
  GPGraph: TGPGraphics;
  m_Image: TGPImage;
  m_hdcMemory: HDC;
  hdcTemp: HDC;
  hdcScreen: HDC;
  hBMP: HBITMAP;
  sizeWindow: SIZE;
  dwExStyle: DWORD;
  rct: TRect;
  ptWinPos: TPoint;
  ptSrc: TPoint;
  m_Blend: BLENDFUNCTION;
  ResStream: TResourceStream;
  Stream: IStream;
begin
  m_Blend.BlendOp := 0;
  m_Blend.BlendFlags := 0;
  m_Blend.AlphaFormat := 1;
  m_Blend.SourceConstantAlpha := 255;

  try
    // ХвКЗґУЧКФґЦРТФБчµД·ЅКЅФШИлµД
    ResStream := tresourcestream.Create(hinstance, PChar('SplashPng'),
      PChar('PngFile'));
    Stream    := TStreamAdapter.Create(ResStream);
    GPImage   := TGPImage.Create();
    m_Image   := GPImage.FromStream(Stream);

    // Из№ыТЄґУОДјюЦРФШИлЛьУРёц FromFile·Ѕ·Ё
    // GPImage.FromFile(xxx);

  finally

    ResStream.Free;
    Stream._Release();
  end;

  Width := m_Image.GetWidth();
  Height := m_Image.GetHeight();

  hdcTemp := GetDC(0);
  m_hdcMemory := CreateCompatibleDC(hdcTemp);
  hBMP := CreateCompatibleBitmap(hdcTemp, m_Image.GetWidth(),
    m_Image.GetHeight());
  SelectObject(m_hdcMemory, hBMP);

  m_Blend.SourceConstantAlpha := Round(100 * 2.55); // 1~255
  hdcScreen := GetDC(0);
  GetWindowRect(Handle, rct);
  ptWinPos.X := rct.Left;
  ptWinPos.Y := rct.Top;

  GPGraph := TGPGraphics.Create(m_hdcMemory);
  GPGraph.DrawImage(m_Image, 0, 0, m_Image.GetWidth(), m_Image.GetHeight());

  sizeWindow.cx := m_Image.GetWidth();
  sizeWindow.cy := m_Image.GetHeight();

  ptSrc.x := 0;
  ptSrc.y := 0;

  // ОЄґ°МеФцјУА©Х№СщКЅ
  dwExStyle := GetWindowLong(Handle, GWL_EXSTYLE);
  if ((dwExStyle and $80000) <> $80000) then
    SetWindowLong(Handle, GWL_EXSTYLE, dwExStyle xor $80000);

  UpdateLayeredWindow(Handle, hdcScreen, @ptWinPos, @sizeWindow,
    m_hdcMemory, @ptSrc, 0, @m_Blend, 2);

  // КН·ЕЧКФґ
  GPGraph.ReleaseHDC(m_hdcMemory);
  ReleaseDC(0, hdcScreen);
  hdcScreen := 0;

  ReleaseDC(0, hdcTemp);
  hdcTemp := 0;

  DeleteObject(hBMP);

  DeleteDC(m_hdcMemory);

  m_hdcMemory := 0;
  m_Image.Free;
  GPGraph.Free;

end;
как сделать, чтобы поверх отрисовались кнопки, прогрессбар???
ДралсяСошибками вне форума Ответить с цитированием
Старый 19.03.2015, 20:18   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не оч. понял как на данный момент выглядит окно, что контролы за картинку залезли...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.03.2015, 21:02   #3
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

на форме 2 кнопки, только не одной не видно, понимаю, что надо как-то их рисовать, но не знаю как. гуглю на эту тему, но безрезультатно пока(

добавил файл ресурс в котором эта картинка

я не китаец, исходник с китайской помойки))
Изображения
Тип файла: jpg Безымянный.jpg (24.9 Кб, 111 просмотров)
Вложения
Тип файла: zip splash.zip (110.4 Кб, 11 просмотров)
ДралсяСошибками вне форума Ответить с цитированием
Старый 19.03.2015, 21:22   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а, дошло...
Была у меня похожая проблема, я не стал париться просто к рисунку (а точнее на сам рисунок) пририсовал кнопки, а в программе анализировал координаты клика мышки. Если они совпадали с координатами рисунков (их то я четко знал) - производилось действие. Проблема оставалась оживить кнопки на время клика - просто при зажатии ЛКМ рисовал другой рисунок на той канве поверх этого.
А стандартные контролы я тоже отмел.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.03.2015, 21:37   #5
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

ну я хотел сплэш сделать на подобии как у фотошопа, тут мне координаты мышки не особо помогут(((
единственное решение пока, это вырезать на картинке середину и подложить под эту форму другую форму с контролами, но это как-то муторно(((
ДралсяСошибками вне форума Ответить с цитированием
Старый 19.03.2015, 21:59   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
тут мне координаты мышки не особо помогут(
Че это так? Ты же все равно рисуешь на чем-то? Почему нельзя узнать над какими координатами этого чего-то прошла мышка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.03.2015, 22:25   #7
ДралсяСошибками
Форумчанин
 
Аватар для ДралсяСошибками
 
Регистрация: 31.05.2011
Сообщений: 301
По умолчанию

если это сплэш будет, то зачем по нему мышью водить? мне там надо будет например прогресс рисовать))
ДралсяСошибками вне форума Ответить с цитированием
Старый 20.03.2015, 05:43   #8
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

так и рисуй сам, ты же форму не используешь. как ты сюда добавишь контрол. тем более
Код:
 UpdateLayeredWindow(Handle, hdcScreen, @ptWinPos, @sizeWindow,
    m_hdcMemory, @ptSrc, 0, @m_Blend, 2);
предпологает что обновлением будет заниматься сам разработчик.
ZuBy вне форума Ответить с цитированием
Старый 20.03.2015, 07:43   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
например прогресс рисовать
Я бы не надеялся сильно на стандартные формовые контролы. Согласен с Зубом - рисовать по своему получится лучше.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.03.2015, 12:07   #10
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

Если картинка твоя это наследник TComponent, то достаточно контролам присвоить свойству Parent значение этой картинки(точнее указателя на неё) и тогда контролы будут отрисовываться поверх неё.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисую линии поверх картинки при перемещении картинки линии исчезают( sherlocked Общие вопросы Delphi 4 16.01.2015 19:37
Фон поверх картинки bamvam HTML и CSS 1 07.01.2014 00:01
Рисование поверх картинки rokotokobot Мультимедиа в Delphi 10 18.02.2012 20:28
DrawText поверх картинки Qwe1 Win Api 2 28.12.2010 21:49
текст поверх картинки Viteef HTML и CSS 3 29.06.2007 16:58