Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.01.2015, 21:36
helper999999 helper999999 вне форума
Прохожий
 
Регистрация: 30.09.2014
Сообщения: 32
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию Вставить какртинку на winapi

Помогите не получается вставить картинку из ресурса.

Код:
function MessageMainProcess(Handle: HWND; Msg: UINT; WParam: Integer; LParam: Integer): Integer;stdcall;
begin
  Result:=0;
  case msg of
    WM_CREATE:
      begin
      { ...}
      end;
    WM_PAINT:
     begin

     bmp:= LoadGIFRes(hInstance, 'button_next', 'GIF');//Загрузка *.RES
 SelectObject(hdcMem, bmp);
 BitBlt(a, 0, 0, 100, 100, hdcMem, 100, 100, SRCCOPY);
   
     end;

    WM_DESTROY:
      begin
        PostQuitMessage(0);
        Exit;
      end;
  end;
  Result:=DefWindowProc(Handle,Msg,WParam,LParam);
end;
procedure LoadGIFRes она конвертирует, работает как надо но изображение не обрисовывается.
Ответить с цитированием
  #2  
Старый 18.01.2015, 23:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Загрузку файла лучше делать в сообщении WM_CREATE.
Чтобы сказать почему не отрисовывается, нужно видеть часть кода. Откуда взялась переменная а, обычно это ps.hdc, как получена hdcMem?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 19.01.2015, 00:48
helper999999 helper999999 вне форума
Прохожий
 
Регистрация: 30.09.2014
Сообщения: 32
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Загрузку файла лучше делать в сообщении WM_CREATE.
Чтобы сказать почему не отрисовывается, нужно видеть часть кода. Откуда взялась переменная а, обычно это ps.hdc, как получена hdcMem?

надо попробывать, да и самому интересно переменные чем их обозвать, скажу честно что код выдрал из интернета, так как раньше не задовался этим вопросом, и по-этому не знаю. Может как раз вы госспода поможете разобраться.
Ответить с цитированием
  #4  
Старый 19.01.2015, 01:03
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Поможем, если более полный код будет. В частности указанные переменные интересуют.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 19.01.2015, 01:28
helper999999 helper999999 вне форума
Прохожий
 
Регистрация: 30.09.2014
Сообщения: 32
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию

переменные
Код:
var
  hdcMem,a: THandle;
  bmp: hBitmap;
Ответить с цитированием
  #6  
Старый 19.01.2015, 02:30
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Так не пойдёт. Прежде чем использовать эти переменные их нужно инициализировать. Вот этот кусок кода интересует. Кстати, переменная a, не может быть типа THandle.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 19.01.2015, 14:08
HTTqp HTTqp вне форума
Новичок
 
Регистрация: 16.04.2014
Сообщения: 77
Версия Delphi: Delphi 7
Репутация: -25
По умолчанию

delete ....

Последний раз редактировалось HTTqp, 19.01.2015 в 15:16.
Ответить с цитированием
  #8  
Старый 19.01.2015, 15:17
helper999999 helper999999 вне форума
Прохожий
 
Регистрация: 30.09.2014
Сообщения: 32
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Так не пойдёт. Прежде чем использовать эти переменные их нужно инициализировать. Вот этот кусок кода интересует. Кстати, переменная a, не может быть типа THandle.

вот как выглядил код изначально когда я его взял
Код:
bb:=LoadBitmap(HInstance, 'D:\imgs\Новая папка (2)\image.bmp'); //bb -> HBITMAP
 a:=GetDC(Mwindow); //Mwindow -> CreateWindowEx
 SelectObject(hdcMem, bb);
 BitBlt(a, 0, 0, 100, 100, hdcMem, 100, 100, SRCCOPY);
 //a; hdcmem -> HDC
переменных дано не было(
Ответить с цитированием
  #9  
Старый 19.01.2015, 16:25
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Начнём:
Код:
var
  dc, memdc : HDC;
  bmp, oldbmp : HBITMAP;
...
function MessageMainProcess(Wnd : HWND; Msg : UINT; wParam, lParam : Integer) : Integer; stdcall;
var
  ps : PAINTSTRUCT;
begin
  case Msg of
    WM_CREATE :
    begin
      dc := GetDC(0);
      memdc := CreateCompatibleDC(dc);
      bmp := LoadGIFRes(hInstance, 'button_next', 'GIF');//Загрузка *.RES
      oldbmp := SelectObject(memdc, bmp);
    end;

    WM_PAINT :
    begin
      BeginPaint(Wnd, ps);
      BitBlt(ps.hdc, 0, 0, 100, 100, memdc, 0, 0, SRCCOPY);
      EndPaint(Wnd, ps);
    end;

    WM_DESTROY :
    begin
      DeleteObject(SelectObject(memdc, oldbmp));
      DeleteDC(memdc);
      ReleaseDC(0, dc);
      PostQuitMessage(0);
      Exit;
    end;
  end;
  Result := DefWindowProc(Wnd, Msg, wParam, lParam);
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #10  
Старый 19.01.2015, 17:08
helper999999 helper999999 вне форума
Прохожий
 
Регистрация: 30.09.2014
Сообщения: 32
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию

Большое, спасибо. Наверное тему не стоит удалять. Думаю не только мне будет наглядным примером)
Ответить с цитированием
  #11  
Старый 20.01.2015, 21:11
helper999999 helper999999 вне форума
Прохожий
 
Регистрация: 30.09.2014
Сообщения: 32
Версия Delphi: Delphi XE5
Репутация: 10
По умолчанию

а подскажите еще как отловить нажатие на вставленную картинку
Код:
    WM_COMMAND:
      begin
        case loWord(wParam) of
           {не знаю что здесь написать}: messageBox(Handle,'Сообщение','Имя константы',mb_ok);
        end;
Ответить с цитированием
  #12  
Старый 21.01.2015, 00:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Отлов будет производится не при нажатии на картинку, а при нажатии на окно на котором оная картинка отрисована.
Код:
case Msg of
...
    WM_LBUTTONDOWN :
...
end;
Координаты нажатия можно получить из параметра lParam.
Цитата:
xPos = LOWORD(lParam); // horizontal position of cursor
yPos = HIWORD(lParam); // vertical position of cursor
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:46.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025