Mars M
-
Постов
63 -
Зарегистрирован
-
Посещение
-
Победитель дней
4
Сообщения, опубликованные Mars M
-
-
Тема старая, но вот тоже понадобилось работать с запаролеными zip архивами в Windows.
Наткнулся на это http://www.uweraabe.de/Blog/2017/05/07/tzipfile-with-password-encryption-part-3/
Там статья из трех частей. Если кратко то в третьей части можно скачать конечный результат модуля, во второй, в комментах есть пример работы.
Все в сборе приаттачил к сообщению
Проверил, вроде работает. Из минусов если добавлять в архив папку с файлами(ZipDirectoryContents) то файлы не паролятся, ну это не проблема.
-
30 минут назад, TK Studio сказал:
Есть форма BorderStyle = none. Как можно реализовать изменение размера формы? На VCL все работает, а на FMX нет.
StartWindowResize;
-
Спасибо, наверное возьму этот пример за основу
-
Что никто не встречал подобного?
Переношу один старый проект на FMX, оказалось сложней чем предполагал.
Но отступать уже поздно
Одна из проблем как раз отсутствие hex реактора.
В принципе нужен даже не редактор а просмотрщик с минимальными возможностями редактирования.
-
-
Такая проблема - есть ListBox, MultiSelectStyle выставлен в None.
Вроде все нормально, но если выделить какой нибудь итем, потом правой кнопкой кликнуть по любому итему то выделенный итем так и останется выделенным, даже если выбрал уже другой.
Это косяк листбокса или так и должно быть и как это обойти?
-
Нужен компонент Hex редактора для FMX.
Поиском ничего не нашел.
Когда то бы прекрасный компонент TMPHexEditor, но сейчас найти подобное для FMX думаю не реально.
Или может кто сам подобное делал и посоветует чего:
-
Кинул на ScrollBox несколько TExpander, если у всех свойство isExpanded := True то все нормально.
Если у какого выставить в false то с ним во время выполнения программы начинаются проблемы, может не раскрыться или исчезнуть заголовок.
IDE Delphi Tokyo 10.2, в предыдущих версиях не проверял.
Отрыл проект из папки samples, там у всех TExpander установлено true, если устанавливаю в false то тоже такая же проблема.
Проблема только в Токио или во всех версиях так?
PS: пока вышел из положения вот так.
Выставил у всех isExpanded := True и в onCreate формы добавил
for i := 0 to ComponentCount - 1 do if Components[i] is TExpander then TExpander(Components[i]).IsExpanded := False;
Работает конечно, но в дальнейшем могут быть неудобства, нужно будет проверять какие нужны раскрыты а какие нет.
-
denprox, твое желание сделать по проще понятно. Но нужно понимать что если ты делаешь проще для себя, то усложняешь все для пользователя
Имхо, сделать свой редактор карт будет лучшей идеей, во первых ты будешь точно знать что потом будет загружаться в игру, во вторых упростишь все для пользователя, а это главное
Редактор можно сделать примерно по такому принципу.
Скрытый текстПользователь загружает картинку, указывает что это - например фон сцены или просто картинка для красоты, то есть которая не участвует в игре.
Их просто отрисовываем на общем битмапе, который в игре будет грузиться как фон.
Или картинка может быть каким нибудь объектом, например мишенью или стеной. Эти картинки сохраняем отдельно а размеры и координаты сохраняем в файл.
Так же для объектов можно указать какие нибудь действия(которые предусмотрены редактором), например если попали по мишени то она падает.
Если нужны прозрачные регионы на "объектах", опять же не нужно заставлять пользователя что то делать в фотошопе, ему достаточно будет мышкой выделить нужную область, размеры и координаты которой так же сохраняются в файл.
Далее в игре
Скрытый текстЯ не пойму что в моем примере оказалось сложного, на самом деле там самая большая процедура которая определяет координаты для битмапов и их отрисовки..
Но в случае если загружать карту созданную в редакторе то и тут все сильно облегчается
И совсем не обязательно точь в точь следовать моему примеру, то есть отрисовывать все битмапами.
Зная координаты и размеры например мишени, можно по ним создать любой контрол, например TPanel, на нем уже отрисовать картину выбранную пользователем в редакторе.
А уж с контролом потом можно делать что угодно, при этом не зная его хэндла, но зная его координаты
Из моего примера видно, что определение того "попала" пуля в нужные координаты или нет используется всего одна функция.
На самом деле все проще чем кажется, к тому же убиваем еще одного зайца, код получается кроссплатформенным.
Хотя тут утверждать не буду, на Токио у меня проекты под андроид не собираются а других девайсов нету
-
29 минут назад, denprox сказал:
Мишени и укрытия заранее не известны.
Сделать так что бы были известны
Создай что то типа редактора карт, где пользователь сможет выбрать текстуру, задать размеры и положение, потом сохранить все это в файл.
А потом в игре отрывать его и будет известно все что нужно.
Для примера, создать запись(record)
type TMap = record Texture: string[255]; wallRect: TRectF; targetRect: TRectF; winRect: TRectF; RadArr: array[0..3] of Single; ClrArr: array[0..3] of TAlphaColor; end;
Пользователь во время создания/редактирования карты заполняет его.
............... var Map: TMap; ............... Texture := 'wall.bmp'; wallRect := TRectF.Create(0, 0, 20, 50); ............... ...............
Сохраняем в файл
var mStream: TMemoryStream; begin mStream := TMemoryStream.Create; mStream.Write(Map, SizeOf(TMap)); mStream.SaveToFile('maps\tire.dat'); mStream.Free; end;
В игре создаем точно такую же запись(record) как и в редакторе, загружаем сохраненный файл с параметрами и заполняем из него запись
var mStream: TMemoryStream; Map: TMap; begin mStream := TMemoryStream.Create; mStream.LoadFromFile('maps\tire.dat'); mStream.Read(Map, SizeOf(TMap)); mStream.Free; end;
В таком случае будут все нужные параметры известны, и примерно так же в играх и делают.
-
-
Возможно эта ссылка тоже будет полезной http://www.partow.net/projects/fastgeo/
-
-
В общем свой вопрос решил. Вышеописанные функции удобны для работы с координатами.
И подошли бы мне если бы нужно было перемещать саму модель, но в моем случае нужно работать только с камерой, а это значит что нужно постоянно учитывать ее положение. Короче слишком много математики для фичи которая будет только для того что бы была
Но к счастью есть свойство ScreenBounds, которое все сделает за меня.
Вот обновленный пример, по правой кнопке куб вписывается в окно, что мне и нужно.
https://yadi.sk/d/KVJFHajd3J9ALD
-
Есть такие функции LocalToAbsolute3D и AbsoluteToLocal3D
С первой разобрался(пример), со второй тоже в принципе ясно.
Осталось только разобраться как это применить
PS: пример честно скопипастил отсюда у него там есть и другие интересные проекты.
https://github.com/LUXOPHIA/Sketch3D
-
Спасибо, гляну, может что и найду там
Вот тут тогда тоже может быть то чего нету в примерах
https://sourceforge.net/p/radstudiodemos/code/HEAD/tree/trunk/Object Pascal/
-
Возможно название темы не правильно задал, но просто не понимаю сути вопроса
Есть ViewPort3D, на нем TDummy, на котором рисую модель.
Вопрос вот в чем, модель может быть как большая, так и маленькая, как мне вписать ее в размеры ViewPort3D?
Разумеется все максимальные и минимальные координаты модели мне известны, но вот как их использовать не могу сообразить.
-
Подниму тему. CUDA конечно хорош(а?), но только для nvidia.
Наткнулся тут на работу с OpenCL в делфи http://www.delphisources.ru/forum/showthread.php?t=28188
Там по ссылке в первом сообщение в принципе все есть что нужно. Кому оттуда не удобно перезалил все файлы https://yadi.sk/d/t3mPqlJT3HnfiX
Вот пример использования https://yadi.sk/d/bmDKXZ0k3Hnfny
Проверял на картах nvidia и ati, конечно же карты должны поддерживать OpenCL.
Если в MyOpenCL.pas чего то не хватает, можно взять это в CL.pas из GLScene https://sourceforge.net/p/glscene/code/HEAD/tree/trunk/Source/ParallelAPIs/
Я например добавил константу CL_DEVICE_LOCAL_MEM_SIZEэ
А можно использовать родные CL.pas и CL_Platform.pas, в первом архиве есть пример использования.
В 03.05.2017 в 20:29, Евгений Корепов сказал:Хоть и не в тему топика, но хочу какие нибудь вычисления замонстрячить!
В архиве как раз есть рабочий пример вычислений
-
Вот так вот вроде работает:
Скрытый текстTCudaDeviceProp = packed record Name: array[0..256 - 1] of AnsiChar; TotalGlobalMem: Cardinal; SharedMemPerBlock: Cardinal; RegsPerBlock: Integer; WarpSize: Integer; MemPitch: Cardinal; MaxThreadsPerBlock: Integer; MaxThreadsDim: array[0..3 - 1] of Integer; MaxGridSize: array[0..3 - 1] of Integer; ClockRate: Integer; TotalConstMem: Cardinal; Major: Integer; Minor: Integer; TextureAlignment: Cardinal; texturePitchAlignment: Cardinal; DeviceOverlap: Integer; MultiProcessorCount: Integer; kernelExecTimeoutEnabled: Integer; integrated: Integer; canMapHostMemory: Integer; computeMode: Integer; maxTexture1D: Integer; maxTexture1DMipmap: Integer; maxTexture1DLinear: Integer; maxTexture2D: array[0..2 - 1] of Integer; maxTexture2DMipmap: array[0..1] of integer; maxTexture2DLinear: array[0..3 - 1] of Integer; maxTexture2DGather: array[0..2 - 1] of Integer; maxTexture3D: array[0..3 - 1] of Integer; maxTexture3DAlt: array[0..2] of integer; maxTextureCubemap: Integer; maxTexture1DLayered: array[0..2 - 1] of Integer; maxTexture2DLayered: array[0..3 - 1] of Integer; maxTextureCubemapLayered: array[0..2 - 1] of Integer; maxSurface1D: Integer; maxSurface2D: array[0..2 - 1] of Integer; maxSurface3D: array[0..3 - 1] of Integer; maxSurface1DLayered: array[0..2 - 1] of Integer; maxSurface2DLayered: array[0..3 - 1] of Integer; maxSurfaceCubemap: Integer; maxSurfaceCubemapLayered: array[0..2 - 1] of Integer; surfaceAlignment: Cardinal; concurrentKernels: Integer; ECCEnabled: Integer; pciBusID: Integer; pciDeviceID: Integer; pciDomainID: Integer; tccDriver: Integer; asyncEngineCount: Integer; unifiedAddressing: Integer; memoryClockRate: Integer; memoryBusWidth: Integer; l2CacheSize: Integer; maxThreadsPerMultiProcessor: Integer; streamPrioritiesSupported: Integer; globalL1CacheSupported: Integer; localL1CacheSupported: Integer; sharedMemPerMultiprocessor: Cardinal; regsPerMultiprocessor: Integer; managedMemory: integer; isMultiGpuBoard: integer; multiGpuBoardGroupID: Integer; end;
Только нужно будет закомментировать строчку
assert(sizeof(TCudaDeviceProp) = 540, 'sizeof(TCudaDeviceProp) <> 540');
-
Проще таскать с собой наверное. Иначе придется отслеживать какая версия у пользователя, ну и разницу в версиях учитывать в коде.
-
6 часов назад, Евгений Корепов сказал:
Очень, очень странные дела...
Скачал с инета cudart32_41_28.dll, с ней все нормально.
Мне кажется что запись TCudaDeviceProp в разных версиях пишется по разному.
-
Спасибо, ссылки в любом случае полезные. Но, если я правильно понял, там придется SDK устанавливать на клиентском компе.
-
Теперь вот окончательно разобрался что к чему
Ошибку в коде что я писал уже появилась после того как я код переделал что бы буферы векторов и индексов делить на части.
Думая что ошибка найдена я вернул все к первоначальному виду и тут та же проблема.
В общем наткнулся в исходниках fmx на метод Create для индексного буфера.
TIndexBuffer.Create(const ALength: Integer; const AFormat: TIndexFormat = TIndexFormat.UInt16);
Из которого стала понятна причина проблемы
При создании буфера указал TIndexFormat.UInt32 и первоначальный код заработал без проблем.
Возможно плохо искал, но сколько инет перерыл не попадалось про это. Хотя на gamedev.ru читал про тоже самое но касательно OpenGL, но не обратил внимание
-
Как можно узнать размер видеопамяти под WIN?
В инете находятся решения через реестр, с помощью DX и другие, но все сообщения старые.
Может есть какой способ узнать средствами FMX?
Возможна работа с паролем в Tzipfile?
в RTL
Опубликовано
Даже не знаю. Но скорее всего пойдет.