Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.03.2011, 17:02
Dominys Dominys вне форума
Прохожий
 
Регистрация: 14.03.2011
Сообщения: 11
Репутация: 10
По умолчанию Progressbar поверх другого компонента

Здравствуйте уважаемые коллеги Улыбающийся

У меня возникла проблема, поставили задачу: во время загрузки данных StringGrid сделать светлым тоном (типа осветлить)
и по центру вывести ProgressBar. Может ктото сталкивался с подобной задачей? А то если с прогресбаром вродь понятно, то как осветлить таблицу я себе не представляю.

Спасибо.
Ответить с цитированием
  #2  
Старый 14.03.2011, 17:09
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Нестандартный вариант.
Взять на канве грида нарисовать белый прямоугольник.
Где-то на сайте есть исходник для рисования фигур, используя прозрачность.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 14.03.2011, 17:20
Dominys Dominys вне форума
Прохожий
 
Регистрация: 14.03.2011
Сообщения: 11
Репутация: 10
По умолчанию

С рисованием на канве грида. Пробовал рисовать линию - рисуется только на ячейках, если размер занимаемый ячейками меньше размера грида, то рисуется только на ячейках.
Ответить с цитированием
  #4  
Старый 14.03.2011, 17:30
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Dominys
С рисованием на канве грида. Пробовал рисовать линию - рисуется только на ячейках, если размер занимаемый ячейками меньше размера грида, то рисуется только на ячейках.
У меня квадратик поверх грида отлично нарисовался. И картинки тоже.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 14.03.2011 в 17:32.
Ответить с цитированием
  #5  
Старый 14.03.2011, 17:33
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

вот так отлично закрашивает весь грид:
Код:
var
  ARect: TRect;
  ACanvas: TCanvas;
begin
  ARect.Left := 0;
  ARect.Top := 0;
  ARect.Right := StringGrid1.Width;
  ARect.Bottom := StringGrid1.Height;
  ACanvas := TCanvas.Create;
  ACanvas.Handle := StringGrid1.Canvas.Handle;
  ACanvas.Rectangle(ARect);
  ACanvas.Free;
end;
Ответить с цитированием
  #6  
Старый 14.03.2011, 17:34
Dominys Dominys вне форума
Прохожий
 
Регистрация: 14.03.2011
Сообщения: 11
Репутация: 10
По умолчанию

Но вот как сделать квадратик полупрозрачным?
Ответить с цитированием
  #7  
Старый 14.03.2011, 17:37
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

щас подумаем
Ответить с цитированием
  #8  
Старый 14.03.2011, 17:39
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

самый просто способ, это получить Bitmap с грида, повысить на нём яркость и наложить его обратно на грид ))
Ответить с цитированием
  #9  
Старый 14.03.2011, 17:43
Dominys Dominys вне форума
Прохожий
 
Регистрация: 14.03.2011
Сообщения: 11
Репутация: 10
По умолчанию

Не поделитесь исходником как это сделать? А то я в графике не очень силен. Заранее спасибо!
Ответить с цитированием
  #10  
Старый 14.03.2011, 17:44
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

щас напишу и поделюсь ))) яж только что это придумал ))))
Ответить с цитированием
  #11  
Старый 14.03.2011, 17:47
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

f(x,y)=c*ln(1+p(x,y))
с - константа.
p(x,y) - значение каналов (RGB)
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #12  
Старый 14.03.2011, 17:54
Dominys Dominys вне форума
Прохожий
 
Регистрация: 14.03.2011
Сообщения: 11
Репутация: 10
По умолчанию

Спасибо, попробую. Действительно прямоугольник рисуется отлично.
Но вот при использовании AlphaSkin не рисуется почемуто (
Ответить с цитированием
  #13  
Старый 14.03.2011, 17:59
Dominys Dominys вне форума
Прохожий
 
Регистрация: 14.03.2011
Сообщения: 11
Репутация: 10
По умолчанию

Дауж, похоже что при использовании альфа скинов ничего не получится. Отрисовка таблицы производится гдето внутри альфаскина.
Ответить с цитированием
  #14  
Старый 14.03.2011, 18:00
Assistant Assistant вне форума
Продвинутый
 
Регистрация: 20.02.2011
Адрес: там где правят идиоты
Сообщения: 603
Версия Delphi: 7
Репутация: выкл
По умолчанию

как-то вот так примитивно:

Код:
function Bright(Color: TColor; BrightPercent: Byte): TColor;
var
  r, g, b: Byte;
begin
  Color := ColorToRGB(Color);
  r := GetRValue(Color);
  g := GetGValue(Color);
  b := GetBValue(Color);
  r := r + muldiv(255 - r, BrightPercent, 100);
  g := g + muldiv(255 - g, BrightPercent, 100);
  b := b + muldiv(255 - b, BrightPercent, 100);
  Result := RGB(r, g, b);
end;

procedure BrightBmp(Bmp: TBitmap; BrightPercent: byte);
var
  x,y: integer;
  col: TColor;
begin
  for y:=0 to Bmp.Height do
    for x:=0 to Bmp.Width do
    begin
      col := Bmp.Canvas.Pixels[x,y];
      Bmp.Canvas.Pixels[x,y] := Bright(col,BrightPercent);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Bmp: TBitmap;
begin
  StringGrid1.Enabled := False;
  Bmp := TBitmap.Create;
  Bmp.Width := StringGrid1.Width;
  Bmp.Height := StringGrid1.Height;
  Bmp.Canvas.CopyRect(Bmp.Canvas.ClipRect,StringGrid1.Canvas,StringGrid1.Canvas.ClipRect);
  BrightBmp(Bmp,50);
  StringGrid1.Canvas.CopyRect(StringGrid1.Canvas.ClipRect,Bmp.Canvas,Bmp.Canvas.ClipRect);
  Bmp.Free;
end;

для возвращения исходного состояния:
Код:
StringGrid1.Enabled := True;
StringGrid1.Repaint;

Последний раз редактировалось Assistant, 14.03.2011 в 18:03.
Ответить с цитированием
  #15  
Старый 14.03.2011, 18:07
Dominys Dominys вне форума
Прохожий
 
Регистрация: 14.03.2011
Сообщения: 11
Репутация: 10
По умолчанию

Спасибо, то что надо! Осталось только найти когда SkinManager перерисовывает грид
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter