Перейти к содержанию
Sashar333

Требуется приложение на на все смартфоны

Рекомендуемые сообщения

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

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

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

Поделиться сообщением


Ссылка на сообщение
8 часов назад, slav_z сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
В 01.05.2020 в 10:18, Sashar333 сказал:

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

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

Поделиться сообщением


Ссылка на сообщение

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

1655311801_.png.9dbc95859667bdb6d433c00967062e3a.png

Поделиться сообщением


Ссылка на сообщение

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

115935006_.png.80a035b95235a3c52568f27a700188a7.png

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение

пока все... напишите что должен делать TSMC_Cutting... там у вас слишком много непонятного кода... подозреваю что можно раз в 20 сократить, если понять что должен делать класс... я не понял...

Поделиться сообщением


Ссылка на сообщение
В 03.05.2020 в 06:37, slav_z сказал:

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

115935006_.png.80a035b95235a3c52568f27a700188a7.png

Здравствуйте! Так не пойдет, GetInfoCut хранит массивы координат и размеров прямоугольников, и пользователь, кнопками Previous и Next, "бегает" по массиву :  

Делаю так:image.thumb.png.ed86e0aab8a9fc98970ed375cb16936f.png

и так:image.png.349d9578778dc82aa08485e0a1d2cbc2.png

но если запустить программу, нажать StartCutting, поменять значение с 1500 на 2000, нажать StartCutting, поменять с 2000 на 3000, нажать StartCutting

то вылетает ошибка:image.png.aa079a94a349f9e7f103dbbe06f22f75.png

 

GetInfoCut.SetArrayFromUser(ListDetails) - загружает(передает) массив с размерами в переменную в класс, которая вычисляется в GetInfoCut.Execute;

GetInfoCut.SetFlagsAndParametersCut(StrToInt(Edit2.Text),StrToInt(Edit3.Text),20) - устанавливаются параметры обработки(Ширина листа и длина):

image.png.000bdfdf79a7286bef6c9692fbcf45fd.png

GetInfoCut.SortList - сортировка для увеличения КПД вычислителя

GetInfoCut.Execute - запуск вычислителя

Procedure TSMC_Cutting.SetFlagsBreaksAndWillNotFit(var Detail:TDetail) - установка флагов типа boolean (Detail.WillNotFit - деталь в принципе не влезет в установленные ширину и длину, Detail.Breaks - деталь не влезет в определенный момент вычисления в "остаток", при нужде Breaks восстанавливает флаг, WillNotFit - не изменим!)

function ArrayDetailsNotFree(ArrayDetails:array of TDetail):boolean - проверка на наличие не просчитанных деталей, исключая WillNotFit

function max(y,x,y2,x2:double):double - вычисление максимального числа (КИМ - коэффициент использования материала)

function TSMC_Cutting.GetDetailCuttingResult(numList,LayoutWitdh,LayoutLength,LenghtLayoutMax:integer;var Detail:TDetail;StockAllowance:integer):TDetailCuttingResult- главное вычисление расположения детали из цикла в определенный габарит, тут лучше ничего не трогать)) два года придумывал. Тут же вычисляются координаты для рисования и сохраняются в конце в ResutlForUser.ArrayForPaint

function TSMC_Cutting.CuttingDetails(NumberSheet,LayoutWitdh,LayoutLength,LenghtLayoutMax:integer;var ArrayDetails:array of TDetail;StockAllowance:integer) - главная рекурсивная функция по деталям и вычисляемым остаткам листа, вызывает предыдущую функцию три раза, тут лучше тоже ничего не менять.

function StopFitDetails(ArrayDetails:array of TDetail):boolean - проверка на отсутствие деталей для вычисления, исключая WillNotFit

procedure SetBreaksToTrue(var ArrayDetails:array of TDetail); - обнуляем флаг на true для всех деталей, когда вычисляем НЕ из остатка а с цельного листа

Function TSMC_Cutting.Execute:TResultForUser - возвращает все нужные данные для обработки пользователем

 

Поделиться сообщением


Ссылка на сообщение
В 03.05.2020 в 06:22, slav_z сказал:

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

1655311801_.png.9dbc95859667bdb6d433c00967062e3a.png

Спасибо! Заменил!

Поделиться сообщением


Ссылка на сообщение

Еще подскажите как правильно делать?:image.thumb.png.c45ebeec640174e6cd38078c71a81dff.png

ошибка при повторном или при третьем вызове на строчке SetSize ошибку выдает что выше писал

Поделиться сообщением


Ссылка на сообщение
3 часа назад, Sashar333 сказал:

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

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

 

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

Отредактировал slav_z
не увидел

Поделиться сообщением


Ссылка на сообщение

это все для расчета как порезать лист металла на прямоугольники заданного размера и количества? так?

Поделиться сообщением


Ссылка на сообщение

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

1504395607_.png.1badab0e9e84ae95adf424c6fb3b7b02.png

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

2044738464_.png.431b2262ed9cae228201348d33ffaa95.png

Поделиться сообщением


Ссылка на сообщение
11 часов назад, slav_z сказал:

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
11 часов назад, slav_z сказал:

это все для расчета как порезать лист металла на прямоугольники заданного размера и количества? так?

Все верно! Слабое подобие для примерного просчета

Поделиться сообщением


Ссылка на сообщение
7 часов назад, slav_z сказал:

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

1504395607_.png.1badab0e9e84ae95adf424c6fb3b7b02.png

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

2044738464_.png.431b2262ed9cae228201348d33ffaa95.png

Вот за это особое СПАСИБО! Ошибка моя, экспериментировал с циклом и забыл убрать "*3". Исправил, пока больше вылетов не было!!! Ура

Поделиться сообщением


Ссылка на сообщение

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

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

Поделиться сообщением


Ссылка на сообщение
8 часов назад, Sashar333 сказал:

Все верно! Слабое подобие для примерного просчета

вы смотрели известные математические алгоритмы для этого? надо было начать с этого...

Поделиться сообщением


Ссылка на сообщение
8 часов назад, Sashar333 сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
8 часов назад, Sashar333 сказал:

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

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

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

1483695273_.png.3c8879c7c0ec21d7dec3a8e019541d62.png

Поделиться сообщением


Ссылка на сообщение
11 часов назад, slav_z сказал:

Здравствуйте! Да, изучал все это, алгоритмы не устроили кроме одного, который и реализовал(но не до конца еще). Потом, может быть, хотя и этого будет достаточно для наших клиентов, попрошу ребят из НИП Информатики помочь с более продвинутым алгоритмом...

Поделиться сообщением


Ссылка на сообщение
15 часов назад, slav_z сказал:

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

хочу...

Поделиться сообщением


Ссылка на сообщение

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Похожий контент

    • От Delpher-X
      Здравствуйте. Как указываются пути к каталогам и файлам в Android? Скажем, в Windows я указываю такой путь:  C:/Windows/Folder, а как это делается в Android? Особенно меня интересует, как обратиться к корневому каталогу, для создания там новой папки или файла, в Windows это C:/, или D:/ а тут как? 
    • От Олег Киреев
      Приложение для расчёта и подбора опор подвески силового агрегата автомобиля v.44.
       
       
       
       

       
       
       
       




       
       
       
       
       
       
      РасчётОпор v.44.rar
    • От ProgrammMan
      Всем привет. 
      Выложил приложение и жду модерацию уже больше 1 дня.
      Раньше за пару часов можно было пройти модерацию, а сейчас уже нельзя так.
      Так вот, сколько мне нужно ждать, чтобы мое приложение прошло модерацию?
    • От andahay
      Доброго времени суток. Есть android приложение, в нем есть диалоговое окно, которое предлагает перейти в google play и скачать другое приложение (pro версию), с 2 кнопками (да/нет). Как реализовать этот переход в Google play, чтобы в нем сразу было загружено нужное приложение. Использую Delphi XE7
    • От Вячеслав Холод
      При установке компонента и запуска на устройстве, приложение закрывается через секунду. Знает кто в чем может проблема быть?
      10.2 Токио
       
      ...И еще, какие аналоги есть этого компонента для винды? 
    • От Pax Beach
      Мне необходимо, когда пользователь нажимает кнопку «Закрыть», уничтожить приложение. Если указать Action = caFree, приложение остается висеть в памяти, не уничтожается, методы Destroy в приложении и сервисе не срабатывают:
      procedure TfmMain.FormClose(Sender: TObject; var Action: TCloseAction); begin DM.LocationSensor.Active := false; Action := TCloseAction.caFree; end; Если уничтожить приложение в смартфоне через «Последние приложения», тогда приложение уничтожается, сервис приложения перезапускается, и продолжает работать — это мне и надо.
      Помогите пожалуйста понять, как же правильно уничтожить приложение при закрытии основной формы?
      Подойдут решения отправки Intent, куда нужно, или вызовы нативных методов.
       
    • От gdm_it
      Здравствуйте, решил написать клиента для своего сайта, делпхи не открывал 15 лет без шуток, перешел в веб разработку,  а сейчас все возвращается на свои места как говориться
       
      так вот меня интересует теоретический набросок  использования элементов форм
       
       
      схема типичная:   слева скрытый список  MultiView1, справа рабочая область
       
      вот о рабочей области и вопрос
       
      я выбираю в меню MultiView1 СТАТЬИ(1 пункт), слева должен появиться список свежих статей, внизу панель (добавить), жмем на добавить и открывается форма добавления статьи.
       
      как это лучше реализовать?
       
      например: 
      1. накидать на каждый пункт меню панель и в них разместить свои элементы форм
      2. нагромоздить несколько форм и их подключать как то
      3. ваш вариант
       
      задача то плевая опыта пока нет 
    • От FaNtA_DDD
      Привет, я бы хотел узнать, можно ли как-то заставить приложение работать в фоне. Я знаю что это делается через сервисы, самих уроков я не видел. Я надеюсь тут есть люди, которые смогу мне помочь в этом? Не откажусь от примера.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

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