Перейти к содержанию
Fire Monkey от А до Я

slav_z

Пользователи
  • Постов

    233
  • Зарегистрирован

  • Посещение

  • Победитель дней

    33

Сообщения, опубликованные slav_z

  1. 3 часа назад, Sashar333 сказал:

    Теперь вроде все работает как надо!

    хорошо! тогда обнуляйте ExceptionMessage вместе с break; т.к. на одной из предыдущих итерации сервер может вернуть не 200 (черт его знает)... и вообще проверка <>'Такой но...' должна выполняться только если сервер вернул 200.... кроме того надо выходить из цикла если пользователь закрывает программу во время вашей обработки (Thread.CheckTerminated кажется)...  иначе, пока ваш цикл полностью не отработает, программа не закроется...

  2. image.png.9d295fa5c380386e5c69e984825e0d40.png

    тут у вас две ошибки...

    посмотрите внимательно на код... одна такая ошибка у вас уже была (очистка stream перед КАЖДЫМ запросом)... 

    и как у вас будет здесь происходить обработка результата? в OnThreadTerminate вы попадете только после завершения цикла... если вам нужно передавать результат в форму на каждой итерации цикла то это так не будет...

  3. В 06.05.2020 в 10:37, Sashar333 сказал:

    Вы можете еще подсказать, как лучше сделать заполнение пользователем размеров прямоугольников и кол-в. Я так понял что лучше ListView использовать, но как его настроить и добавить строчку с тремя Edit'ми и кнопкой "удалить строчку, не могу понять?

    вопрос к дизайнеру... из программиста дизайнер как из ... пуля... дизайн приложения должен разрабатывать профессионал...

  4. 8 часов назад, Sashar333 сказал:

    Спасибо! Опечатку исправил, с переменными все нормально происходит, Image.Bitmap рисует

    не передавайте в эту процедуру TImage (TControl) передавайте TBitmap..  если передаете динамические массивы или записи в качестве параметров в процедуру пишите const....

    но в общем рисование так не делается...  создавать отдельный юнит для одной процедуры не стоит... другое дело если в нем будут все процедуры для рисования, но ваша процедура специфична и вряд ли будет вызываться из другого места в программе...

    1483695273_.png.3c8879c7c0ec21d7dec3a8e019541d62.png

  5. 8 часов назад, Sashar333 сказал:

    Скажите, теперь само написание кода нормальное я в правильном направлении иду, распределение кода по unit'ам и оформление классов и переменных в общем?

    Там осталось калькулятор металла сделать, отправку по почте сделать, и контактную информацию, но самое сложное именно вычисление и рисование...

    хвалить вас еще рано... когда смотрите на свой код, ОН ВАМ ДОЛЖЕН НРАВИТЬСЯ... вы должны испытывать эстетическое  удовольствие... придерживайтесь стандартного форматирования - возможно ваш код завтра будет писать другой человек-программист... (я сам не везде придерживаюсь...   но советы же давать легко... "после меня хоть потоп" - тоже сказано не зря...  другое дело когда проект open source - за свой код не должно быть стыдно...) хороший код - красивый код... если хотите, напишу про распределение по юнитам и переменным...

  6. вот здесь у вас ошибка... вы пишите за пределы массива ArrayDetails... его размер = 2 (Length(ArrayDetails)=2)...  следующая строка после цикла for на второй итерации  обращается к 4-му элементу массива, которого нет... запись происходит в область памяти занятой другим объектом (возможно TCanvas вашего TImage.Bitmap)...

    1504395607_.png.1badab0e9e84ae95adf424c6fb3b7b02.png

    такие ошибки сложно найти и последствия от них непредсказуемы... поэтому, если делаете такие ошибки включите галочку в опциях проекта Range checking = true, тогда будете сразу получать ошибку ERangeError при обращении к элементам массива за его пределами...

    2044738464_.png.431b2262ed9cae228201348d33ffaa95.png

  7. 3 часа назад, Sashar333 сказал:

    точнее при смене значения в переменной BitmapSizeWitdh

    как ошибка выглядит?  BitmapSizeWitdh и BitmapSizeLength чему равны в этом случае ? ( у вас очепятка в слове Witdh...)

     

    а. вижу...  Image.Bitmap скорее всего = nil

  8. добавьте эту строку в исходник проекта... будете получать сообщения при выходе из программы если будут утечки памяти (под windows)...
    с ними надо сразу разбираться... нажмите на вашу кнопку два раза и получите сообщение об утечке памяти при выходе...

    1356729547_.png.ecc9cc6327859a96bb35c5d4fec7f57b.png1423598940_.png.614e2845a428764aaba2e4eb27337742.png

  9. - объект GetInfoCut создается у вас при каждом нажатии на кнопку...  разрушаете вы его в FormDestroy() - только последний экземпляр объекта...
    - объект GetInfoCut используется только в этом методе, больше нигде... поэтому объявлять его в классе нет необходимости...  прям здесь создайте и здесь же разрушьте (уберите его объявление в классе и вызов GetInfoCut.Free в FormDestroy() )...

    115935006_.png.80a035b95235a3c52568f27a700188a7.png

  10. начнем с самого простого... с  сортировки массива... вверху ваш код, внизу - как бы сделал я...  вас спасает только то, что ваш массив содержит всего 2 элемента... ваша сортировка называется "метод пузырька" и не самая удачная реализация...

    1655311801_.png.9dbc95859667bdb6d433c00967062e3a.png

  11. В 01.05.2020 в 10:18, Sashar333 сказал:

    Не надо вникать во все)) проверьте, пожалуйста, правильно работы одного класса TSMC_Cutting, все равно иногда то зависает то вылетает, буду очень признателен...

    все же ошибки есть? хорошо... найду сегодня время...  напишите в двух словах что делает (должен делать) TSMC_Cutting ?

  12. 8 часов назад, Sashar333 сказал:

    Вот, вроде все получилось, посмотрите пожалуйста, правильно я мысль Вашу понял?

    не хотелось бы сильно вникать в вашу задачу, если работает, то очень хорошо... правильно/не правильно - это непростой вопрос... просто посмотреть код и принять верное архитектурное решение невозможно...  надо полностью разобраться в вашей задаче.... но времени сейчас просто нет на это...

  13. 8 часов назад, Sashar333 сказал:

    Здравствуйте!

    А как лучше сделать передачу данных от пользователя(ГабаритY, ГабаритX, Кол-во) в вычислитель?

    Вычислитель обрабатывает отсортированный(сортирует по убыванию и ставит в флаги в массиве) массив, при этом он меняет в нем Кол-во, и флаги(что бы понимать когда остановиться)... и создает массив координат(для Bitmap)

    Сделать поток который будет преобразовывать полученные данные(в каком виде лучше?) в массив, а потом поток для сортировки, а потом поток для координат?

    Или передать уже готовый массив в поток, это вообще возможно?

     

    массив и передавайте...  использовать поток нужно если вычисления займут значительное время (будет влиять на работу UI... т.е будет заметно что приложение подвисает... можете кинуть анимацию на форму... сразу поймете...) если вычисления будут быстрыми, то не делайте поток... не используйте потоки если это ничего не даст (к примеру время обработки данных - 1 мс.)... если поток все же потребуется, то просто используйте ваш массив в потоке...  само собой если массив будет меняться, то нельзя с ним работать в основном (других) потоках до окончания обработки...

  14. 8 часов назад, Sashar333 сказал:

    Сделал по Вашему примеру проверку статуса, но почему то работает через раз. Допустим, по умолчанию стоит номер 11249, нажимаем Search, все выводит. Как меняем на 11250 то ошибку выдает. А если изначально поставить 11250 то работает нормально, можете проверить пожалуйста... 

    Добавьте это (надо очистить поток от предыдущего результата.. похоже на ошибку в THTTPClient)

    806202919_.png.4ef8cef94391ffe52d2579baed4274fb.png

  15. 4 часа назад, Sashar333 сказал:

    а для чего много pas файлов, почему все в одном не сделать, удобство или что ?

    вашему "вычислителю" должно быть все равно:

    -откуда и как были получены исходные данные (скачаны по http, получены по почте, загружены из файла и т.п.)

    -каков формат исходных данных (xls, json и т.д)

    -как будет использован результат вычисления (показан пользователю в UI (на форме), отправлен как ответ http, записан в файл)

    его работа - что-то посчитать и отдать результат...

    советы: разбивайте программу на логические модули, минимизируйте зависимости между ними (представьте что у вас несколько разработчиков которые говнокодят каждый свою задачу в проекте, и сильносвязанный код этого просто не позволит вам сделать), не используйте русские буквы в тексте программы (даже для комментариев...  я как то смотрел исходники какого то японца - там все было на иероглифах - мне его комментарии не помогли), и про транскрипцию тоже забудьте (русские слова английскими буквами)... почитайте про декларативное программирование, когда реализуете какой-то общий алгоритм уберите подальше все детали реализации (условия, циклы, работа с массивами)... что делает ваша функция function DetIn() ? - по названию должно быть понятно..  не используйте сокращения в названиях переменных...   type TVSE=record - ну что это такое?

    ОТДЕЛИТЕ логику программы от пользовательского интерфейса (не пишите логику программы в модуле формы - это беда программистов delphi) - вы должны иметь возможность легко заменить одну форму другой - это всего лишь объект для общения с пользователем... очень тяжелый совет: попробуйте написать ваше приложение как консольное...  а потом добавить в него GUI...

    когда пишите программу всегда думайте как ее переписать лучше... не придумывайте окончательную архитектуру программы до получения первой работающей версии... только когда решите все проблемы сможете увидеть картину в целом... 

    ....я могу дать еще 1000 советов.... но сейчас вам от них станет только хуже...

  16. fg

    3 часа назад, Sashar333 сказал:

    Может быть кто подскажет где и кто может обучить грамотному программированию? 

    если б все было так просто...

    я приложил проект - загрузка вашего списка... работает под windows и android... под ios тоже будет (должно... возиться с маком и айфоном чета лень)

    gek.zip

  17. 5 часов назад, Sashar333 сказал:

    Почему никто не хочет заняться данной задачей, это очень сложно!?

     

    Project1.apkвот что я примерно хочу видеть

    наоборот... с первого взгляда выглядит все как то уж слишком просто и скучно... с первого взгляда...

  18. OnTap лучше не используйте, я бы сделал на обычный OnClick... перед вызовом действий, связанных с элементами списка (ваши ShowMessage 1,  ShowMessage 2 ), просто проверьте "а не прокручивается ли сейчас listbox (scrollbox)" с помощью ListBox.AniCalculations.Moved...

×
×
  • Создать...