Наши преимущества

Нужна помощь

Не хочу заводить новую тему.

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

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

Я работаю в Дельфи 2009.
 
Последнее редактирование модератором:
Код:
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);
 
Последнее редактирование модератором:
P.S. Надеюсь вы в курсе что FloatToStr можно перегрузить, чтоб вместо FloatToStr(float,FormatSettings); можно было писать по старому FloatToStr(float);

Нет, не в курсе. Сейчас начну разбираться. Если не получится, надеюсь, найду здесь совет, как это сделать.
 
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:" превеликое множество.

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

В этом ли загвоздка?
 
Код:
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;
 
Можно в программе на onCreate переопределить DecimalSeparator на нужный.

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

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

Но возникла другая проблемка.
Установил 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" и т.п. И, чтобы избежать появления ошибок, их приходится удалять из кода программы вручную..


Что делать?

Или только удалять установленные компоненты?
 
Еще вопросик. :)

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

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