Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 41 42 43 44 45 46 47 [48] 49 50   вперед  Ctrl
 Re: Топик "как я лажанулся"  [new]
ёёёёё
Member

Откуда:
Сообщений: 1976
Один раз заказывал фурнитуру для мебели: петли, держители для полок, стопоры и т.п. Много. Например, держателей для полок - 320 шт.
Собрал все в табличке MS Excel, посчитал итоговую сумму. Потом на сайте продавца ввел данные, мне прислали счет - примерно на треть меньше, чем я посчитал. "Наверное, за оптовый заказ"
12 окт 19, 10:19    [21992673]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
ёёёёё
Member

Откуда:
Сообщений: 1976
ёёёёё,

..."Наверное, за оптовый заказ" - подумал Штирлиц.
Дождался поставки, приехал (здоровенная упаковка, не стал пересчитывать), забрал, привёз домой. Стал собирать мебель.
Не хватило. Стал проверять. Везде не хватает, по всем позициям. Достал бумагу, что распечатали в офисе и дали вместе с товаром. Твою мать! По всем позициям - 255 единиц. Вернее - "не больше 255".
На сайте, в заказах - реально проставленная величина, а у менеджеров - уже ограничения в 255.
2^8-1. Ансигнед байт.
Пришлось еще раз ехать.
Австрийский продаван, фирма "Хафеле". Так и не исправлено - то ли много у них не покупают, то ли они не поняли моего немецкого, то ли память экономят.
12 окт 19, 10:27    [21992674]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
ёёёёё
Member

Откуда:
Сообщений: 1976
Осторожнее с пропертями!


Настраиваю редактор грида из DevExpress. В частности - лукап-комбобокс, TcxLookupComboBoxProperties.
Если выпадающий список из одного столбца - то все хорошо.
$.ListFieldNames := 'sname';

Если из нескольких - ещё лучше!
.ListFieldNames := 'sname; fio';

Все плохо, когда эти несколько "набираются" в цикле:

var
  fProps := TcxLookupComboBoxProperties;
...
begin
  for поле in (список_имен_полей) do
  begin
    if fProps.ListFieldNames <> '' then
      fProps.ListFieldNames := fProps.ListFieldNames + ';';
    fProps.ListFieldNames := fProps.ListFieldNames  + поле;

Сеттер свойства ListFieldNames разбирает текст и раскладывает его во внутренний список. Конечный символ ';' он отбрасывает.
В итоге, при добавении полей
  for поле in (['f1', 'f2', 'f3']) do

- свойство ListFieldNames, вместо ожидаемого значения 'f1;f2;f3' - становится 'f1f2f3'.

И вроде бы грабли из серии "детские, учебные", а поди ж ты.
20 окт 19, 02:28    [21998153]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 60760
Блог
ёёёёё
Все плохо, когда эти несколько "набираются" в цикле:

Я бы сказал, это часть более общего полезного правила: "Не жалей локальных переменных для того, чтобы дёрнуть сеттер один раз вместо нескольких".
20 окт 19, 03:26    [21998156]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
ёёёёё
Member

Откуда:
Сообщений: 1976
softwarer
ёёёёё
Все плохо, когда эти несколько "набираются" в цикле:

Я бы сказал, это часть более общего полезного правила: "Не жалей локальных переменных для того, чтобы дёрнуть сеттер один раз вместо нескольких".


Да.
20 окт 19, 15:17    [21998313]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Василий 2
Member

Откуда:
Сообщений: 961
ёёёёё
    if fProps.ListFieldNames <> '' then
      fProps.ListFieldNames := fProps.ListFieldNames + ';';
    fProps.ListFieldNames := fProps.ListFieldNames  + поле;


      fProps.ListFieldNames := fProps.ListFieldNames + IfThen(fProps.ListFieldNames <> '', ';') + поле;

спасет ОРД.
21 окт 19, 10:34    [21998680]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3523
у Василия лучше (меньше обращений к геттерам), но можно еще так:
автор
s := s.Join(Ifthen(not s.IsEmpty, ';'), [s, поле]);

Join к сожалению не очень удобный, можно было еще бы проще сделать
21 окт 19, 15:06    [21999091]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
ёёёёё
Member

Откуда:
Сообщений: 1976
9393203|>]Съеденный ремень дяди Миши возвращается...

var 
  i : integer;
...
begin
...
for i := 0 to Pred(SomeObj.Size) do
  Foo(Struct[i])

- глючит, если SomeObj.Size выходит за границу 2^31-1


Но можно ведь теперь можно не задавать тип явно
for var i := 0 to Pred(SomeObj.Size) do
  Foo(Struct[i])

... или использовать итераторы. "Кроссплатформенность", йо.
26 окт 19, 17:44    [22003267]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 4086
ёёёёё,

Гхм, а ремень-то уже кушали?
26 окт 19, 18:13    [22003277]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
alekcvp
Member

Откуда:
Сообщений: 1849
Из свеженького :)

  TBroadcastThread = class(TThread)
    .....
    constructor Create(AServer: TServerSocket; ACapacity: Integer);
    destructor Destroy; override;
  end;

....

constructor TBroadcastThread.Create(AServer: TServerSocket; ACapacity: Integer); 
[dcc32 Error] E2037 Declaration of 'Create' differs from previous declaration
begin
  ...
end;
+ Ваши варианты? :)
Между объявлением и реализацией был хак (чтобы добраться до свойства Address): TServerSocket = class(System.Win.ScktComp.TServerSocket);
11 ноя 19, 16:46    [22013732]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
alekcvp
Ваши варианты? :)
Очевидно же, что в секции implementation добавлен еще один модуль, который содержит объявление TServerSocket
11 ноя 19, 18:03    [22013833]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
ёёёёё
Member

Откуда:
Сообщений: 1976
Использовал метод
TStringList.Find(const S: string; var Index: Integer): Boolean; virtual;

на неотсортированном списке.
20 ноя 19, 15:32    [22020830]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31041

20.11.2019 15:32, ёёёёё пишет:
> Использовал метод
> TStringList.Find(const S: string; var Index: Integer): Boolean; virtual;
> на неотсортированном списке.

а на отсортированном он и не нужен.

Posted via ActualForum NNTP Server 1.5

20 ноя 19, 15:34    [22020838]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Мимопроходящий
а на отсортированном он и не нужен.
Нужен. Если мы вначале ищем, а потом хотим вставить
20 ноя 19, 17:30    [22021040]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 31041

20.11.2019 17:30, _Vasilisk_ пишет:
>
> Нужен. Если мы вначале ищем, а потом хотим вставить

зачем такие сложности?

Posted via ActualForum NNTP Server 1.5

20 ноя 19, 17:33    [22021045]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Написал хелпер для TMethod

function TMethodHelper.ToString: string;
begin
  Result := Format('D: %p (%s), C: %p', [
    Data, 
    IfThen(Data <> nil, TObject(Data).ClassName, 'nil')
    Code
  ]);
end;
Получил AV
26 ноя 19, 15:57    [22025784]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 4086
_Vasilisk_,

Даёшь тернарный оператор!
26 ноя 19, 16:26    [22025809]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Квейд
Member

Откуда: Kyiv, Ukraine
Сообщений: 5352
_Vasilisk_
Написал хелпер для TMethod

function TMethodHelper.ToString: string;
begin
  Result := Format('D: %p (%s), C: %p', [
    Data, 
 IfThen(Data <> nil, TObject(Data).ClassName, 'nil')
    Code
  ]);
end;
Получил AV
26 ноя 19, 16:49    [22025841]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
Kazantsev Alexey
Даёшь тернарный оператор!
Конечно предлагаемый синтаксис это треш. Собственно мне убивать хочется за синтаксис делфевых лямбд

А тем временем в Java выкатилили switch expression
26 ноя 19, 17:33    [22025902]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 4086
_Vasilisk_
Конечно предлагаемый синтаксис это треш.

Нормальный синтаксис, на самом деле.

_Vasilisk_
А тем временем в Java выкатилили switch expression

Стопудово из котлина дёрнули :)
26 ноя 19, 18:04    [22025958]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
alekcvp
Member

Откуда:
Сообщений: 1849
_Vasilisk_
Написал хелпер для TMethod

function TMethodHelper.ToString: string;
begin
  Result := Format('D: %p (%s), C: %p', [
    Data, 
    IfThen(Data <> nil, TObject(Data).ClassName, 'nil')
    Code
  ]);
end;
Получил AV


IfThen в дельфях вообще какая-то очень узкоприменимая (читай бесполезная) штука, ИМХО.
26 ноя 19, 18:53    [22026001]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 11498
alekcvp
IfThen в дельфях вообще какая-то очень узкоприменимая (читай бесполезная) штука,
Никогда ею не пользовался, а тут для отладки нужно было быстро сформировать строку
26 ноя 19, 19:04    [22026011]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Василий 2
Member

Откуда:
Сообщений: 961
Не знаю, у меня часто применяется. Только, конечно, надо помнить о том, что все параметры должны существовать
26 ноя 19, 19:10    [22026018]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
Michael Longneck
Member

Откуда: Москва
Сообщений: 2306
class function TRtl.IfThen<T>(ACondition: Boolean; const ATrue, AFalse: T): T;
begin
  if ACondition then
    Result := ATrue
  else
    Result := AFalse;
end;
26 ноя 19, 19:34    [22026040]     Ответить | Цитировать Сообщить модератору
 Re: Топик "как я лажанулся"  [new]
rgreat
Member

Откуда:
Сообщений: 5631
Michael Longneck,

TRtl.IfThen<boolean>(False, FormatDriveC, DoNothing);

Угадай что будет c диском c: ;)
26 ноя 19, 20:02    [22026066]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 41 42 43 44 45 46 47 [48] 49 50   вперед  Ctrl
Все форумы / Delphi Ответить