Leaderboard
Popular Content
Showing content with the highest reputation since 02/19/21 in all areas
-
A new version (1.1) of SVGShellExtensions (Open-Source) has been released with a new component (a very useful SVG Text Editor) and a context-menu to export an SVG file to multiple PNG files. The new Setup is always available on the project page: https://github.com/EtheaDev/SVGShellExtensions The preview panel now has a slider to change the "backlight" of the image and more settings (such as text color attributes, theme, use of native Direct2D). The SVG Text Editor is useful for developers who need to change certain aspects of the icons (such as element colors) or try to change the SVG language and see an instant preview of the changes. Any suggestions for improving these components are welcome!
-
- explorer
- svgiconimagelist
- (and 4 more)
-
Firedac FDBatchMove.Execute error when last line in double-quote CSV file does not contain linefeed
Dmitry Arefiev replied to egnew's topic in Databases
This is a bug in TFDBatchMoveTextReader. To fix it: open FireDAC.Comp.BatchMove.Text.pas locate there lines (around line # 1750): until FEof or lEOL or not lInDelim and (FBuff[iLen] = DataDef.Separator); if not FEof then Dec(iLen); replace with: until FEof or lEOL or not lInDelim and (FBuff[iLen] = DataDef.Separator); if not FEof or not lEOL then Dec(iLen); add FireDAC.Comp.BatchMove.Text.pas to your project, or include path to this unit to project->options Search Path, or to tools->options Library Path PS: Best will be to report this issue to quality.embarcadero.com- 5 replies
-
- firedac
- fdbatchmove
-
(and 1 more)
Tagged with:
-
asmprofiler - Freeware Profiler for Delphi saved my day - Thanks
M.Joos replied to microtronx's topic in Tips / Blogs / Tutorials / Videos
In a similar vein, @Eric Grange saved my last week with his SamplingProfiler (https://www.delphitools.info/samplingprofiler/). A good example of a KISS tool - just the right amount of information needed, and really simple to use. So a big thanks from me to Eric Grange. -
asmprofiler - Freeware Profiler for Delphi saved my day - Thanks
microtronx posted a topic in Tips / Blogs / Tutorials / Videos
Thank you very much @AndreMussche. Your https://github.com/andremussche/asmprofiler has saved my day ... my week ... after searching the bug and not finding it by myself ... and a "not working AQ..." demo 😉 I found your project! What a good coincidence! Don't know, if others know your work .. but they definitely should! Very good job! Thanks again! -
Generic set comparer
DiGi replied to Attila Kovacs's topic in Algorithms, Data Structures and Class Design
Can we please sit for a while and appreciate how cute the separating line with scissors is -
Delphi is 26 years old - Marco's blog
Lars Fosdal replied to Mike Torrettinni's topic in Tips / Blogs / Tutorials / Videos
This means I now have 26 years of experience with Delphi, and I still feel like a n00b around parts of it. -
COVID-19 got us all down a bit and even with the vaccines theoretically available now, the light at the end of the tunnel seems very far away. My own turn for a jab will probably not come before fall 2021, so I can only hope that summer will reduce the infection rates as much as it did last year, but the new mutants that spread around the world definitely aren’t good news. Maybe I can lighten up your mood a bit with a new GExperts release. There are a few bug fixes and an also a few new features in the new version, but nothing really exciting. read on in the blog post.
-
Max string literal length = 255
Lars Fosdal replied to Lars Fosdal's topic in RTL and Delphi Object Pascal
Make sure you understand the core issue before posting a googled suggestion. Good luck filling an AnsiString with a string literal longer than 255 chars. Oh wait, you can't. If I don't want to split up and combine multiple literals, loading from a resource string is an option. It just irks me that I can't initialize a string variable that can literally hold billions of characters with a single constant longer than 255 chars. -
spinlock primitives
Anders Melander replied to dummzeuch's topic in Algorithms, Data Structures and Class Design
You are writing your own spinlock to get better performance - and then you use Sleep() which is guaranteed to cause a context switch...? Unless you really know what you're doing then you better of using the synchronization primitives provided by the OS. https://devblogs.microsoft.com/oldnewthing/20051004-09/?p=33923 http://joeduffyblog.com/2006/08/22/priorityinduced-starvation-why-sleep1-is-better-than-sleep0-and-the-windows-balance-set-manager/ Apparently this can't be repeated often enough. -
Read and reapply design time properties to specific controls - runtime
Attila Kovacs replied to aehimself's topic in VCL
I think this is what you need, you just have to adjust it a bit. // search in dfm resources by Attila Kovacs unit DFMSearch; interface uses System.Classes, System.Generics.Collections; type TDFMSearch = class private FFormClasses: TList<string>; FResourceNames: TList<string>; FSearchDictionary: TDictionary<string, string>; function GetFormClasses(AClass: TClass): TList<string>; procedure BuildStrings(AResources: TList<string>); procedure EnumClasses(AClass: TClass); public function Find(const ASearchString: string): TList<string>; constructor Create(AClass: TClass); overload; constructor Create(AClassNames: TList<string>); overload; destructor Destroy; override; end; implementation uses Winapi.Windows, System.Rtti, System.SysUtils, System.StrUtils; function EnumResNames(Module: HMODULE; ResType, ResName: PChar; Obj: Pointer): integer; stdcall; var ds: TDFMSearch; begin ds := TDFMSearch(Obj); if ds.FFormClasses.IndexOf(string(ResName)) > -1 then ds.FResourceNames.Add(string(ResName)); Result := 1; end; function TDFMSearch.GetFormClasses(AClass: TClass): TList<string>; var cl: TClass; ctx: TRttiContext; types: TArray<TRttiType>; typ: TRttiType; begin Result := TList<string>.Create; ctx := TRttiContext.Create; types := ctx.GetTypes; for typ in types do begin if typ.TypeKind = tkClass then begin cl := typ.AsInstance.MetaclassType; if (cl <> AClass) and cl.InheritsFrom(AClass) then Result.Add(UpperCase(cl.ClassName)); end; end; end; procedure TDFMSearch.BuildStrings(AResources: TList<string>); var i: integer; Flags: TFilerFlags; R: TReader; RS: Tresourcestream; vt: TValueType; Position: integer; text, PropName, CompClass, CompName, StrValue, ResStr: string; procedure ReadProperty; begin PropName := R.ReadStr; if ContainsText(PropName, 'caption') then begin vt := R.NextValue; case vt of vaWString, vaUTF8String: StrValue := R.ReadString; vaString, vaLString: StrValue := R.ReadString; else R.SkipValue; end; text := text + ' ' + StrValue; end else R.SkipValue; end; procedure ReadData; forward; procedure ReadComponent; begin R.ReadPrefix(Flags, Position); CompClass := R.ReadStr; CompName := R.ReadStr; ReadData; end; procedure ReadData; begin while not R.EndOfList do ReadProperty; R.ReadListEnd; while not R.EndOfList do ReadComponent; R.ReadListEnd; end; begin for i := 0 to AResources.Count - 1 do begin ResStr := UpperCase(AResources[i]); RS := Tresourcestream.Create(HInstance, ResStr, RT_RCDATA); try R := TReader.Create(RS, 4096); try text := ''; R.ReadSignature; ReadComponent; FSearchDictionary.AddOrSetValue(ResStr, text); finally R.Free; end; finally RS.Free; end; end; end; constructor TDFMSearch.Create(AClass: TClass); begin FSearchDictionary := TDictionary<string, string>.Create; EnumClasses(AClass); end; constructor TDFMSearch.Create(AClassNames: TList<string>); begin FSearchDictionary := TDictionary<string, string>.Create; BuildStrings(AClassNames); end; destructor TDFMSearch.Destroy; begin FSearchDictionary.Free; inherited; end; procedure TDFMSearch.EnumClasses(AClass: TClass); begin if not Assigned(FSearchDictionary) then begin FFormClasses := GetFormClasses(AClass); try FResourceNames := TList<string>.Create; try EnumResourceNames(HInstance, RT_RCDATA, @EnumResNames, NativeInt(Self)); BuildStrings(FResourceNames); finally FResourceNames.Free; end; finally FFormClasses.Free; end; end; end; function TDFMSearch.Find(const ASearchString: string): TList<string>; var i, j, slen: integer; sl: TArray<string>; pa: TPair<string, string>; begin Result := TList<string>.Create; sl := ASearchString.Split([' ']); slen := Length(sl); for pa in FSearchDictionary do begin j := 0; for i := 0 to High(sl) do begin if ContainsText(pa.Value, sl[i]) then inc(j); end; if j = slen then Result.Add(pa.Key); end; end; end. -
Read and reapply design time properties to specific controls - runtime
Uwe Raabe replied to aehimself's topic in VCL
What about creating a new form instance and adjust the components and properties in question from that? -
Read and reapply design time properties to specific controls - runtime
M.Joos replied to aehimself's topic in VCL
I guess it is theoretically possible to shoehorn Delphi's streaming mechanism to do what you want. Essentially you could just reread your form with an adjusted TReader. Specifically you would not want for the components to be recreated. Have a look at the TReader events, specifically TReader.OnCreateComponent One problem though is how to "skip" rereading of components as you want to only select a number of components. -
Micro optimization: Split strings
Stefan Glienke replied to Mike Torrettinni's topic in Algorithms, Data Structures and Class Design
Some of your functions have a defect as in returning an empty array when no delimiter is found - they must return a 1 element array with the input string if they should follow RTL behavior. Also you can remove some unnecessary branching and make the code simpler: function CustomSplitWithPrecountByIndex2(const aString: string; const aDelimiter: Char): TArray<string>; var i, resultLen, resultIdx, tokenPos, inputLen, lastDelimiterPos: Integer; begin inputLen := aString.Length; lastDelimiterPos := 0; resultLen := 1; for i := 1 to inputLen do if aString[i] = aDelimiter then begin Inc(resultLen); lastDelimiterPos := i; end; SetLength(Result, resultLen); resultIdx := 0; tokenPos := 1; for i := 1 to lastDelimiterPos do if aString[i] = aDelimiter then begin SetString(Result[resultIdx], PChar(@aString[tokenPos]), i - tokenPos); tokenPos := i + 1; Inc(resultIdx); end; SetString(Result[resultIdx], PChar(@aString[tokenPos]), inputLen - lastDelimiterPos); end; -
I have developed a SortListBox that accepts Integer items and sorts it in Quicksort, InsertionSort and SelectionSort both order Ascending and Descending. Steps 1) Install the SortPackage.bpl 2) SortListBox Component can be found in 'Samples' page SortListBox Properties SortActive SortType SortOrder SortPackage.bpl
-
@Dany Marmur Because the server works faster if you are shouting 😛
-
Firedac FDBatchMove.Execute error when last line in double-quote CSV file does not contain linefeed
egnew replied to egnew's topic in Databases
Thanks for your help. The issue is resolved. I reported the bug and your solution: https://quality.embarcadero.com/browse/RSP-32465- 5 replies
-
- firedac
- fdbatchmove
-
(and 1 more)
Tagged with:
-
Hiding a public property in a descendant class
Fr0sT.Brutal replied to Cristian Peța's topic in RTL and Delphi Object Pascal
(YourEdit as TCustomEdit).Text := 'ahaha' -
Delphi is 26 years old - Marco's blog
Remy Lebeau replied to Mike Torrettinni's topic in Tips / Blogs / Tutorials / Videos
And now we are drawing particles instead, my how far things have come -
Generic set comparer
Stefan Glienke replied to Attila Kovacs's topic in Algorithms, Data Structures and Class Design
Spring4D has ISet<T> and 2.0 will introduce IMultiSet<T> -
Read and reapply design time properties to specific controls - runtime
M.Joos replied to aehimself's topic in VCL
For inspiration you may also look into this excellent answer from Uwe Raabe on Stackoverflow on a related question: https://stackoverflow.com/questions/47347578/manually-skip-a-component-from-being-created-from-the-dfm which also shows a hacky way to prevent components from getting created. I guess Uwe wasn't aware of his answer more than 3 years ago 😉 As for loading the dfm from the resource that's in the executable have a look at http://docwiki.embarcadero.com/Libraries/Sydney/de/System.Classes.TStream.ReadComponentRes -
How you solved this problem Can you put Your Code Hier ?
- 14 replies
-
- screen
- screenshot
-
(and 2 more)
Tagged with:
-
I Like YOU B U T I D O NO t Hv🤦♂️Te server-code from the client?! Or are you building a server-side plugin?CAPS why?++++ WHY ALL CAPS++ It is not reDABLE.
-
Very Good. I learned something too about default transparency being changed. I am working on a component that sighs, moans and grunts when Sydney gives up.
-
I use for Windows, Mac, IOs, Android and Linux TMS FNC UIpack, which contains FNC Core, which contains a pdf lib. Do NOT take FMX UI Pack if interested, as recommanded. I runs fine, very fast (2 seconds for 58 pages on Windows). You can draw, print texts and pictures, embed fonts. Very great tool. It's here... In attachment, an example with pictures in png, drawings (the targets), and texts. tms-fnc-pdf-lib.pdf
-
Delphi 10.3 and supported version of Android
Dalija Prasnikar replied to Yaron's topic in Delphi IDE and APIs
There are two API levels in manifest (actually, there is another one, but not important) - minSdkVersion and targetSdkVesrion minSdkVersion marks minimum API required by application and it will not run on Android devices with API lower than specified targetSdkVersion marks highest supported API level by application - that means Android will not use any compatibility mode when running on devices with specified or lower API. If you run application on device with higher API level, OS will use compatibility mode for newly introduced API features. Tokyo 10.2.3 (and previous versions) by default had both API levels set to 14. Rio 10.3 changed that and minimum API level is now 19 and target is 26. That means devices with Android version lover that 19 will no longer be able to run applications built with Rio. Conclusion: Delphi application compiled with Rio can by default run on any device with API 19 or higher.