shadowrecon Posted April 1, 2012 Share Posted April 1, 2012 In Map.Scar, you are creating a bmp and free it at the end but you have an exit statement between them. so if the exit state was true then the bmp would be left in the memory. eventually causing a error. [scar] {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= function FindMMDotsExOverlap(ColorDiffs: TIntegerArray): T2DPointArray; Contributors: Wanted Description: Finds all MMDots you specify i.e. cldWhiteDot etc. see Global.scar This one uses overlapping checking, so it's twice as slow. Date Created: December 8th, 2011. By Wanted. RS2 Build 688. Last Modification: February 19th, 2012. By Wanted. RS2 Build 701. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=} function FindMMDotsExOverlap(ColorDiffs: TIntegerArray): T2DPointArray; var I, II, H, HH, Map, DC, Wi, He, C, O: Integer; Offset: T2DPointArray; TPA: TPointArray; L: TIntegerArray; B: Boolean; begin Result := [TPointArray([])]; HH := High(ColorDiffs); SetLength(Result, HH + 1); SetLength(L, HH + 1); if (HH < 0 ) then Exit; Map := BitmapFromString(MMX2 - MMX1 + 4, MMY2 - MMY1 + 4, ''); CopyClientToBitmap(Map, MMX1 - 2, MMY1 - 2, MMX2 + 2, MMY2 + 2); DC := GetClientCanvas.Handle; SetTargetDC(GetBitmapDC(Map)); GetBitmapSize(Map, Wi, He); FindColors(TPA, 65536, 3, 3, Wi - 3, He - 3); FilterPointsDist(TPA, 0, MMRDe, (Wi / 2) - 2, (He / 2) - 2); SetTargetDC(DC); H := High(TPA); if (H < 0) then Exit; Offset := [TPointArray([Point(-2, 0), Point(-1, 0)]), TPointArray([Point(0, -2), Point(0, -1)])]; for I := 0 to H do for O := 0 to 1 do begin C := (FastGetPixel(Map, TPA.X + Offset[O][0].X, TPA.Y + Offset[O][0].Y) - FastGetPixel(Map, TPA.X + Offset[O][1].X, TPA.Y + Offset[O][1].Y)); B := False; for II := 0 to HH do if (C = ColorDiffs[iI]) then begin B := True; Inc(L[iI]); SetLength(Result[iI], L[iI]); Result[iI][L[iI] - 1] := Point(TPA.X + MMX1 - 4, TPA.Y + MMY1 - 4); Break; end; if (B) then Break; end; FreeBitmap(Map); end; {=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= function FindMMDotsEx(ColorDiffs: TIntegerArray): T2DPointArray; Contributors: Wanted Description: Finds all MMDots you specify i.e. cldWhiteDot etc. see Global.scar Date Created: December 8th, 2011. By Wanted. RS2 Build 688. Last Modification: February 19th, 2012. By Wanted. RS2 Build 701. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=} function FindMMDotsEx(ColorDiffs: TIntegerArray): T2DPointArray; var I, II, H, HH, Map, DC, Wi, He, C: Integer; L: TIntegerArray; TPA: TPointArray; begin Result := [TPointArray([])]; HH := High(ColorDiffs); SetLength(Result, HH + 1); SetLength(L, HH + 1); if (HH < 0 ) then Exit; Map := BitmapFromString(MMX2 - MMX1 + 4, MMY2 - MMY1 + 4, ''); CopyClientToBitmap(Map, MMX1 - 2, MMY1 - 2, MMX2 + 2, MMY2 + 2); DC := GetClientCanvas.Handle; SetTargetDC(GetBitmapDC(Map)); GetBitmapSize(Map, Wi, He); FindColors(TPA, 65536, 3, 3, Wi - 3, He - 3); FilterPointsDist(TPA, 0, MMRDe, (Wi / 2) - 2, (He / 2) - 2); SetTargetDC(DC); H := High(TPA); if (H < 0) then Exit; // <- But you could exit here. for I := 0 to H do begin C := (FastGetPixel(Map, TPA.X - 2, TPA.Y) - FastGetPixel(Map, TPA.X - 1, TPA.Y)); for II := 0 to HH do if (C = ColorDiffs[iI]) then begin Inc(L[iI]); SetLength(Result[iI], L[iI]); Result[iI][L[iI] - 1] := Point(TPA.X + MMX1 - 4, TPA.Y + MMY1 - 4); Break; end; end; FreeBitmap(Map); // <--- Free'ed here end; [/scar] Quote Link to comment Share on other sites More sharing options...
FHannes Posted April 1, 2012 Share Posted April 1, 2012 The proper way of doing this would actually be [scar]Map := BitmapFromString(MMX2 - MMX1 + 4, MMY2 - MMY1 + 4, ''); try // All of the code finally FreeBitmap(Map); end;[/scar] Using try...finally, the finally section would be called when you exit the try section, even if you call Exit to get out of the function. Quote Link to comment Share on other sites More sharing options...
Wanted Posted April 1, 2012 Share Posted April 1, 2012 https://github.com/OSI1/OSI1/commit/792a55c4b8d8e9ac3e9ee6d878b10e69cf5c2ab6 Good find That's also a really useful piece of information that try except finally works in that way, however I find it unnecessary at this time since the code shouldn't throw any errors anymore. Definitively going to use it in the future though. Quote Link to comment Share on other sites More sharing options...
TerryKig Posted July 18 Share Posted July 18 1st bitcoin halving bitcoin buyer avis how to buy bitcoin from coinstar buy bitcoin for cash los angeles how to buy bitcoin to spend longest bitcoin transaction time provoco crypto.com on desktop 1125 bitcoin to usd converter best crypto platform to buy bitcoin blueprint 21 wma bitcoin boostswap jupiter airdrop checker 0 05 bitcoin berapa rupiah lido token aaron wright crypto ark crypto price prediction crypto rainbow 2070 super bitcoin hashrate alieti bitcoin bob token blackrock bitcoin giveaway op price 2 depth crypto moverse crypto bots trading american crypto exchanges bitcoin lifestyle how to buy option on bitcoin how to buy bitcoin on gate.io bitboy crypto news 0.0004058 bitcoin to usd shield crypto crypto python3 how to buy baby bitcoin on pancakeswap top memecoins call of duty tactical stance reddit crypto bitcoin miner buy uk robinhood bitcoin pikamoon crypto price 0014724 bitcoin worth crypto arena parking lot 4 1 bitcoin kac tl 6 apb bitcoin cute animal pfp how to buy bitcoin euro 0.03122 bitcoin buying baby bitcoin Quote Link to comment Share on other sites More sharing options...
MiltonSmure Posted September 21 Share Posted September 21 Гидроизоляция это ключевой элемент в строительстве, обеспечивающий защиту объектов от воздействия влаги и воды. В зависимости от условий эксплуатации и материала конструкции, выбирается определенный тип гидроизоляции. Рассмотрим главные разновидности и их применения. 1. Рулонные материалы Рулонные гидроизоляционные материалы применяются для защиты кровель и фундаментов. Они посещают на основе битума и полимеров. - Битумные рулоны знамениты благодаря своей доступности и безопасности. Употребляются на плоских крышах и в основании построек. - Полимерные рулоны имеют более высокую крепкость и долговечность, то что надо для трудных погодных критерий. 2. Жидкая гидроизоляция Водянистые гидроизоляторы используются для сотворения бесшовного покрытия. Они бывают на основе: - Полимеров с легкостью наносятся и образуют крепкую мембрану. - Цемента совершенно подходят для ванной и кухни, владеют хорошими гидрофобными свойствами. 3. Проникающая гидроизоляция Этот тип просачивается в структуру бетона и наполняет микротрещины, обеспечивая надежную охрану. Применяется предпочтительно для фундаментов и подвалов. Проникающая гидроизоляция эффективно справляется с неизменным воздействием воды. 4. Мембранная гидроизоляция Мембранные системы часто употребляются для крыши и находящийся под землей конструкций. Такой метод дает обеспечение надежную защиту от осадков и грунтовых вод. - ЭПДМ и ТПО мембраны имеют высокую устойчивость к солнечному излучению и механическим повреждениям https://gidroizolyaciya-dlya-vsekh.ru 5. Гидрофобные добавки Гидрофобные добавки в бетон или раствор помогают предупредить проникновение воды. Они идеально подходят для творения водонепроницаемых конструкций, таких как бассейны и резервуары. Выбор типа гидроизоляции При выборе гидроизоляции принципиально учесть: - Условия эксплуатации влажность, температура, возможные нагрузки. - Материалы конструкции для каждого типа материала существует Свой лучший вариант гидроизоляции. - Бюджет некие методы более накладные, но дают обеспечение великую долговечность. В заключение, выбор гидроизоляции зависит от множества факторов. Правильное решение поможет продлить срок эксплуатации строительных объектов и избежать серьезных проблем с влажностью. Quote Link to comment Share on other sites More sharing options...
MatthewHom Posted October 11 Share Posted October 11 Выбор трактора Шифенг: на что направить внимание Тракторы марки Шифенг завоевали популярность на земельном базаре благодаря своей надежности, многофункциональности и доступной цене. Но, чтоб избрать подходящую модель, необходимо учесть несколько ключевых причин. В этой статье будут рассмотрены, на что обратить внимание в момент выбора трактора Шифенг в зависимости от ваших потребностей и критерий эксплуатации. 1. Определите цели использования До этого всего, нужно найти, для каких задач намереваетесь использовать трактор. Основные направления применения тракторов Шифенг включают: - Сельскохозяйственное производс: обработка почвы, посадка, сбор урожая, перевозка. - Строительство:, подъем и транспортировка строй материалов. - Лесозаготовка: вывоз древесины, уборка на делянках. Каждое направление может требовать различной мощности, производительности и дополнительных функций, поэтому важно чётко понять свои цели. 2. Выбор мощности и типа двигателя Тракторы Шифенг представлены в диапазоне мощностей, начиная от легких моделей для небольших хозяйств и заканчивая сильными машинами для крупных агроформирований. Главно принять во внимание следующие моменты: - Мощность мотора: по этой причине параметра зависит способность трактора выполнять разные виды работ. Более массивные машины то что надо для томных условий эксплуатации. - Тип двигателя: дизеля чаще используются в тракторов из-за их экономичности и долговечности, однако и бензиновые модели могут иметь свои преимущества. 3. Конструкция и качество При выборе трактора принципиально обратить внимание на его конструкцию и качество материалов. Тракторы Шифенг довольно частенько делают из крепких сплавов, что увеличивает их долговечность. Также проверьте: - Тип трансмиссии: механическая либо гидростатическая, любая из которых имеет свои плюсы и минусы. - Подвеска: наличие фронтальной и задней подвески помогает сделать лучше устойчивость и маневренность. 4. Комплектация и дополнительные опции Дополнительные функции могут существенно повлиять на комфорт и функциональность работы с трактором. При рассмотрении модели обратите внимание на: - Наличие фар и освещения для работы в черное время суток. - Кабина: отлично утепленная и оснащенная системами вентиляции и кондиционирования веско повысит комфорт оператора. - Дополнительное оборудование: возможность установки разной подвесного или прицепного оборудования (плуг, культиватор, фреза и так далее). 5. Сервис и гарантия Важно учитывать доступность сервисного обслуживания и наличие запчастей. Изучите: - Гарантийные условия: им предоставляется возможность варьироваться в зависимости от производителя. - Квалификация сервисного центра: его возможности по ремонту и обслуживанию тракторов. 6. Бюджет Не забывайте о http://ms06.jp/?page_id=2&unapproved=200410&moderation-hash=d62bf549eb393b51255062535d2e8315#comment-200410 вашем бюджете. Тракторы Шифенг предлагают широкий ценовой диапазон, но также важно учесть расходы на эксплуатацию, обслуживание и возможные ремонты в будущем. Сравните различные модели и выберите ту, которая превосходнейшим образом подходит вашим финансовым способностям. Заключение Выбор трактора Шифенг это ответственный процесс, который находится в зависимости от множества факторов. Обусловьте цели его использования, учитывайте мощность и тип мотора, качество конструкции, дополнительные функции, доступность сервиса и свой бюджет. Правильно подобранный трактор станет надёжным помощником в вашем хозяйстве, обеспечивая эффективность и продуктивность работы на долгие годы. Не торопитесь с покупкой, лучше заранее соберите всю необходимую информацию и проконсультируйтесь с специалистами, чтоб сделать обоснованный выбор. Quote Link to comment Share on other sites More sharing options...