Нужна помощь

Alekc2008

Premium
Joined
May 30, 2007
Messages
14
Reaction score
12
Age
40
Location
Беларусь
Помогите с CoolDev CoolControls v3.04h

Нужно исправить этот компонент, чтобы от работал в BDS 2006.

Заранее благодарен.

Исходники сдесь http://slil.ru/25161409
 
Last edited by a moderator:

Night_Cruiser

Member
Joined
Dec 6, 2005
Messages
135
Reaction score
15
Не хочу заводить новую тему.

Такая ситуация:
Модернизирую одну программу, написанную на Дельфи. С готовой программой можно работать (вводить и получать данные) только, если установлено, чтобы нецелые значения вводились через ТОЧКУ (т.е. "3.27", "5.64"). Но если в самой операционной системе указано, что "основной" является запятая (т.е. ""3,27", "5,64""), то программа выдает ошибку и нету возможности работать с ней дальше.

Пожалуйста, подскажите, что мне нужно изменить (или добавить) в коде программы, чтобы работать с запятой? Т.е. с тем символом, который "прописан" в Виндовс.

Я работаю в Дельфи 2009.
 
Last edited by a moderator:

asm64d

Member
Joined
Jun 14, 2008
Messages
943
Reaction score
9,629
Code:
var
  FormatSettings:TFormatSettings;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text:=FloatToStr(152.201,FormatSettings);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetLocaleFormatSettings (GetThreadLocale, FormatSettings);
  // FormatSettings.DecimalSeparator := '.'; 
  // можно вручную установить разделитель, 
  // если не трогать этот параметр, то используется 
  // разделитель по умолчанию (который в системе установлен)
  // (т.е. в вашем случае запятая)
end;


P.S. Надеюсь вы в курсе что FloatToStr можно перегрузить, чтоб вместо FloatToStr(float,FormatSettings); можно было писать по старому FloatToStr(float);
 
Last edited by a moderator:

Night_Cruiser

Member
Joined
Dec 6, 2005
Messages
135
Reaction score
15
P.S. Надеюсь вы в курсе что FloatToStr можно перегрузить, чтоб вместо FloatToStr(float,FormatSettings); можно было писать по старому FloatToStr(float);

Нет, не в курсе. Сейчас начну разбираться. Если не получится, надеюсь, найду здесь совет, как это сделать.
 

Night_Cruiser

Member
Joined
Dec 6, 2005
Messages
135
Reaction score
15
asm64d,

Программа достаточно большая (около 30к строк кода)..
Что я сделал: Ввел переменную: "FormatSettings:TFormatSettings;"
Вписал в процедуру создания главное формы " GetLocaleFormatSettings (GetThreadLocale, FormatSettings);".

Но все тоже самое, т.е.:
при компиляции пишет следующее:
C:\directory\example.pas(2394,9): warning W1019: For loop control variable must be simple local variable

(и так несколько десятков строк).

Все же запускает программу, сразу же выдавая ошибку: '0.3' is not a valid floating point value.

Где "0.3", как раз первая цифра с точкой, которая заведомо введена в окно программы (эдакие стартовые данные).


Я так понимаю, что я должен ввести в каждые текстовые поля процедур "Button1Click(Sender: TObject);" код "Edit1.Text:=FloatToStr(152.201,FormatSettings);"?

НО! Этих полей "EditХХ.Text:" превеликое множество.

Не сможете ли вы разъяснить, как работает упомянутая вами "перезагрузка"? (Ведь думаю, что именно она мне и нужна"..

В этом ли загвоздка?
 

asm64d

Member
Joined
Jun 14, 2008
Messages
943
Reaction score
9,629
Code:
var
  FormatSettings:TFormatSettings;

//--------------------------------------------------
// перегружаем, функция с тем же именем
function FloatToStr(Value: Extended): string;
begin
result:=SysUtils.FloatToStr(Value,FormatSettings);
end;
//--------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text:=FloatToStr(152.201); 
// Теперь будет вызвана наша функция
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetLocaleFormatSettings (GetThreadLocale, FormatSettings);
end;
 

Ognev

ex-Team DUMPz
Joined
Aug 20, 2018
Messages
2,104
Reaction score
902
Age
25
Можно в программе на onCreate переопределить DecimalSeparator на нужный.

Можно еще повесить на onKeyPress того Edit-а, куда вбиваются данные, обработку точки и запятой - переопределяя Key на нужное значение.

Честно сказать - не знаю какие из способов, озвученные здесь, более правильные с точки зрения программирования.
 
Last edited by a moderator:

Night_Cruiser

Member
Joined
Dec 6, 2005
Messages
135
Reaction score
15
Не получилось "перезагрузить"..
Принял решение, просто вводить данные через запятую. Спасибо за помощь.

Но возникла другая проблемка.
Установил TMS Component pack v5.0.4.0 Mar 21, 2009. Установил нормально, следуя интсрукции.
Далее, при открытии демо файлов (с примерами) или при создании своего примера с использованием установленных компонентов, возникает ошибка:

[DCC Fatal Error] Unit1.pas(7): F1026 File not found: 'AdvMenus.dcu'
[DCC Fatal Error] Unit1.pas(7): F1026 File not found: 'AdvGlassButton.dcu'


Какой-бы компонент я не использовал, появляются надписи, аналогичные выше.

Надписи стали появляться, даже когда я использую обычные "стандартные" меню.
Т.е., они прописываются в начале кода программы "AdvMenus", "AdvGlassButton" и т.п. И, чтобы избежать появления ошибок, их приходится удалять из кода программы вручную..


Что делать?

Или только удалять установленные компоненты?
 

asm64d

Member
Joined
Jun 14, 2008
Messages
943
Reaction score
9,629


Это на примере D7, в D2007 и D2009 по аналогии.

P.S. Для увеличения картинки щелкнуть по ней.
 
Last edited by a moderator:

Night_Cruiser

Member
Joined
Dec 6, 2005
Messages
135
Reaction score
15
Еще вопросик. :)

Нужно решить следующую задачу (в Delphy): построить конструкцию по принципу лото (в 2d), т.е., банально - круг, контур которого размыкается снизу, образуя "проход" для шариков, которые, попадая в него, выкатываются и заполняют позиции.
Круг вращается, с центром посередине и имеет выступы (полный аналог лото!).
Т.е., учавствуют в такого роде движения 3 тела: круг, примыкающий к нему "проход" и группа шариков.

Прошу дать совет - какие компоненты использовать при создании данной конструкции, чтобы заставить ее работать? Формулы движения (вся кинематика) есть. Интересует конкретно графическая часть, т.е., чем задать для шариков граничащие условия (стенки круга, стенки прохода, позиции)..
 
Top