скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Проблема хранения TDBImage



Автор: Steve Flynn

Краткое руководство по преодолению последствий нарушений трудовой дисциплины.
(Для несознательных компьютерщиков)
Ситуация 1:
Вы опаздываете на работу. На проходной стоит шеф. Ваши действия:
а)Зимний вариант.Снять и спрятать где-нибудь верхнюю одежду. Показать шефу пачку сигарет, объяснив мимоходом, что Вы уже на месте, просто выскочили на секунду в табачный ларек;
б)Летний вариант. Найти пустую коробку (желательно побольше), положить туда что-нибудь потяжелее и поживописнее изобразить погрузочно-разгрузочные работы (с потением и кряхтением);
Ситуация 2:
Вы вышли с товарищем на чашку кофе. Шеф в течении часа ожидает Вас на Вашем рабочем месте. Ваши действия:
а)Сказать,что из винчестера высыпалось несколько кластеров. Пришлось идти занимать у соседей;
б)Сделать удивленное лицо и сказать, что сами целый час торчали под дверью кабинета шефа, для консультации как раз по тому же самому вопросу;
Ситуация 3:
Шеф делает замечание, что после посещения коллеги-компьютерщика от Вас попахивает спиртным и требует объяснений. Ваши действия:
а) Предложите шефу купить новый суперсовременный компьютер, чтобы сэкономить на промывке спиртом контактов и разъёмов.
б) Объясните, что промывали базу данных техническим спиртом;
Ситуация 4:
Вы серьезно превысили лимит работы в Internet'e, просидев несколько часов в bk.ru Ваши действия:
а)Напишите в объяснительной, что новоприобретенная программа пыталась самостоятельно связаться через Internet с разработчиками для согласования каких-то технических деталей;
б)Поясните это возросшим объемом переписки с зарубежными фирмами, которые засыпали Вас выгодными предложениями о работе.
Ситуация 5:
Вы задержались на несколько часов после работы, чтобы добить свою левую халтуру. Шеф интересуется причиной переработки. Ваши действия:
а)Поблагодарите шефа за заботу, в нескольких словах расскажите о своей любви к фирме и намекните на прибавку к зарплате;
б)Объясните,что Вы хотя бы так пытаетесь компенсировать свои частые опоздания на работу и несанкционированные отлучки. Намекните про снятие выговора за опоздания.

Исходный код компонента DBImage содержит ошибку, поскольку пробует загрузить данные буфера обмена, ища CF_PICTURE. А это несовместимо с хранящимися в поле данными.

Я исправил эту ошибку, изменив исходный код таким образом, чтобы данные буфера обмена сначала читались во временный TBitmap. TBitmap регистрируется как CF_PICTURE. Временное изображение затем назначалось полю и, поскольку оно также работает с изображениями, то и данным поля.

Все это потребует от вас изменений в исходном коде VCL, конкретно - в модуле DBCTRLS.PAS. Затем, естественно, это необходимо перекомпилить и пересобрать:


procedure TDBImage.PasteFromClipboard;
var
  ClipBrdBmp: TBitmap;
begin
  ClipBrdBmp := TBitmap.Create;
  if Clipboard.HasFormat(CF_BITMAP) and FDataLink.Edit then
  begin
    ClipBrdBmp.Assign(Clipboard);
    Picture.Assign(ClipBrdBmp);
  end;
  ClipBrdBmp.Free;
end;

Это все. Проблема решена.






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook