-
Content Count
1053 -
Joined
-
Last visited
-
Days Won
23
Everything posted by aehimself
-
Generic from the RTL for sorted list of objects
aehimself replied to dummzeuch's topic in RTL and Delphi Object Pascal
You always can use a TObjectDictionary<String, TObjectList<TMyClass>>. That way you can have multiple instances of TMyClass assigned to the same string key. -
There are also open-source alternatives: https://github.com/MahdiSafsafi/DebugEngine https://github.com/Fr0sT-Brutal/Delphi_StackTraces I never used JCL as I only wanted stack traces and I had to import half of the library just to achieve that.
-
I know I'm being picky, so feel free to completely ignore my "suggestions". But, in the era of OOP you might want to consider plucking all logic into a class, like TGamePascalGame. So instead of GameRun(nil, GameEvents); you simply could derive from TGamePascalGame, and say... mygame := TMyGameDerivedFromGamePascalGame.Create; Try mygame.Run; Finally mygame.Free; End; With this you immediately can get rid of the mandatory, huge Case statement in the method and simply provide a protected virtual procedure like DoStartup, DoShutdown, DoUpdate, DoRender and DoRenderHUD what your consumers can simply override. If you are thinking on the long run this will also make your life easier as adding new controllable features can simply be published by properties: mygame := TMyGameDerivedFromGamePascalGame.Create; Try mygame.EnableHardwareAcceleration := True; mygame.DataFolder := IncludeTrailigPathDelimiter(ExtractFilePath(ParamStr(0))) + 'mods'; mygame.HResolution := 1024; mygame.VResolution := 768; mygame.VSync := False; mygame.FullScreen := True; // etc, etc.. mygame.Run; Finally mygame.Free; End; The demo looks really good. I was thinking on trying myself out in game development so an easy-to-use library could keep my initial struggles at a minimum. So keep up the good work, I'll keep an eye on the repo for sure!
- 8 replies
-
- object pascal
- gamedev
-
(and 6 more)
Tagged with:
-
...and 64-bit breakpoints broke again today using the patch.
-
Better way to maintain a list in a database table??
aehimself replied to Ian Branch's topic in General Help
If it's a log, definitely put them in a separate table, one log entry being one record, and store the timestamp in a separate field. Maybe even add a log category field, like "backgroundworker", "httpserver", "cache". On the long run, being able to quickly search log entries between a specified timeframe is a lifesaver! -
Better way to maintain a list in a database table??
aehimself replied to Ian Branch's topic in General Help
Depends on your application. I'd break the list up to elements (and store them in their separate table) because of two reasons: - You can use simple VarChar fields instead of MEMO / CLOB, which is more easy on resources - You can filter the list with your select if needed Edit: by having their own table you can even extend each list element with further properties later on -
You might want to include the differences, pros and cons in the GitHub readme not to leave the impression of a library that gets outdated as soon as you get used to it. Let's leave that feature to some JavaScript frameworks 🙂
- 8 replies
-
- object pascal
- gamedev
-
(and 6 more)
Tagged with:
-
It would be nice to see an actual demo of what the engine can do. Things are a little bit confusing, what happened to GameVision toolkit, and what it Delphi GameKit?
- 8 replies
-
- object pascal
- gamedev
-
(and 6 more)
Tagged with:
-
My process: - Install 11.2 and use it - Rename 4 affected files to *.*.original - Unzip both unofficial fixes to \bin folder - Try to use it, breakpoints broken, so - Rename patched files to *.*.patched, rename *.*.original to *.* and use it - Since 32 bit is working and DelphiLSP.exe is a part of the 32 bit version, I decided to use 32 bit version only. Rename those files to .original, rename .patched to normal - Breakpoints working, so I start to wonder and do the same with 64bit - Confused as hell, as it's working...?!
-
I honestly can not understand this patch. After reverting back to the original files and reapplying it, breakpoints work fine on 64 bit as well, even in a new method of an unsaved unit...
-
You really never heard of amd-x64.google.com or itanium64.en.delphipraxis.net? 😄
-
ANN: Better Translation Manager released
aehimself replied to Anders Melander's topic in Delphi Third-Party
I have only one valid explanation, which is I usually forget to sync and build a new language file and therefore the .xlat goes in in a separate commit. However, for the actual translation you need the GUI anyway and if you update the .xlat beforehand, you'll have no idea if there was a change or not (especially if we'll have the option to see changed entries only). So after all it would solve my issue of the file going in in a separate commit, but it's still not translated and built, so it would add no actual value. -
ANN: Better Translation Manager released
aehimself replied to Anders Melander's topic in Delphi Third-Party
@Anders Melander Was does this mean? 🙂 Edit: A nice addition would be to have an option to show only changed entries (whether added, obsoleted or marked as unused). That would probably tell me if I should be worried. Edit-edit: Git showed it. An item has been un-unused: -
Does ChatAI make StackOverflow obsolete ?
aehimself replied to david_navigator's topic in Tips / Blogs / Tutorials / Videos
Ask if it has any affiliation to / what it knows about SkyNet as it already seems to be self-aware 😮 -
Does ChatAI make StackOverflow obsolete ?
aehimself replied to david_navigator's topic in Tips / Blogs / Tutorials / Videos
I don't know which one is funnier. The actual punchline or the ChatGPT answer. Well played AI, well played. -
I can confirm. Rolling back the patch and my breakpoints are good as new on Win64 platform.
-
All my breakpoints just become unavailable (like code never gets executed in that function), did you meet the same issue?
-
This is the second post where you are simply being rude and offending everyone around you. I learned it a long time ago but it's not clearly documented, but a solution can be found by hovering over a user's name:
-
TIcsWndControl exposes ProcessMessage, ProcessMessages, MessagePump and MessageLoop for all scenarios. You guys were prepared, there's no need to create, only to use!
-
Delete substring from a string
aehimself replied to Henry Olive's topic in RTL and Delphi Object Pascal
If you are sure they are always separated by commas, you can do Function GetRidOf(Const inString, inDeleteThis: String): String; Var mystr, s: String; Begin Result := ''; For s In inString.Split([',']) Do If s <> inDeleteThis Then Result := Result + s + ','; If Not Result.IsEmpty Then Result := Result.Substring(0, Result.Length - 1); End; This should properly keep '100' in '1100' for example. -
Using % as a host will allow all source IP addresses afaik. Check if you can set it, but it's a security risk, so be warned...
-
And then? 🙂 TerminateThread? 🙂
-
Be careful with Contains, as it will trigger on substrings too. Maybe it's not the case with DocNos, but still. What I'd do is... DocNos := #9; CDS1.First; While Not CDS1.Eof Do Begin If Not DocNos.Contains(#9 + CDS1DOCNO.asString + #9) Then DocNos := DocNos + CDS1DOCNO.asString + #9; CDS1.Next; End; DocNos := DocNos.Substring(1, DocNos.Length - 2); This also can fail if the strings contain tabulator characters, but that's a small chance I'd be willing to take. The best solution would be to use a TList<String> and concatenate everything once it's filled.
-
Did anyone try this for longer already? I'm a bit worried because of the "do not use in production" thing and I can not decide if it's only the mandatory warning or it indeed can mess something up badly.
-
A comprehensive guide to Delphi programming language functions and procedures
aehimself replied to pouyafar's topic in VCL
Isn't that something what a ChatGPT malware would say...? 🙂