Нужна помощь | BESK.SU - программирование без границ (c) 2025

Нужна помощь

Alekc2008

Premium
Premium
Credits
280
Помогите с CoolDev CoolControls v3.04h

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

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

Исходники сдесь http://slil.ru/25161409
 
Последнее редактирование модератором:

Night_Cruiser

Турист
Credits
0
Не хочу заводить новую тему.

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

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

Я работаю в Дельфи 2009.
 
Последнее редактирование модератором:

asm64d

Профи
Свой / Own
Credits
0
Код:
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);
 
Последнее редактирование модератором:

Night_Cruiser

Турист
Credits
0
P.S. Надеюсь вы в курсе что FloatToStr можно перегрузить, чтоб вместо FloatToStr(float,FormatSettings); можно было писать по старому FloatToStr(float);
Нет, не в курсе. Сейчас начну разбираться. Если не получится, надеюсь, найду здесь совет, как это сделать.
 

Night_Cruiser

Турист
Credits
0
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

Профи
Свой / Own
Credits
0
Код:
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
Свой / Own
Credits
0
Можно в программе на onCreate переопределить DecimalSeparator на нужный.

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

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

Night_Cruiser

Турист
Credits
0
Не получилось "перезагрузить"..
Принял решение, просто вводить данные через запятую. Спасибо за помощь.

Но возникла другая проблемка.
Установил 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

Профи
Свой / Own
Credits
0


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

P.S. Для увеличения картинки щелкнуть по ней.
 
Последнее редактирование модератором:

Night_Cruiser

Турист
Credits
0
Еще вопросик. :)

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

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