Sashar333
-
Постов
108 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Sashar333
-
-
-
-
-
В 03.05.2020 в 06:37, slav_z сказал:
- объект GetInfoCut создается у вас при каждом нажатии на кнопку... разрушаете вы его в FormDestroy() - только последний экземпляр объекта...
- объект GetInfoCut используется только в этом методе, больше нигде... поэтому объявлять его в классе нет необходимости... прям здесь создайте и здесь же разрушьте (уберите его объявление в классе и вызов GetInfoCut.Free в FormDestroy() )...Здравствуйте! Так не пойдет, GetInfoCut хранит массивы координат и размеров прямоугольников, и пользователь, кнопками Previous и Next, "бегает" по массиву :
и так:
но если запустить программу, нажать StartCutting, поменять значение с 1500 на 2000, нажать StartCutting, поменять с 2000 на 3000, нажать StartCutting
то вылетает ошибка:
GetInfoCut.SetArrayFromUser(ListDetails) - загружает(передает) массив с размерами в переменную в класс, которая вычисляется в GetInfoCut.Execute;
GetInfoCut.SetFlagsAndParametersCut(StrToInt(Edit2.Text),StrToInt(Edit3.Text),20) - устанавливаются параметры обработки(Ширина листа и длина):
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 - возвращает все нужные данные для обработки пользователем
-
8 часов назад, slav_z сказал:
не хотелось бы сильно вникать в вашу задачу, если работает, то очень хорошо... правильно/не правильно - это непростой вопрос... просто посмотреть код и принять верное архитектурное решение невозможно... надо полностью разобраться в вашей задаче.... но времени сейчас просто нет на это...
Не надо вникать во все)) проверьте, пожалуйста, правильно работы одного класса TSMC_Cutting, все равно иногда то зависает то вылетает, буду очень признателен...
-
20 часов назад, slav_z сказал:
массив и передавайте... использовать поток нужно если вычисления займут значительное время (будет влиять на работу UI... т.е будет заметно что приложение подвисает... можете кинуть анимацию на форму... сразу поймете...) если вычисления будут быстрыми, то не делайте поток... не используйте потоки если это ничего не даст (к примеру время обработки данных - 1 мс.)... если поток все же потребуется, то просто используйте ваш массив в потоке... само собой если массив будет меняться, то нельзя с ним работать в основном (других) потоках до окончания обработки...
Вот, вроде все получилось, посмотрите пожалуйста, правильно я мысль Вашу понял?
-
17 часов назад, slav_z сказал:
массив и передавайте... использовать поток нужно если вычисления займут значительное время (будет влиять на работу UI... т.е будет заметно что приложение подвисает... можете кинуть анимацию на форму... сразу поймете...) если вычисления будут быстрыми, то не делайте поток... не используйте потоки если это ничего не даст (к примеру время обработки данных - 1 мс.)... если поток все же потребуется, то просто используйте ваш массив в потоке... само собой если массив будет меняться, то нельзя с ним работать в основном (других) потоках до окончания обработки...
Здравствуйте! Что то я запутываюсь, Вы не могли бы посмотреть, в правильном я направлении иду? Пока после кнопки "ButtonStartCutting" приложение не закрыть, но все же... хотя бы в общих чертах...
-
В 24.04.2020 в 19:17, slav_z сказал:
вашему "вычислителю" должно быть все равно:
-откуда и как были получены исходные данные (скачаны по http, получены по почте, загружены из файла и т.п.)
-каков формат исходных данных (xls, json и т.д)
-как будет использован результат вычисления (показан пользователю в UI (на форме), отправлен как ответ http, записан в файл)
его работа - что-то посчитать и отдать результат...
Здравствуйте!
А как лучше сделать передачу данных от пользователя(ГабаритY, ГабаритX, Кол-во) в вычислитель?
Вычислитель обрабатывает отсортированный(сортирует по убыванию и ставит в флаги в массиве) массив, при этом он меняет в нем Кол-во, и флаги(что бы понимать когда остановиться)... и создает массив координат(для Bitmap)
Сделать поток который будет преобразовывать полученные данные(в каком виде лучше?) в массив, а потом поток для сортировки, а потом поток для координат?
Или передать уже готовый массив в поток, это вообще возможно?
-
-
В 24.04.2020 в 13:03, slav_z сказал:
fg
если б все было так просто...
я приложил проект - загрузка вашего списка... работает под windows и android... под ios тоже будет (должно... возиться с маком и айфоном чета лень)
Сделал по Вашему примеру проверку статуса, но почему то работает через раз. Допустим, по умолчанию стоит номер 11249, нажимаем Search, все выводит. Как меняем на 11250 то ошибку выдает. А если изначально поставить 11250 то работает нормально, можете проверить пожалуйста...
-
В 24.04.2020 в 19:17, slav_z сказал:
вашему "вычислителю" должно быть все равно:
-откуда и как были получены исходные данные (скачаны по http, получены по почте, загружены из файла и т.п.)
-каков формат исходных данных (xls, json и т.д)
-как будет использован результат вычисления (показан пользователю в UI (на форме), отправлен как ответ http, записан в файл)
его работа - что-то посчитать и отдать результат...
советы: разбивайте программу на логические модули, минимизируйте зависимости между ними (представьте что у вас несколько разработчиков которые говнокодят каждый свою задачу в проекте, и сильносвязанный код этого просто не позволит вам сделать), не используйте русские буквы в тексте программы (даже для комментариев... я как то смотрел исходники какого то японца - там все было на иероглифах - мне его комментарии не помогли), и про транскрипцию тоже забудьте (русские слова английскими буквами)... почитайте про декларативное программирование, когда реализуете какой-то общий алгоритм уберите подальше все детали реализации (условия, циклы, работа с массивами)... что делает ваша функция function DetIn() ? - по названию должно быть понятно.. не используйте сокращения в названиях переменных... type TVSE=record - ну что это такое?
ОТДЕЛИТЕ логику программы от пользовательского интерфейса (не пишите логику программы в модуле формы - это беда программистов delphi) - вы должны иметь возможность легко заменить одну форму другой - это всего лишь объект для общения с пользователем... очень тяжелый совет: попробуйте написать ваше приложение как консольное... а потом добавить в него GUI...
когда пишите программу всегда думайте как ее переписать лучше... не придумывайте окончательную архитектуру программы до получения первой работающей версии... только когда решите все проблемы сможете увидеть картину в целом...
....я могу дать еще 1000 советов.... но сейчас вам от них станет только хуже...
Спасибо! В общем все понятно, знакомо и одновременно сложно. Нужны учитель и практика. Вот я и хочу, что-бы мне это приложение переписали грамотно, а потом изучить сам код. Пока изучаю gek.zip...
-
В 24.04.2020 в 18:24, Slym сказал:
Так у тебя уже все есть... кроме отправки почты (а с ней не все так просто как кажется, все борются со спамом)
Компонуй и получай свой гонорар
Так да! Только там все на олдскульном все написано, на моем родном)), так то все работает, но глючит и зависает, вылетает и т.д.. Надо это все как то грамотным языком переписать
-
13 часов назад, #WAMACO сказал:
Scale устройства учитываете?
Что возвращает такая функция:
function GetScreenScale: Single; var ScreenService: IFMXScreenService; begin Result := 1; if TPlatformServices.Current.SupportsPlatformService (IFMXScreenService, IInterface(ScreenService)) then Result := ScreenService.GetScreenScale; end;
В общем вставил картинку в этот bitmap в начале приложения, типа логотипа, там, видимо все автоматом настроилось, а потом уже выводит в нормальном масштабе!
Сапсибо!
-
32 минуты назад, #WAMACO сказал:
~ 350 тыщ., это навскидку.... а вообще ТЗ более подробное должно быть...
к сожалению нет таких зарплат.
-
12 минут назад, Slym сказал:
1. Говорят - сначала сделай "какнибудь" - оптимизацию оставь на потом
2. А книжку почитай... ООП там всякие... инкапсуляция там, переиспользование кода...
по вашему списку
1. Список счетов (желательно с оповещением статусов, типа как на СМС на ватсапе приходят)Кто их делать будет? Бекенд? На чем написан? или его нет?
2. Онлайн каталог номенклатуры (калькулятор с разными расчетами, примерно как в Apk, думаю надо будет подробно объяснять как и что)
Онлайн каталог ты получил выше...3. Раскрой листа (алгоритм я же сделал, просто внедрить): ввод списка с числами (габаритY, габаритX, кол-во) , показать изображение работы алгоритма:
Прежде чем внедрять нужно понять к чему? Нафега клиенту твой алгоритм? Он не тебе материал экономит, а себе деньги... Сущьность какая? Заказ? список деталей? детали круглые/квадратные/в форме котиков?
Кто раскрой делать будет? Клиент - ему это нафиг ненадо, хоть 1 деталь на лист. Бекенд? Админский фронтэнд? На чем написан? или его нет?4. Контакты (просто текстовая информация с ссылками)
Тупо вывести на экран как Hello world...
5. Отзыв (отправка текста мне на почту)
Кто почту отправлять будет? Бекенд? На чем написан? или его нет?
6. Загрузка файлы xls (прайс)
Кто и главное куда (база) парсить будет? Бекенд? На чем написан? или его нет?
Рано тебе клиентское приложение делать - я тебя бекенда нет по 1,3,5,6 пунктам...и того 2 или даже 3 программы: бекенд, клиентская часть, и одминка для приемщика заказа
причем править имеющийся бекенд сайта тебе править низя иначе ты бы послушался и не парсил html а запилил нормальный JSON в нужном формате1-2 Понял
По списку:
1. Список делает пользователь(П) путем ввода номера счета от 1 до 20000+.
str.Add('numberOrder='+Form1.Edit1.Text);
str.Add('dateOrder='+copy(datetoStr(now),0,2));
str.Add('monthOrder='+copy(datetoStr(now),4,2));
str.Add('yearOrder='+copy(datetoStr(now),7,4));
tt:=TStringList.Create();
tt.LoadFromStream(net.Post('https://gector-spb.ru/checkZakaz.php',str).ContentStream,TEncoding.UTF8);даты поиска счета задается пользователем, по умолчанию (now-30 : now)
2. Есть
3. Задача рассчитать сколько надо листа и сообшть-показать их пользователю(П). П вводит толщину, ширину и длину расчетного листа, т.е. всего один расчетный габарит, допустим 20х2000х6000 или 2х1250х2500 или 10х1500х3000,
как правило максимум 2000х6000 и вводит список прямоугольников: 250х130 -10шт, 160х500 - 10шт и т.д., условно бесконечное коли-во. Фигурные не требуется!
Алгоритм рассчитывает сколько надо листов которые указаны в начале расчета, т.е. клиент зная кол-во листов сможет их указать в калькуляторе и узнать сколько будет он стоить
Вот кусок моего рабочего алгоритма (отдельный unit.pas):
function DetIn(numList,vy,vx,nebolee:integer;var det:tmasdet;prip:integer):tDetin;
var i,newposy,newposx:integer;
tmp:tmasdet;
kol,kimY,kimX,kimY2,kimX2:double;
revers:boolean;
begin
kol:=0;result.Влезло:=0;result.остY:=vy;result.испX:=0;
revers:=false;newposx:=posx;newposy:=posy;
kimy:=0;kimx:=0;
if vx<=0 then
begin
if (det.gy+prip)<=nebolee then
begin
kol:=trunc(vy/(det.gx+prip));
if kol>det.kol then kol:=det.kol;
kimX:=kol*((det.gy+prip)*(det.gX+prip));
kimX:=kimX/(Vy*(det.gY+prip));
end
else kimx:=0;
if (det.gx+prip)<=nebolee then
begin
kol:=trunc(vy/(det.gy+prip));
if kol>det.kol then kol:=det.kol;
kimY:=kol*((det.gy+prip)*(det.gX+prip));
kimY:=kimY/(Vy*(det.gX+prip));
end
else kimy:=0;
if (kimy=0)and(kimx=0) then det.влезает:=false;
end;
if vx>0 then
begin
if ((det.gy+prip)<=vx) then
begin
kol:=trunc(vy/(det.gx+prip));
if kol>det.kol then kol:=det.kol;
kimX:=kol*((det.gy+prip)*(det.gX+prip));
kimX:=kimX/(Vy*Vx);
end else kimX:=0;
if ((det.gx+prip)<=vx) then
begin
kol:=trunc(vy/(det.gy+prip));
if kol>det.kol then kol:=det.kol;
kimY:=kol*((det.gy+prip)*(det.gX+prip));
kimY:=kimY/(Vy*Vx)
end
else kimY:=0;
if ((det.gy+prip)<=vy) then
begin
kol:=trunc(vx/(det.gx+prip));
if kol>det.kol then kol:=det.kol;
kimX2:=kol*((det.gy+prip)*(det.gX+prip));
kimX2:=kimX2/(Vy*Vx)
end
else kimX2:=0;
if ((det.gx+prip)<=vy) then
begin ....вызывается так:VSE:=play(StrToInt(Edit9.Text),StrToInt(Edit10.Text),masdet,i);
где
type tmasdet=record
gy,gx,kol:integer;
влезает:boolean;
НИКАК:boolean;
end;var masdet:array of tmasdet;
type TVSE=record
ширина:integer;
припуск:byte;
КолЛист:array of integer; - тут кол-во требуемых листов
МассивДляРис:array of trismas; - координаты в мм всей раскладки
МассивДет0:array of tmasdet;
МПРезки:integer; длина все контуров всех прямоугольников4. Да
5. Просто анонимное письмо из Memo мне на почту
6. Прайс просто скачать на устройство в папку download, и сразу открыть для просмотра, если это возможно устройством
net.Get('https://gector-spb.ru/assets/files/price.xls',resultStream);
НИКАКИХ ЗАКАЗОМ ПРИЕМОВ ЗАКАЗОМ ОТ КЛИЕНТА ПРИНИМАТЬ Не НАДО!
это как визитная карточка с каталогом, списком счетов и калькулятором
Парсить это пока, на сколько я понял, дешевле. Мне надо запустить приложение, чтобы работало, деньги со своего кармана, надеюсь клиенты привыкнуть к нему, то тогда, возможно, хозяин фирмы выделит другие средства для достойного приложения. как то так
-
21 минуту назад, #WAMACO сказал:
ну брат... это ничтожно мало для такой задачи, сразу могу сказать....
какое Ваше предложение?
-
50 минут назад, slav_z сказал:
fg
если б все было так просто...
я приложил проект - загрузка вашего списка... работает под windows и android... под ios тоже будет (должно... возиться с маком и айфоном чета лень)
ну вот же, работает! все просто наверно))
хотя говорят что лучше ListView(без тормозов) или нет!? там и поиск с верху можно выставить..
а для чего много pas файлов, почему все в одном не сделать, удобство или что ?
-
21 минуту назад, #WAMACO сказал:
и какой бюджет?
30000
-
20 минут назад, #WAMACO сказал:
Выложите хотя бы тех.задание сюда, что нужно сделать, народ посмотрит и сразу прикинет, сможет Вам написать программу или нет...
Так сверху все сообщил, если что еще надо скажите, задавайте вопросы... + свой apk выложил того что требуется (могу код выложить свой)
1. Список счетов (желательно с оповещением статусов, типа как на СМС на ватсапе приходят)
2. Онлайн каталог номенклатуры (калькулятор с разными расчетами, примерно как в Apk, думаю надо будет подробно объяснять как и что)
3. Раскрой листа (алгоритм я же сделал, просто внедрить): ввод списка с числами (габаритY, габаритX, кол-во) , показать изображение работы алгоритма:
4. Контакты (просто текстовая информация с ссылками)
5. Отзыв (отправка текста мне на почту)
6. Загрузка файлы xls (прайс)
пока все вроде
-
34 минуты назад, #WAMACO сказал:
https://www.labirint.ru/books/512935/
Начните с 1-го тома, потом далее.... многие вопросы отпадут.
Это я буду 5 лет изучать, может меньше))
А программа то нужна сейчас...
-
Может быть кто подскажет где и кто может обучить грамотному программированию?
-
Почему никто не хочет заняться данной задачей, это очень сложно!?
Project1.apkвот что я примерно хочу видеть
-
53 минуты назад, #WAMACO сказал:
Вы же вроде нашли разработчика...
сдался))
-
В 20.03.2020 в 17:03, Sashar333 сказал:
Нашел программиста для написания данного приложения!
Всем спасибо!
Тему можно закрыть.
Продолжаю искать разработчика...
Требуется приложение на на все смартфоны
в Ищу подрядчика
Опубликовано
точнее при смене значения в переменной BitmapSizeWitdh