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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2012, 18:45   #1
Lauri
Форумчанин
 
Регистрация: 01.04.2010
Сообщений: 171
По умолчанию Загрузка картинки

Код:
{
  Данный код был спроектирован в среде APIx - Visual WinAPI 2
  Copyright (c) PiddleSoft 2004-2006
  http://piddlesoft.narod.ru
  piddlesoft@mail.ru

  Дата генерации листинга - 22.07.2012 20:39:05
}

program Pr1;

uses apireg ,
  SYsUtils,
  shellapi,
  winsock,
  windows,
  messages,
  commctrl;

//Используемые модули

// Иконка

   type TScreenRec = packed record
Width, Height: Integer;
DC: Cardinal;
end;

var
  WinClass : TWndClass; //переменная класса TWndClass для создания главного окна
  hInst : HWND; //хандлер приложения
  Handle : HWND; //локальный хандлер
  Msg : TMSG; //сообщение
  Bmp : HBITMAP;
  hFont : HWND; //хандлер шрифта
  Image1 : HWND; //TImage
  Button1 : HWND; //TButton
  Edit1 : HWND; //TEdit
  Screen: TScreenRec;
  centerw,centerh:integer;


  type
TWinVersion = (wvUnknown,wv95,wv98,wvME,wvNT3,wvNT4,wvW2K,wvXP,wv2003,wvVista,wvSeven);


procedure ShutDown; //процедура завершения программы
begin
  DeleteObject(hFont); //удаление шрифта
  UnRegisterClass('TAPIxForm', hInst); //удаление окна
  ExitProcess(hInst); //закрытие программы
end;

function WindowProc(hwnd, msg, wparam, lparam: longint): longint; stdcall; //обработчик сообщений
begin
  Result := DefWindowProc(hwnd, msg, wparam, lparam);
  case Msg of

WM_COMMAND:
if (lParam = Button1) and (HiWord(wParam) = BN_CLICKED) then
  //OnClick компонента Button1
  begin

  end
;

  WM_DESTROY: ShutDown;
  end;
end;

begin
hInst := GetModuleHandle(nil);
  with WinClass do
  begin
   Style := CS_PARENTDC; //стиль класса главного окна
   lpfnWndProc := @WindowProc; //назначение обработчика сообщений
   hInstance := hInst;
   hbrBackground := COLOR_BTNFACE + 1; //цвет окна
   lpszClassName := 'TAPIxForm'; //класс окна
   hCursor := LoadCursor(0, IDC_ARROW); //активный курсор
  end;
InitCommonControls;
RegisterClass(WinClass); //регистрация класса в системе



// Создание главного окна программы
Handle := CreateWindowEx(0, 'TAPIxForm', 'winlogon',
 WS_POPUP or WS_EX_TOPMOST or
WS_VISIBLE ,
0, 0,Screen.Width , Screen.Height,
0, 0,
hInst, nil);

// Создание шрифта
hFont := CreateFont(
-11, 0, 0, 0, 0, 0, 0, 0,
DEFAULT_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH or FF_DONTCARE, 'MS Sans Serif');

Image1 := CreateWindow(
'Static',
'' ,
WS_CHILD or SS_BITMAP or WS_VISIBLE,
0, 0, 800, 600, Handle, 0, hInst, nil);
SendMessage(Image1, WM_SETFONT, hFont, 0);
Bmp := LoadBitmap(hInstance,pchar('Image1.bmp'));
SendMessage(Image1, STM_SETIMAGE, IMAGE_BITMAP, Bmp);

Button1 := CreateWindow(
'Button',
'Button1',
WS_CHILD or BS_TEXT or WS_VISIBLE,
centerw+120, centerh+170, 25, 21, Handle, Button1, hInst, nil);
SendMessage(Button1, WM_SETFONT, hFont, 0);


Edit1 := CreateWindowEx(
WS_EX_CLIENTEDGE,
'Edit',
'Edit1' ,
WS_CHILD or ES_AUTOHSCROLL or WS_VISIBLE,
centerw, centerh, 185, 21, Handle, 0, hInst, nil);
SendMessage(Edit1, WM_SETFONT, hFont, 0);

  // Цикл сбора сообщений
  while(GetMessage(Msg, 0, 0, 0)) do
  begin
    TranslateMessage(Msg); //прием сообщений
    DispatchMessage(Msg); //удаление сообщений из очереди
  end;
  end.
В папке с программой лежит картинка, как её загрузить? Или пример с PNG картинкой
Lauri вне форума Ответить с цитированием
Старый 26.07.2012, 23:06   #2
VladimirVB
Форумчанин
 
Аватар для VladimirVB
 
Регистрация: 12.10.2008
Сообщений: 131
Стрелка

Пример программы загружающий в окно BMP файл

Код:
program Project1;

uses
  Windows, Messages;

var
  wc: TWndClassEx;
  MainWnd: THandle;
  Mes: TMsg;

const
  ClassName = 'DCDemo';
  AppName = 'Program 1';


function WndProc(hWnd, Msg, WParam, LParam: Integer): Integer; stdcall;
var
  hwndDC, hCompatibleDC: HDC;
  PaintStruct: TPaintStruct;
  hBitmap, hOldBitmap: THandle;
  Rect: TRect;
  Bitmap: TBitmap;
begin
  Result := 0;
  case Msg of
    WM_DESTROY:
      PostQuitMessage(0);
    WM_PAINT: begin
      // получаем контекст устройства
      hwndDC := BeginPaint(hWnd, PaintStruct);
      // Загружаем bitmap, который будет отображаться в окне, из файла
      hBitmap := LoadImage(0, 'chemical.bmp', IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
      // Получаем размерность загруженного bitmap
      GetObject(hBitmap, SizeOf(TBitmap), @Bitmap);
      // Создаем совместимый с контекстом окна контекст в памяти
      hCompatibleDC := CreateCompatibleDC(hwndDC);
      // Делаем загруженный из файла bitmap текущим в совместимом формает
      hOldBitmap := SelectObject(hCompatibleDC, hBitmap);
      // Определяем размер рабочей области окна.
      GetClientRect(hWnd, Rect);
      // Копируем bitmap с совместимого на основной контекст с масштабированием
      StretchBlt(hwndDC, 0, 0, Rect.Right, Rect.Bottom, hCompatibleDC, 0, 0, Bitmap.bmWidth, Bitmap.bmHeight,  SRCCOPY);
      // Вновь делаем старый bitmap текущим
      SelectObject(hCompatibleDC, hOldBitmap);
      // Удаляем загруженный с диска bitmap
      DeleteObject(hBitmap);
      // Удалем совместимый конекст
      DeleteDC(hCompatibleDC);
      // Освобождаем основной контекст, завершая перерисовку рабочей области окна.
      EndPaint(hWnd, PaintStruct);
    end
  else
    Result := DefWindowProc(hWnd, Msg, WParam, LParam);
  end;
end;

begin
  wc.cbSize := SizeOf(wc);
  wc.style := CS_VREDRAW or CS_HREDRAW;
  wc.lpfnWndProc := @WndProc;
  wc.cbClsExtra := 0;
  wc.cbWndExtra := 0;
  wc.hInstance := HInstance;
  wc.hbrBackground := COLOR_WINDOW + 1;
  wc.hCursor := LoadCursor(0, IDC_ARROW);
  wc.hIcon := LoadIcon(0, IDI_APPLICATION);
  wc.hIconSm := wc.hIcon;
  wc.lpszMenuName := nil;
  wc.lpszClassName := ClassName;

  if RegisterClassEx(wc) = 0 then Exit;

   MainWnd := CreateWindowEx(WS_EX_CLIENTEDGE, ClassName, AppName, WS_OVERLAPPEDWINDOW,
    Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), 300,
    200, 0, 0, HInstance, nil);

  ShowWindow(MainWnd, SW_SHOWNORMAL);
  UpdateWindow(MainWnd);

  while GetMessage(Mes, 0,0,0) do
  begin
    TranslateMessage(Mes);
    DispatchMessage(Mes);
  end;
end.
Пример взят из книги Румянцев П. Азбука программирования в win32 API
VladimirVB вне форума Ответить с цитированием
Старый 27.07.2012, 13:24   #3
Lauri
Форумчанин
 
Регистрация: 01.04.2010
Сообщений: 171
По умолчанию

Большое спасибо!
За книгу отдельно
Lauri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
загрузка картинки на фастпик scroyler Работа с сетью в Delphi 0 13.04.2012 15:04
загрузка картинки из файла (C++) Kochevnik_ua_km Помощь студентам 0 21.03.2011 23:18
Отображение картинки на кнопке WPF. Загрузка картинки из ресурсов. Проблема с Uri. Casper-SC Общие вопросы .NET 0 27.06.2010 23:11
Загрузка картинки на сайт denimage Общие вопросы .NET 1 16.04.2010 00:07
загрузка картинки в матрицу Apophis Общие вопросы Delphi 6 29.11.2007 18:57