![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как убрать нули из DBEdit
Александр_2012 © (2012-10-18 10:30:00)Доброго дня. Есть программа, содержащая порядка 100 DBEdit, большинство которых привязаны к полям типа Integer, со значением по умолчанию 0 . Всё работает, но раздражает вывод ненужных нулей. Знаю, что можно у TField в событии OnGetText настроить любой формат вывода, но проблема в том, что не хотелось бы загружать жестко все поля БД в OraQuery и на каждое поле писать обработчик OnGetText. Можно ли написать процедуру общую для всех компонентов (работающую, например через Sender), которая обеспечила бы выполнение требуемого, к какому компоненту и событию её привязать?
Ega23 (2012-10-24 07:38:00) [1]
> Что плохого в Архангельском?
> Кстати, я один раз пользовал его функцию (к его книге шел диск с примерами),
> функция у меня не стабильно работала, выложил ее тут на ваше обсуждение,
> и ее назвали говнокодом...
Теперь понимаешь, что плохого в Архангельском?
Eeuwige Rouw (2012-10-24 04:16:00) [2]
> Советую Вам почитать хоть одну хорошую (не Архангельского)
> книжку по ОПП.
Что плохого в Архангельском?
Кстати, я один раз пользовал его функцию (к его книге шел диск с примерами),
функция у меня не стабильно работала, выложил ее тут на ваше обсуждение,
и ее назвали говнокодом...
Вот и пойми, кто пишет правильно а кто нет...
Краснов (ОпенГл)... вот это было задушевное чтение...
Ega23 (2012-10-23 16:56:00) [3]
> Пытался делать проверку на тип поля, но не получилось, наверное
> делал неправильно.
if Fields[i].FieldType = ftInteger then
Александр_2012 (2012-10-23 15:08:00) [4]
> а убирать нужно для каких? может нужна процедура AllIntegerGetText
> ? а не все подряд.
Конечно для integer. Пытался делать проверку на тип поля, но не получилось, наверное делал неправильно.
sniknik (2012-10-22 22:40:00) [5]> Большинство полей integer, есть string и datetime
а убирать нужно для каких? может нужна процедура AllIntegerGetText ? а не все подряд.
sniknik (2012-10-22 21:51:00) [6]нужен All SetText с обратной операцией
Александр_2012 (2012-10-22 20:17:00) [7]Большинство полей integer, есть string и datetime
Inovet (2012-10-22 17:36:00) [8]> [24] Александр_2012 (22.10.12 14:15)
> for i:=0 to DataQ.FieldCount-1 do
> DataQ.Fields[i].OnGetText:=AllGetText;
Все поля одного типа?
Медвежонок Пятачок (2012-10-22 15:41:00) [9]а все равно не поможет.
MsGuns (2012-10-22 14:57:00) [10]if not Sender.IsNull then
<Ваш код>
Ну и Format() вместо AsString
И опять же надо бы проверять тип полей и делать конвертацию только для чисел
И последнее: для "тонкого" отображения полей (даты, дроби..) в нужном формате используется свойство TxxxField.DisplayFormat
Медвежонок Пятачок (2012-10-22 14:20:00) [11]В приведенной строке нет конвертации к дабл.
Александр_2012 (2012-10-22 14:15:00) [12]Хорошо, попытался воспользоваться Вашими советами.
1. Создал процедуру
procedure TDM.AllGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
if DisplayText then
begin
if Sender.AsString='0' then
Text:=''
else
begin
Text:=Sender.AsString;
end;
end;
end;
Решил, что можно к ней обратиться после открытия набора данных
procedure TDM.DataQAfterOpen(DataSet: TDataSet);
var
i: integer;
begin
for i:=0 to DataQ.FieldCount-1 do
DataQ.Fields[i].OnGetText:=AllGetText;
end;
Компилирую... Ура нет нулей, но достаточно встать на какое-нибудь поле или на DBNavigator нажать Next, как тут же получаю:
Could not convert variant of type (String) into type (Double)
Если я правильно понял,то ошибку вызывает строка
Text:=Sender.AsString;
по крайней мере, если её закоментировать, то ошибка исчезает, правда все поля получаю пустыми.
Как это обойти?
MsGuns (2012-10-22 12:45:00) [13]А Вам как начинающему и советуют. Поймите, сложно объяснить новичку защиту Каро-Кан если он, новичок, не знает как ходят шахматные фигуры.
Ega23 (2012-10-22 12:02:00) [14]
> У меня очень большие сомнения, что все начинающие прекрасно
> разбираются что такое Sender
http://slovari.yandex.ru/sender/en-ru/#lingvo/
Александр_2012 (2012-10-22 11:44:00) [15]Спасибо, уважаемые господа. Если вы обратили внимание, то я обратился на форум для начинающих. У меня очень большие сомнения, что все начинающие прекрасно разбираются что такое Sender, и как найти те или иные свойства полей БД, если их предварительно не загрузить в редактор полей.
MsGuns (2012-10-22 11:23:00) [16]>Александр_2012
Советую Вам почитать хоть одну хорошую (не Архангельского) книжку по ОПП.
Jeer (2012-10-19 16:20:00) [17]
> Кто не хочет - я не виноват. :)
Ну да - "Кито хотел секса и не подстраховался, тот мимо <дамок>" (C)
Ega23 (2012-10-18 20:13:00) [18]
>
> Шо ж ты творишь ?
А у меня нет TDBEdit. Точнее, есть, но мне было в лом искать :)
Да и ваще, пусть думает. Кто хочет разобраться, тому данного примера будет достаточно. Кто не хочет - я не виноват. :)
Jeer (2012-10-18 18:27:00) [19]
> Ega23 © (18.10.12 17:15) [15]
Шо ж ты творишь ?
Сейчас это чудо начнет всовывать твой код в Delphi и искать где ж там Field-ы и почему у них кнопок нет.
Inovet (2012-10-18 17:40:00) [20]> [15] Ega23 © (18.10.12 17:15)
> Кнопок, как ты понимаешь, можно накидать хоть 100500, для
> всех OnClick будет одинаков.
Щас он начнот циклы копипастить. Наверное стрелочку рядом с выбором обработчика события не видит.