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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2010, 15:54   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Получить разницу между указателями.

Чтобы лишний раз не напрягать Лазаря пытаюсь получить bmp.bmBits из HbitMap не вызывая GetObject.

Вот я пытаюсь получить разницу:
Код:
Procedure Draw(Source : HBitMap; X,Y : Integer);
  Var
   Bit     : BitMap;
   Loc     : HDC;
   S1, S2 : String;
  Begin
   Loc := CreateCompatibleDC(Warehouse.Buffer.DC);
   SelectObject(Loc, Source);
   GetObject(Source, SizeOf(Bit), @Bit);
   BitBlt(Warehouse.Buffer.DC, X, Y, Bit.bmWidth, Bit.bmHeight, Loc, 0, 0, SRCCOPY);

   Str(Source, S1);
   Str(Integer(Bit.bmBits), S2);

   MessageBox(0, PChar(S1 + ' ' + S2),'Error',MB_OK);
   DeleteDC(Loc);
  End;
Выдает только S1 и 0. Правильно ли это?
___________________________________ _______________________
Код:
Procedure FVFL_FillAll(Handle: HBITMAP; Color : Integer); StdCall;
Var
 X, Y: Integer;
 BMP: BITMAP;
 P1, P2: PRGBTriple;
 R,G,B : Byte;
 S1,S2 : String;
Begin
 Windows.GetObject(Handle, SizeOf(Bmp), @BMP);
 P1 := BMP.bmBits;
 R := (Color And $0000FF);
 G := (Color And $00FF00) Shr 8;
 B := (Color And $FF0000) Shr 16;
 If BMP.bmBitsPixel = 24 Then
    Begin
      For Y := 0 To BMP.bmHeight - 1 Do
            Begin
             P2 := P1;
             For X := 0 To BMP.bmWidth - 1 Do
                  Begin
                   P2.rgbtRed   := R;
                   P2.rgbtGreen := G;
                   P2.rgbtBlue  := B;
                   Inc(P2);
                  End;
             Pointer(P1) := Pointer(Integer(P1) + BMP.bmWidthBytes);
            End;
      Str(Handle, S1);
      Str(Integer(BMP.bmBits), S2);
      MessageBox(0, PChar(S1 + ' ' + S2),'Error',MB_OK);
    End
 Else
  MessageBox(0, 'Library error - 0x00', 'Error', MB_OK);
End;
А здесь выдает два разных числа.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 02.07.2010 в 15:58.
Alex Cones вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив [3*4]. Определить разницу между максимальным и минимальным значениями. vbchristy46 Помощь студентам 7 15.06.2010 23:29
Вдруг приспичило понять разницу между TstringList и TStrings. Что за класс TPersistent? TwiX Общие вопросы Delphi 2 12.06.2010 02:29
Вычислить разницу между датами без учета года k1r1ch Общие вопросы Delphi 10 20.08.2009 18:36
разница между указателями и ссылками Dimarik Общие вопросы C/C++ 16 10.05.2009 03:13
Получить разницу Даты MAcK Общие вопросы Delphi 1 04.12.2008 17:19