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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ScrollBar 
:(
    Опции темы
offline
Дата 18.8.2005, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У меня вот такая проблема. У меня есть ScrollBar1, у которого TabStop = False и вид sbVertical. Если событие OnScroll оставить пустым, то когда нажимаень на кнопки ScrollBar1 вниз, ползунок туда ползет. Но если это событие заполняешь и нажимаешь вниз, то ползунок ползет, но если отвести мышь, а зате сново подвести к кнопки вниз и не нажимать на не, то ползунок все равно бежит вниз, хотя на кнопку не нажимал, подскажите, что это за глюк и как с ним боротся?
PM MAIL   Вверх
~FoX~
Дата 18.8.2005, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград

Репутация: 13
Всего: 68



kirilllius
Код покажи....У меня все нормально работает.


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
offline
Дата 18.8.2005, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ок, если не разберусь, то выложу smile
PM MAIL   Вверх
offline
Дата 18.8.2005, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код


//очистка эскизов
procedure TfrmMain.ImageClear;
var
 i : Word;
begin
 //пробежаться по всем компонентам на панели panEskiz
 for i := 0 to panEskiz.ControlCount - 1 do begin
  Application.ProcessMessages;
  if panEskiz.Controls[i] is TShape //если это компонент Шейп (для выделения)
   then TShape(panEskiz.Controls[i]).Visible := False;//скрыть компонент
  if panEskiz.Controls[i] is TImage //если это компонент Изображения
   then TImage(panEskiz.Controls[i]).Picture.Graphic := Nil; //очистить его
  end;
end;

//Измение размеров изображения
procedure CopyGraphicToBitmap(Graphic: TGraphic; Bitmap: TBitmap;
  MaxWidth, MaxHeight: Integer; ShrinkOnly: Boolean);
var
  Width, Height: Integer;
begin
  Width := Graphic.Width;
  Height := Graphic.Height;
  if not ShrinkOnly or (Width > MaxWidth) or (Height > MaxHeight) then
  begin
    if (MaxWidth / Width) < (MaxHeight / Height) then
    begin
      Height := MulDiv(Height, MaxWidth, Width);
      Width := MaxWidth;
    end
    else
    begin
      Width := MulDiv(Width, MaxHeight, Height);
      Height := MaxHeight;
    end;
  end;
  Bitmap.Width := Width;
  Bitmap.Height := Height;
  with Bitmap.Canvas do StretchDraw(ClipRect, Graphic);
end;

//загрузка файла в эскиз
procedure TfrmMain.LoadImage(Path:String; Nomer:Word);
var
 i : Word;
 jpg : TJPEGImage;
begin
  //пробежаться по всем компонентам на панели panMain
try
 jpg := TJPEGImage.Create;
 jpg.Performance := JPBestSpeed;
 jpg.Scale := jsEighth;
 for i := 0 to panEskiz.ControlCount - 1 do begin
  Application.ProcessMessages;
  if (panEskiz.Controls[i] is TShape) and
     (TShape(panEskiz.Controls[i]).Tag = Nomer)
   then TShape(panEskiz.Controls[i]).Visible := True; //показать подсветку
  if (panEskiz.Controls[i] is TImage) and
     (TImage(panEskiz.Controls[i]).Tag = Nomer)
   then begin
    jpg.LoadFromFile(Path);
    CopyGraphicToBitmap(jpg, TImage(panEskiz.Controls[i]).Picture.Bitmap,
   TImage(panEskiz.Controls[i]).Width, TImage(panEskiz.Controls[i]).Height,
     True);
    end;
  end;
finally
 jpg.Free;
end;
end;

procedure TfrmMain.ScrollBar1Scroll(Sender: TObject;
  ScrollCode: TScrollCode; var ScrollPos: Integer);
begin
 if ScrollCode = scTrack then exit;
 Label2.Caption := Inttostr(ScrollPos);
 EskizShow;
end;

procedure TfrmMain.EskizShow;
var
 j : Word;
begin
 ImageClear;
 j := 0;
 //загружаем эскизы 8 файлов
 While (j <= 7) and
       (ScrollBar1.Position * 8 + j <= FileListBox1.Items.Count - 1) do begin
  Application.ProcessMessages;
  LoadImage(FileListBox1.Directory + '\' +
            FileListBox1.Items[ScrollBar1.Position * 8 + j], j);//создать эскиз
  inc(j); //увеличить i на 1, т.е. следующий файл
  end;
end;



Вся проблема в вышеупомянутом в процедуре ScrollBar1Scroll.
если в процедуре LoadImage(Path:String; Nomer:Word); отключить

Код

    CopyGraphicToBitmap(jpg, TImage(panEskiz.Controls[i]).Picture.Bitmap,
       TImage(panEskiz.Controls[i]).Width, TImage(panEskiz.Controls[i]).Height,
       True);


то все работает отлично, т.е. этот глюк вызывает процедура CopyGraphicToBitmap.

пробовал уже ипросто загрузить картинку

Код

TImage(panEskiz.Controls[i]).Picture.Assign(jpg);


все равно, эфект тот же smile

Это сообщение отредактировал(а) kirilllius - 18.8.2005, 10:28
PM MAIL   Вверх
offline
Дата 18.8.2005, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мастера, ну что мне делать с этим ScrollBar smile ?
Что интересно, я взял простую кнопку и в ее событие вставил следующее

Код

 ScrollBar1.Position := ScrollBar1.Position + 1;
 EskizShow;


Все работает, как надо, и графика и все, но как только трогаю ScrollBar он начинает глючить smile . Подскажите, где проблема?

PM MAIL   Вверх
offline
Дата 18.8.2005, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот чудо, отключил Application.ProcessMessages; в LoadImage и в EskizShow и все перестало глючить smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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