Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Недостаточное макс. значение Width у PaintBox. 
:(
    Опции темы
Vladimir_K
Дата 31.12.2006, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Вывожу на PaintBox график большой протяженности, но, как оказалось, максимальное значение Width=32767. С этим можно что-либо сделать ( в смысле увеличить...)?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Alexeis
Дата 31.12.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Цитата(Vladimir_K @  31.12.2006,  21:45 Найти цитируемый пост)
С этим можно что-либо сделать ( в смысле увеличить...)? 

 smile что увеличить? Монитор? smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Stalker Ghost
Дата 1.1.2007, 04:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 11.11.2004
Где: между столом и ст улом

Репутация: 1
Всего: 2



А как выводишь? С какого нибудь массива или матрици?

PM MAIL MSN   Вверх
Alexeis
Дата 1.1.2007, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



А кажется я вспомнил, здесь речь не области вывода, а о размере битмапа, точнее об ограничениях на ширину битмапа. 
  Есть еще такая идея, попробовать загружать его на winapi про помощи loadImage а рисовать при помощи bitblt. У этих функций ограничения должны быть по больше.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Vladimir_K
Дата 1.1.2007, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Сделал просто: на форме расположил ScrollBox, внутри которого - PaintBox. Для PaintBox задаю Width=32767, на ScrollBox гор. прокруткой можно просмотреть всю длину PaintBox'а, и вывожу для проверки прямоугольник (или линию). Так вот, при Width<=32767 рисовать на канве PaintBox'а можно, если > 32767 - нельзя. Видимо для Width макс. значение = SmallInt. Можно ли изменить его на LongInt?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Vladimir_K
Дата 1.1.2007, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Для PaintBox задал Width>50000, так вот в Windows'98 мой график не отображается, а в XP (установил на этот же комп, на котором пишу прогу) - все работает нормально. Проверял на другом компе с Windows'XP - график не отображается (пока не уменьшу Width<32768).
Как такое возможно?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Alexeis
Дата 2.1.2007, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Vladimir_K, конечно возможно. Windows'XP построен на ядре NT отличном от 98.  smile ... я даже не предполагал, что это ограничение DC, а не делфи. Вообще, задача не стандартная, потому рекомендую использовать нестандартный подход. Например, использовать TScrollBar ведь по вертикали скрол не нужен. По положению движка определить часть картинки, которую нужно отрисовать - расплюнуть. Это же простая арифметика. Просто рисовать ее при помощи copyrect или ее виндового аналога (если битмап отказывается грузить такую картинку). Кстати с битмапом ассоциируется DC, возможно как раз в 98 DC не признает координаты большее чем 32767, потому что битмап, что паинтбокс не смогут такое отображать, ведь они оба используют DC. Вообще, на 98 уже мало ориентируются, лучше проверять совместимость с 2000 виндой. 
  Лично я бы разобрал бы картинку вручную и написал бы свой CopyRect следующим образом: данные из исходного битмапа (образа файла в памяти), записывал бы TBitmap, размером в видимую часть паинтбокса, прямым обращением к его карте, а затем сам битмап одним махом выводил бы на паинтбокс.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Vladimir_K
Дата 2.1.2007, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Цитата(Alexeis @  2.1.2007,  01:48 Найти цитируемый пост)
Например, использовать TScrollBar ведь по вертикали скрол не нужен. По положению движка определить часть картинки, которую нужно отрисовать - расплюнуть.

Я так и делаю: PaintBox, например шириной 20000, а ScrollBox = 500, определяю х-координату левой видимой части PaintBox, и вывожу ту часть графика (рисунка), которая в данный момент видна (шириной 500). При горизонтальном скроллировании все повторяется. Если при скроле выводить сразу все изображение на PaintBox - сильно мерцает изображение и медленно идет гор. скрол.

Цитата(Alexeis @  2.1.2007,  01:48 Найти цитируемый пост)
Лично я бы разобрал бы картинку вручную и написал бы свой CopyRect следующим образом: данные из исходного битмапа (образа файла в памяти), записывал бы TBitmap, размером в видимую часть паинтбокса, прямым обращением к его карте, а затем сам битмап одним махом выводил бы на паинтбокс. 

Круто... Для меня это немного сложновато - Delphi я еще только изучаю.
Как бы мне про это поподробнее узнать?
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
Alexeis
Дата 2.1.2007, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



Попробую написать, что-то подобное. Кстати в win2000 и открывается и рисуются такие битмапы нормально.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 2.1.2007, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 55
Всего: 459



вот получилось
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, math, ExtCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    tmr1: TTimer;
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure tmr1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{$O-}

type
  TColorArray = packed array[0..High(integer) div 4 - 1] of integer;
  PColorArray = ^TColorArray;

var
  b   : TBitmap;
  l   : integer;
  h, w: integer;
  size: Integer;
  map : array of PColorArray;
  mem : Pointer;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeMem(mem, size);
  b.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  FH  : TBitmapFileHeader;
  IH  : TBitmapInfoHeader;
  f   : TFileStream;
  i   : integer;

begin
  b := TBitmap.Create;
  b.PixelFormat := pf24bit;

  f   := TFileStream.Create('f:/1.bmp', fmOpenRead);
  f.ReadBuffer(FH, sizeof(FH));
  f.ReadBuffer(IH, sizeof(IH));

  w := IH.biWidth;
  h := IH.biHeight;

  b.Width  := 250;
  b.Height := h;

  l := ((w * 3 + 3) div 4) * 4;
  size := l * h;
  GetMem(mem, size);
  f.Position := FH.bfOffBits;
  f.ReadBuffer(mem^, size);

  SetLength(map, IH.biHeight);
  map[0] := mem;
  for i := 1 to h  - 1
  do
    map[i] := Pointer(Integer(map[i-1]) + l);

  f.Free;
end;


Procedure CopyRect(r : TRect; cv : TCanvas);
var
  i, j         : Integer;
  start, count : Integer;
  sline, fline : Integer;
Begin
  start := max(0, r.Left * 3);
  count := max(r.Right * 3 - start, 0);
  sline := max(r.Top, 0);
  fline := min(r.Bottom, h - 1);
  for i := sline to fline
  do
    Move(pointer(integer(map[i]) + start)^, b.ScanLine[i]^, count);

  Cv.Draw(20, 20, b);
end;

var
  st : integer = 0;

procedure TForm1.tmr1Timer(Sender: TObject);
begin
  CopyRect(rect(st, 0, st + 249, 99), Canvas);
  st := st + 249;
end;

end.



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Vladimir_K
Дата 2.1.2007, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 2.12.2006

Репутация: нет
Всего: 1



Вот спасибо. Буду разбираться!
--------------------
Судя по всему, у меня огромное количество мозгов - мне требуется уйма времени, чтобы ими пораскинуть
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0527 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.