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

slav_z

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

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

  • Посещение

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

    33

Весь контент slav_z

  1. да... пробуйте запускать обработку и сразу закрывать главное окно... раз 100... если все будет без ошибок, то хорошо...
  2. хорошо! тогда обнуляйте ExceptionMessage вместе с break; т.к. на одной из предыдущих итерации сервер может вернуть не 200 (черт его знает)... и вообще проверка <>'Такой но...' должна выполняться только если сервер вернул 200.... кроме того надо выходить из цикла если пользователь закрывает программу во время вашей обработки (Thread.CheckTerminated кажется)... иначе, пока ваш цикл полностью не отработает, программа не закроется...
  3. тут у вас две ошибки... посмотрите внимательно на код... одна такая ошибка у вас уже была (очистка stream перед КАЖДЫМ запросом)... и как у вас будет здесь происходить обработка результата? в OnThreadTerminate вы попадете только после завершения цикла... если вам нужно передавать результат в форму на каждой итерации цикла то это так не будет...
  4. вопрос к дизайнеру... из программиста дизайнер как из ... пуля... дизайн приложения должен разрабатывать профессионал...
  5. не передавайте в эту процедуру TImage (TControl) передавайте TBitmap.. если передаете динамические массивы или записи в качестве параметров в процедуру пишите const.... но в общем рисование так не делается... создавать отдельный юнит для одной процедуры не стоит... другое дело если в нем будут все процедуры для рисования, но ваша процедура специфична и вряд ли будет вызываться из другого места в программе...
  6. хвалить вас еще рано... когда смотрите на свой код, ОН ВАМ ДОЛЖЕН НРАВИТЬСЯ... вы должны испытывать эстетическое удовольствие... придерживайтесь стандартного форматирования - возможно ваш код завтра будет писать другой человек-программист... (я сам не везде придерживаюсь... но советы же давать легко... "после меня хоть потоп" - тоже сказано не зря... другое дело когда проект open source - за свой код не должно быть стыдно...) хороший код - красивый код... если хотите, напишу про распределение по юнитам и переменным...
  7. вы смотрели известные математические алгоритмы для этого? надо было начать с этого...
  8. вот здесь у вас ошибка... вы пишите за пределы массива ArrayDetails... его размер = 2 (Length(ArrayDetails)=2)... следующая строка после цикла for на второй итерации обращается к 4-му элементу массива, которого нет... запись происходит в область памяти занятой другим объектом (возможно TCanvas вашего TImage.Bitmap)... такие ошибки сложно найти и последствия от них непредсказуемы... поэтому, если делаете такие ошибки включите галочку в опциях проекта Range checking = true, тогда будете сразу получать ошибку ERangeError при обращении к элементам массива за его пределами...
  9. это все для расчета как порезать лист металла на прямоугольники заданного размера и количества? так?
  10. как ошибка выглядит? BitmapSizeWitdh и BitmapSizeLength чему равны в этом случае ? ( у вас очепятка в слове Witdh...) а. вижу... Image.Bitmap скорее всего = nil
  11. пока все... напишите что должен делать TSMC_Cutting... там у вас слишком много непонятного кода... подозреваю что можно раз в 20 сократить, если понять что должен делать класс... я не понял...
  12. добавьте эту строку в исходник проекта... будете получать сообщения при выходе из программы если будут утечки памяти (под windows)... с ними надо сразу разбираться... нажмите на вашу кнопку два раза и получите сообщение об утечке памяти при выходе...
  13. - объект GetInfoCut создается у вас при каждом нажатии на кнопку... разрушаете вы его в FormDestroy() - только последний экземпляр объекта... - объект GetInfoCut используется только в этом методе, больше нигде... поэтому объявлять его в классе нет необходимости... прям здесь создайте и здесь же разрушьте (уберите его объявление в классе и вызов GetInfoCut.Free в FormDestroy() )...
  14. начнем с самого простого... с сортировки массива... вверху ваш код, внизу - как бы сделал я... вас спасает только то, что ваш массив содержит всего 2 элемента... ваша сортировка называется "метод пузырька" и не самая удачная реализация...
  15. все же ошибки есть? хорошо... найду сегодня время... напишите в двух словах что делает (должен делать) TSMC_Cutting ?
  16. не хотелось бы сильно вникать в вашу задачу, если работает, то очень хорошо... правильно/не правильно - это непростой вопрос... просто посмотреть код и принять верное архитектурное решение невозможно... надо полностью разобраться в вашей задаче.... но времени сейчас просто нет на это...
  17. массив и передавайте... использовать поток нужно если вычисления займут значительное время (будет влиять на работу UI... т.е будет заметно что приложение подвисает... можете кинуть анимацию на форму... сразу поймете...) если вычисления будут быстрыми, то не делайте поток... не используйте потоки если это ничего не даст (к примеру время обработки данных - 1 мс.)... если поток все же потребуется, то просто используйте ваш массив в потоке... само собой если массив будет меняться, то нельзя с ним работать в основном (других) потоках до окончания обработки...
  18. сделайте то же самое и при получении прайса.... а вот это можно вынести в отдельный метод... типа CreateRequestContent(NumberOrder,dateOrder,....)
  19. не используйте глобальные переменные без крайней необходимости... здесь точно не надо... засуньте в класс... что вам жалко что ли?
  20. Добавьте это (надо очистить поток от предыдущего результата.. похоже на ошибку в THTTPClient)
  21. вашему "вычислителю" должно быть все равно: -откуда и как были получены исходные данные (скачаны по http, получены по почте, загружены из файла и т.п.) -каков формат исходных данных (xls, json и т.д) -как будет использован результат вычисления (показан пользователю в UI (на форме), отправлен как ответ http, записан в файл) его работа - что-то посчитать и отдать результат... советы: разбивайте программу на логические модули, минимизируйте зависимости между ними (представьте что у вас несколько разработчиков которые говнокодят каждый свою задачу в проекте, и сильносвязанный код этого просто не позволит вам сделать), не используйте русские буквы в тексте программы (даже для комментариев... я как то смотрел исходники какого то японца - там все было на иероглифах - мне его комментарии не помогли), и про транскрипцию тоже забудьте (русские слова английскими буквами)... почитайте про декларативное программирование, когда реализуете какой-то общий алгоритм уберите подальше все детали реализации (условия, циклы, работа с массивами)... что делает ваша функция function DetIn() ? - по названию должно быть понятно.. не используйте сокращения в названиях переменных... type TVSE=record - ну что это такое? ОТДЕЛИТЕ логику программы от пользовательского интерфейса (не пишите логику программы в модуле формы - это беда программистов delphi) - вы должны иметь возможность легко заменить одну форму другой - это всего лишь объект для общения с пользователем... очень тяжелый совет: попробуйте написать ваше приложение как консольное... а потом добавить в него GUI... когда пишите программу всегда думайте как ее переписать лучше... не придумывайте окончательную архитектуру программы до получения первой работающей версии... только когда решите все проблемы сможете увидеть картину в целом... ....я могу дать еще 1000 советов.... но сейчас вам от них станет только хуже...
  22. fg если б все было так просто... я приложил проект - загрузка вашего списка... работает под windows и android... под ios тоже будет (должно... возиться с маком и айфоном чета лень) gek.zip
  23. наоборот... с первого взгляда выглядит все как то уж слишком просто и скучно... с первого взгляда...
  24. OnTap лучше не используйте, я бы сделал на обычный OnClick... перед вызовом действий, связанных с элементами списка (ваши ShowMessage 1, ShowMessage 2 ), просто проверьте "а не прокручивается ли сейчас listbox (scrollbox)" с помощью ListBox.AniCalculations.Moved...
×
×
  • Создать...