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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2021, 20:51   #1
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию Ошибка "Declaration of 'XXXX' differs from previous declaration"

То ли глаз замылился, то ли я чего-то не догоняю:

Код:
unit ScreenGrabber;

interface

uses
 Graphics, Types;

type
  TScreenGrabber = class
  public
    procedure GrabAllScreens(out Bitmap: TBitmap);
    procedure GrabScreen(MonitorID: Integer; out Bitmap: TBitmap);
    procedure GrabRect(Rect: TRect; out Bitmap: TBitmap);
  end;

implementation

uses
  Windows, Forms;

{ TScreenGrabber }

procedure TScreenGrabber.GrabAllScreens(out Bitmap: TBitmap);
var
  Rect: TRect;
begin
  Rect := Bounds(
      GetSystemMetrics(SM_XVIRTUALSCREEN),
      GetSystemMetrics(SM_YVIRTUALSCREEN),
      GetSystemMetrics(SM_CXVIRTUALSCREEN),
      GetSystemMetrics(SM_CYVIRTUALSCREEN)
  );
  GrabRect(Rect, Bitmap);
end;

procedure TScreenGrabber.GrabRect(Rect: TRect; out Bitmap: TBitmap);
var
  ScreenDC: HDC;
begin
  Bitmap.Width  := Rect.Right - Rect.Left;
  Bitmap.Height := Rect.Top   - Rect.Bottom;
  Bitmap.Canvas.Brush.Color := clBlack;
  Bitmap.Canvas.FillRect({Rect}Bounds(0, 0, Bitmap.Width, Bitmap.Height));
  ScreenDC := GetDC(HWND_DESKTOP); // Get DC for all monitors
  BitBlt(Bitmap.Canvas.Handle, 0, 0, Bitmap.Width, Bitmap.Height,
           ScreenDC, Rect.Left, Rect.Top, SRCCOPY);
  ReleaseDC(0, ScreenDC);
end;

procedure TScreenGrabber.GrabScreen(MonitorID: Integer;
  out Bitmap: TBitmap);
var
  Rect: TRect;
  Monitor: TMonitor;
begin
  Monitor := Screen.Monitors[MonitorId];
  Rect := Bounds(
      Monitor.Left,
      Monitor.Top,
      Monitor.Width,
      Monitor.Height
  );
  GrabRect(Rect, Bitmap);
end;

end.
Цитата:
[Error] ScreenGrabber.pas(23): Declaration of 'GrabAllScreens' differs from previous declaration
[Error] ScreenGrabber.pas(33): Undeclared identifier: 'GrabRect'
[Error] ScreenGrabber.pas(36): Declaration of 'GrabRect' differs from previous declaration
[Error] ScreenGrabber.pas(51): Declaration of 'GrabScreen' differs from previous declaration
[Error] ScreenGrabber.pas(63): Undeclared identifier: 'GrabRect'
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 08.05.2021, 21:20   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

В объявлении класса используется TBitmap из Graphics, а в разделе реализации уже TBitmap из Windows.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.05.2021, 21:27   #3
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию

Понятно. Т.е. в секции implementation все упоминания TBitmap заменить на Graphics.TBitmap.
CraZZZy-GameRRR вне форума Ответить с цитированием
Старый 09.05.2021, 03:24   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
В объявлении класса используется TBitmap из Graphics, а в разделе реализации уже TBitmap из Windows.
Вы уверены или только предполагаете? Первый раз в практике сталкиваюсь с такой ситуацией. С порядком упоминания модулей в списке USES проблем нет. Там всё ясно, а вот с такой ситуацией, когда часть модулей упоминается в interface, а часть в implementation сталкиваюсь впервые.
northener вне форума Ответить с цитированием
Старый 09.05.2021, 04:35   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Вы уверены или только предполагаете?
Верю в IDE. При наведении курсора на тип аргумента пишется, где он объявлен.
Цитата:
Сообщение от northener Посмотреть сообщение
когда часть модулей упоминается в interface, а часть в implementation сталкиваюсь впервые.
Аналогично, впервые.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.05.2021, 09:52   #6
CraZZZy-GameRRR
Пользователь
 
Регистрация: 15.04.2010
Сообщений: 98
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Аналогично, впервые.
Я, кстати, тоже.
CraZZZy-GameRRR вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка "error: 'else' without a previous 'if'" ToBs Общие вопросы C/C++ 2 15.09.2016 23:31
[DCC Error] E2037 Declaration of 'SelectFitFromObzor' differs from previous declaration Serik2010 Общие вопросы Delphi 5 06.02.2014 17:37
Ошибка: Declaration of 'Create' differs from previous declaration qwerty8 Общие вопросы Delphi 4 05.12.2013 20:37
Declaration syntax error. Ошибка в С++ Rin Помощь студентам 2 07.09.2011 16:17
[Pascal Error] test_component.pas(43): E2037 Declaration of 'MouseUp' differs from previous declaration Altera Компоненты Delphi 3 10.03.2008 19:44