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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2022, 14:41   #1
cs12
Пользователь
 
Регистрация: 23.03.2014
Сообщений: 24
Печаль Цвет линии не меняется

Здравствуйте!

Помогите понять, почему цвет линии не меняется, а используется цвет формы?

Код:
  for var Gear in Gears do Gear.Canvas.Lock;

  for var Gear in Gears do
    with Gear.Canvas do
    begin
      Brush.Color := Form1.Color;
      Rectangle(0, 0, Gear.ClientWidth, Gear.ClientHeight);
      Brush.Color := clMedGray;
      Pen.Color := Brush.Color;
      Pen.Width := 3;
      Ellipse(0, 0, Gear.ClientWidth, Gear.ClientHeight);
      Pen.Color := clRed;
      Brush.Style := bsClear;
    end;

  for var Gear in Gears do
    with Gear.Canvas do
      LineTo(x,y); // вот здесь цвет формы

  for var Gear in Gears do Gear.Canvas.Unlock;
После запуска программы линия красная, после каждого следующего вызова функции она как будто прорезает дыру в эллипсе, на котором рисуется. Pen.Style и Pen.Mode не дают эффекта. Даже если перед рисованием линии непосредственно задавать цвет.

Полный код процедуры:
Код:
procedure TForm1.UpdateGears();
begin
  var Gears := [Image3, Image4, Image5, Image6];

  const ss = String(GearSS.Caption).ToInteger;
  const val = String(GearValue.Caption);
  const angst = 360 div ss;
  const r = 90;

  for var Gear in Gears do Gear.Canvas.Lock;

  for var Gear in Gears do
    with Gear.Canvas do
    begin
      Brush.Color := Form1.Color;
      Rectangle(0, 0, Gear.ClientWidth, Gear.ClientHeight);
      Brush.Color := clMedGray;
      Pen.Color := Brush.Color;
      Pen.Width := 3;
      Ellipse(0, 0, Gear.ClientWidth, Gear.ClientHeight);
      Pen.Color := clMaroon;
      Font.Size := 20;
      Font.Color := clWhite;
      Font.Name := 'Consolas';
      Font.Quality := fqClearType;
      Brush.Style := bsClear;

      const fix = [-8, -15];

      for var i := 1 to ss do
        TextOut(Round(r*cos(DegToRad(90 - angst * (i - 1)))) + 100 + fix[0], round(r*sin(-DegToRad(90 - angst * (i - 1)))) + 100 + fix[1], digits[i]);
    end;

  var x := val;

  for var Gear in Gears do
    with Gear.Canvas do
    begin
      //var i := Max(digits.IndexOf(x.Substring(x.Length - 1)), 0);
      var d := Max(digits.IndexOf(x.Substring(x.Length - 1)), 0);
      // i почему-то остаётся всегда 11, поэтому d (если знаете, почему, тоже поясните, пожалуйста)

      var fix := -15;

      MoveTo(Gear.ClientWidth div 2, Gear.ClientHeight div 2);
      Gear.Canvas.LineTo(Round((r + fix) * cos(DegToRad(90 - angst * d))) + 100, round((r + fix) * sin(-DegToRad(90 - angst * d))) + 100);

      x := x.Remove(x.Length - 1);
    end;

  for var Gear in Gears do Gear.Canvas.Unlock;
end;
P.S. RadStudio 10.4

Последний раз редактировалось cs12; 11.05.2022 в 15:32.
cs12 вне форума Ответить с цитированием
Старый 11.05.2022, 15:49   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

А вернуть значение Brush.Color/Brush.Style/Pen.Color/Pen.Width не хотите к исходному?
Сохраните исходное сначала, в конце присвойте сохраненные значения.
В функциях Rectangle/Ellipse используются все 4 значения, но вы определяете только одно из них перед вызовом первой и 3 из 4 перед второй, предполагая, что значения недостающих свойств остаются в значениях по умолчанию.
macomics вне форума Ответить с цитированием
Старый 11.05.2022, 15:58   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

чтобы что-то рисовать на экране(форме компонентах) существует Canvas.
А чтобы понять(узнать) что пора что-либо делать существуют события(Events)
Чтобы рисовать существуют события OnDraw... внутри которого и используется Canvas
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.05.2022, 16:02   #4
cs12
Пользователь
 
Регистрация: 23.03.2014
Сообщений: 24
По умолчанию

macomics, не помогло. Я же всё равно цвет переопределяю после эллипса, он должен остаться
cs12 вне форума Ответить с цитированием
Старый 11.05.2022, 16:03   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Но только цвет. Не Brush.Style
macomics вне форума Ответить с цитированием
Старый 12.05.2022, 09:04   #6
cs12
Пользователь
 
Регистрация: 23.03.2014
Сообщений: 24
По умолчанию

Идеи?
cs12 вне форума Ответить с цитированием
Старый 04.02.2023, 22:20   #7
cs12
Пользователь
 
Регистрация: 23.03.2014
Сообщений: 24
По умолчанию

апап
cs12 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО] Не меняется цвет через style usa-1450 JavaScript, Ajax 2 25.10.2018 12:45
[РЕШЕНО] Как у ссылки изменить расстояние от текста до подчёркивающей линии, а также цвет, толщину и цвет? Lolopop12 HTML и CSS 2 05.06.2017 02:13
DateTimePicker не меняется цвет SlavaSH Компоненты Delphi 2 05.12.2013 15:18
Не меняется цвет шрифтов, на компонентах в Delphi_7. StE111 Общие вопросы Delphi 4 26.11.2013 09:57
Как изменить цвет линии? _Studentka_ Общие вопросы .NET 9 05.04.2010 18:28