Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Delphi Как программно симитировать события? https://www.cyberforum.ru/ delphi/ thread1101611.html
Допустим у нас есть событие - клик мышью по форме на таких то координатах. Так вот как можно программно, без всяких действий пользователя заставить делфи думать что это событие произошло? Единственный способ который я вижу - напрямую вызывать обработчик этого события. Это единственный способ?
Delphi Exception
Как мне создать свой класс который наслед Exception и использовать его при проверке? напишите пример
Delphi Конвертация времени в нормальный вид из "2014-02-05T04:18:52-0500" https://www.cyberforum.ru/ delphi/ thread1101361.html
Программа считывает даты и предоставляет их пользователю, естественно, что в таком виде - 2014-02-05T04:18:52-0500 - дату не покажешь - непонятно. Есть ли стандартные процедуры для конвертации времени в формат типа "ДД.ММ.ГГГГ ЧЧ:ММ" из такой билебердистики? Желательно бы узнать точное название функции.
Delphi Работа с LPT портом Добрый день форумчане, столкнулся с проблемой. Печатающее устройство получает информацию через линии данных интерфейса. Печать полной строки (80 символов) печатающее устройство подразделяет на 4 зоны по 20 символов в каждой. Бумага и красящая лента расположены между рядом 80 бойков и непрерывно вращающимся печатающим барабаном. Блок управления производит развертку хранимой в буферной памяти... https://www.cyberforum.ru/ delphi/ thread1101016.html
Delphi Оптимальный портфель Марковица: неверный результат
Здравствуйте, пишу программу по модели оптимального портфеля Марковица возникает проблема в операции 'procedure TForm1.Button5Click(Sender: TObject); 'в 1 форме, я пытаюсь найти процентные доли оптимального портфеля, для этого хочу создать ограничение для массивов что бы их сумма ровнялась 100 и выполнялась формула...
Delphi Калькулятор https://www.cyberforum.ru/ delphi/ thread1099923.html
делаю свою первую программу, типа калькулятор. есть такая проблема если в едит не ввели ничего выбивает ошибку. как сделать что бы пустая строка приравнивалась к 0
Delphi Аналог какого-то табличного компонента из Java-программы в Delphi https://www.cyberforum.ru/ delphi/ thread1099901.html
В одной программе на Java встретил такой табличный компонент, что на скриншоте (версию без замазывания не могу предоставить по религиозным соображениям). По ощущениям напоминает TListBox со столбцами. Есть ли такой компонент в Delphi, и если нет, то какой у него ближайший аналог?
Правильное ООП и модульность Delphi
Нужны советы опытных программистов. Решил сделать рефакторинг проекта. Общие правила я знаю и стараюсь следовать им (понятные имена методов, избегание дублирование кода и т.д.). Но хотелось бы разъяснить несколько вопросов. Функции должны быть отделёны от интерфейса. Но стоит ли выносить их все в отдельный модуль? Сейчас, например, они все описаны в юните главной формы в классе формы,...
Delphi Скрытый OnMouseMove у всех CheckBox - привязка к кнопке на клавиатуре Здравствуйте. Смысл такой: всего 30 CheckBox, у всех есть событие OnMouseMove. Как сделать его в false, а на кнопку клавиатуры(скажем Shift нажать и удерживать) активировать его в True, а при отпускании Shift - обратно в Falce. Очень буду признателен за готовый пример, пускай и не самый лучший, т.к. я только учусь и написать такое для меня очень сложно. :) https://www.cyberforum.ru/ delphi/ thread1098398.html Delphi Открыть файл формата WAV, воспроизвести его и отобразить график амплитуды и времени этого сигнала (файла), а также спектр сигнала https://www.cyberforum.ru/ delphi/ thread1098093.html
Здравствуйте ! Помогите пожалуйста с программой на Delphi 7. Не могу написать программу которая по нажатию вкладки ОТКРЫТЬ в меню ФАЙЛ, открыла бы файл формата WAV, воспроизвела его и отображался график амплитуды и времени этого сигнала (файла), а также спектр сигнала. Помогите пожалуйста ! Буду очень благодарна ! Спасибо !
Delphi Форматирование JSON с SuperObject
SuperObject сохраняет JSON-объекты в файлы через Объект.SaveTo(Путь) вот в таком виде: {"a":"b","c":"d"} Можно ли заставить его форматировать при сохранении так: { "a": "b", "c": "d" }
Delphi Функция с неопределенным количеством аргументов https://www.cyberforum.ru/ delphi/ thread1097387.html
Доброго времени суток! Каким образом можно в Delphi создать функцию с заранее неизвестным количеством аргументов? В качестве примера, например, чтобы возвращала сумму переданных ей аргументов. В С++, насколько я знаю, для этой цели используются указатели. Есть ли что-то подобное в Delphi? function summ (a,b,... : integer) : integer; begin result:=a+b+...; end;
4 / 4 / 3
Регистрация: 09.10.2013
Сообщений: 42
0

Свойства компонента VLC в Design- и Run-Time - Delphi - Ответ 5809992

21.02.2014, 10:37. Показов 2516. Ответов 6
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени дня.
Пишу свой простенький компонент - цветную кнопку для VCL. По задумке кнопка должна иметь три состояния - обычное, нажатое и "мышь над кнопкой". Для каждого из состояний нужно задавать цвет фона, цвет шрифта и параметры границ. Чтобы не загружать инспектор свойств лишними строками, хочу сгруппировать эти параметры в три группы (NormalButtonStyle, HoverButtonStyle и DownButtonStyle). Для этого создаю соответствующий класс (TMyButtonStyle) и добавляю указанные свойства. В Design-time всё работает отлично - изменение этих свойств меняет внешний вид кнопки, но в Run-Time кнопка создаётся с цветами, заданными в конструкторе класса TMyButton, будто бы настройки цветов через инспектор свойств и не было. Разумеется, если назначать цвета в Run-time, всё хорошо работает. Если я убираю из конструктора присвоение значений по-умолчанию, все цвета приводятся к clBlack, т.е. установки Object Inspector'а также не сохраняются.
Подскажите, что я делаю не так для группировки свойств объекта, и как это исправить?

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
unit MyButton;
 
interface
 
uses
  System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, Graphics,
  Messages, Windows;
 
type
  TMyButtonStyle = class(TPersistent)
    private
      fBackgroundColor: TColor;
      fFontColor: TColor;
      FOnChange : TNotifyEvent;
      procedure SetColor(const Value: TColor);
      procedure SetFontColor(const Value: TColor);
    public
      constructor Create;
      property OnChange: TNotifyEvent read fOnChange write fOnChange;
    published
      property BackgroundColor: TColor read fBackgroundColor write SetColor;
      property FontColor: TColor read fFontColor write SetFontColor;
  end;
 
  TMyButton = class(TButton)
  private
    { Private declarations }
    FCanvas: TCanvas;
    IsFocused: Boolean;
    IsHovered: Boolean;
    fNormalButtonStyle: TMyButtonStyle;
    fHoverButtonStyle: TMyButtonStyle;
    fDownButtonStyle: TMyButtonStyle;
    procedure UpdateColors(Sender: TObject);
  protected
    { Protected declarations }
    procedure DrawButton(Rect: TRect; State: UINT);
    procedure WndProc(var Message : TMessage); override;
    procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
    procedure CreateParams(var Params: TCreateParams); override;
    procedure SetButtonStyle(Value: Boolean); override;
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published declarations }
    property NormalButtonStyle: TMyButtonStyle read fNormalButtonStyle write fNormalButtonStyle;
    property HoverButtonStyle: TMyButtonStyle read fHoverButtonStyle write fHoverButtonStyle;
    property DownButtonStyle: TMyButtonStyle read fDownButtonStyle write fDownButtonStyle;
  end;
 
procedure Register;
 
implementation
 
procedure Register;
begin
  RegisterComponents('Samples', [TMyButton]);
end;
 
{ TMyButton }
 
procedure TMyButton.CNDrawItem(var Message: TWMDrawItem);
var
  SaveIndex: Integer;
begin
  with Message.DrawItemStruct^ do
  begin
    SaveIndex := SaveDC(hDC);
    FCanvas.Lock;
    try
      FCanvas.Handle := hDC;
      FCanvas.Font := Font;
      FCanvas.Brush := Brush;
      DrawButton(rcItem, itemState);
    finally
      FCanvas.Handle := 0;
      FCanvas.Unlock;
      RestoreDC(hDC, SaveIndex);
    end;
  end;
  Message.Result := 1;
end;
 
constructor TMyButton.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FCanvas := TCanvas.Create;
  fNormalButtonStyle := TMyButtonStyle.Create;
  fNormalButtonStyle.OnChange := UpdateColors;
  fNormalButtonStyle.BackgroundColor := clGray;
  fNormalButtonStyle.FontColor := clWhite;
  fHoverButtonStyle := TMyButtonStyle.Create;
  fHoverButtonStyle.OnChange := UpdateColors;
  fHoverButtonStyle.BackgroundColor := clSilver;
  fHoverButtonStyle.FontColor := clBlack;
  fDownButtonStyle := TMyButtonStyle.Create;
  fDownButtonStyle.OnChange := UpdateColors;
  fDownButtonStyle.BackgroundColor := clBlack;
  fDownButtonStyle.FontColor := clWhite;
end;
 
procedure TMyButton.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do Style := Style or BS_OWNERDRAW;
end;
 
destructor TMyButton.Destroy;
begin
  FCanvas.Free;
  FreeAndNil(fNormalButtonStyle);
  FreeAndNil(fHoverButtonStyle);
  FreeAndNil(fDownButtonStyle);
  inherited Destroy;
end;
 
procedure TMyButton.DrawButton(Rect: TRect; State: UINT);
var
  IsDown, IsDefault: Boolean;
  OriginalRect: TRect;
begin
  OriginalRect := Rect;
  IsDown := State and ODS_SELECTED <> 0;
  IsDefault := State and ODS_FOCUS <> 0;
  FCanvas.Brush.Style := bsClear;
  FCanvas.FillRect(Rect);
  InflateRect(Rect, -2, -2);
  if IsDown then begin
    FCanvas.Brush.Color := DownButtonStyle.BackgroundColor;
    FCanvas.Font.Color := DownButtonStyle.FontColor;
  end else begin
    if IsHovered then begin
      FCanvas.Brush.Color := HoverButtonStyle.BackgroundColor;
      FCanvas.Font.Color := HoverButtonStyle.FontColor;
    end else begin
      FCanvas.Brush.Color := NormalButtonStyle.BackgroundColor;
      FCanvas.Font.Color := NormalButtonStyle.FontColor;
    end;
  end;
  FCanvas.Brush.Style := bsSolid;
  FCanvas.FillRect(Rect);
  DrawText(FCanvas.Handle, PChar(Caption), - 1, Rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER);
  if IsFocused and IsDefault then begin
    FCanvas.Pen.Color := clWindowFrame;
    FCanvas.Brush.Style := bsClear;
    DrawFocusRect(FCanvas.Handle, OriginalRect);
  end;
end;
 
procedure TMyButton.SetButtonStyle(Value: Boolean);
begin
  if Value <> IsFocused then
  begin
    IsFocused := Value;
    Invalidate;
  end;
end;
 
procedure TMyButton.UpdateColors(Sender: TObject);
begin
  Invalidate;
end;
 
procedure TMyButton.WndProc(var Message: TMessage);
begin
  if (Message.Msg = CM_MOUSELEAVE) then begin
    IsHovered := false;
    invalidate;
  end;
  if (Message.Msg = CM_MOUSEENTER) then begin
    IsHovered := true;
    invalidate;
  end;
  inherited;
end;
 
{ TMyButtonStyle }
 
constructor TMyButtonStyle.Create;
begin
  fBackgroundColor := clBtnFace;
  fFontColor := clBtnText;
end;
 
procedure TMyButtonStyle.SetColor(const Value: TColor);
begin
  if fBackgroundColor = Value then Exit;
  fBackgroundColor:= Value;
  if Assigned(fOnChange) then fOnChange(Self);
end;
 
procedure TMyButtonStyle.SetFontColor(const Value: TColor);
begin
  if fFontColor = Value then Exit;
  fFontColor:= Value;
  if Assigned(fOnChange) then fOnChange(Self);
end;
 
end.
Добавлено через 7 часов 48 минут
Разобрался сам.
Для исправления ошибки достаточно переопределить в классе TMyButtonStyle процедуру Assign(Source: TPersistent), в которой произвести ручное присвоение свойств передаваемого объекта полям класса. После этого всё начинает замечательно работать.

Delphi
1
2
3
4
5
6
7
procedure TMyButtonStyle.Assign(Source: TPersistent);
begin
  if (Source is TMyButtonStyle) then begin
    BackgroundColor := (Source as TMyButtonStyle).BackgroundColor;
    FontColor := (Source as TMyButtonStyle).FontColor;
  end else inherited;
end;


Вернуться к обсуждению:
Свойства компонента VLC в Design- и Run-Time Delphi
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.02.2014, 10:37
Готовые ответы и решения:

Разница в координатах в run-time и design-time
Может кто-нибудь объяснить почему координаты любого объекта(например Tshape) отличаются во время...

Разница в координатах в run-time и design-time
Может кто-нибудь объяснить почему координаты любого объекта(например Tshape) отличаются во время...

Создание компонента и события в run time
pnl : TPanel; begin inherited; pnl := TPanel.Create(self); pnl.Parent :=...

Run-time error '7777' неправильное использование свойства ListIndex
Добрый день. Возникает вышеприведенная ошибка при попытке выделять строку listbox. Не могу...

6
21.02.2014, 10:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2014, 10:37
Помогаю со студенческими работами здесь

Compile-time и run-time методы и функции
Добрый день. Есть две функции, которые делают идентичную работу: template&lt;bool leftShift,...

Нет формы в design-time
Здравствуйте! Странная штука произошла с проектом. В редакторе пропала форма. То есть код видно, а...

Переключение TabControl в Design-Time
Доброго времени суток! Перетащил проект на РАД10, выпустил уже пару новых версий проги, и...

Design-Time Errors in the Windows Forms Designer
Программа с формами работает, появляется картинка в последней форме, закрываю и снова открываю окно...

Имеют ли Design-time controls в MSInterDev широкое применение?
Имеют ли Design-time controls в MSInterDev широкое применение? Или народ предпочитает вручную? -...

Изменение свойства у CheckBox в Design
Глупый вопрос. :) Есть CheckBox. &lt;CheckBox Name=&quot;TSSetMaterial&quot; Grid.Row=&quot;0&quot;...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru