-
Content Count
1963 -
Joined
-
Last visited
-
Days Won
26
Everything posted by Attila Kovacs
-
Double, default value
Attila Kovacs replied to Skrim's topic in Algorithms, Data Structures and Class Design
Note that there is also a System.SysUtils.TryStrToFloat() function, along with many other TryStrToXXX() functions, you may find them handy. -
ANN: HTMl Library 4.9 released. WebUI and more
Attila Kovacs replied to Alexander Sviridenkov's topic in Delphi Third-Party
😮 -
I have a VCL form that always gets corrupted when I save it: This is the only form where I have ever encountered this issue, and it always happens with the style property of a TCheckListBox. Has anyone ever seen something like this in real life? I'm on D12.1
-
Delphi 12.2 available for download
Attila Kovacs replied to pyscripter's topic in Delphi IDE and APIs
. -
Delphi 12.2 available for download
Attila Kovacs replied to pyscripter's topic in Delphi IDE and APIs
Is there a list somewhere? Os is it still secret? -
Switching off automatic Bookmarks?
Attila Kovacs replied to PeterPanettone's topic in MMX Code Explorer
-
Custom Managed Records and Default(T)
Attila Kovacs replied to rgdawson's topic in Algorithms, Data Structures and Class Design
Same here. I was so excited when I upgraded to 12, thinking there would finally be something amazing, but when I checked it out, bleh. I’d rather not. -
Btw. I used this app for the validation: https://www.xml-buddy.com/ You can batch-validate the xml's you generate against the schematrons with a console app.
-
I'm curious how long it will take before we have to rewrite all the E-crap in JSON.
-
Show executable size after successful build?
Attila Kovacs replied to PeterPanettone's topic in Delphi IDE and APIs
debug version is bloated anyway, who cares what size the executable has? switch to visual c++, they are already complaining if the exe is over 80kb 🙂 -
“Transitive” type redefinitions in interface section
Attila Kovacs replied to Dmitry Onoshko's topic in Algorithms, Data Structures and Class Design
I'd make MyTask -> MyTask.Common MyTask.Main.Implementation -> MyTask.Main but it's just my personal preferecne -
“Transitive” type redefinitions in interface section
Attila Kovacs replied to Dmitry Onoshko's topic in Algorithms, Data Structures and Class Design
Amen. -
“Transitive” type redefinitions in interface section
Attila Kovacs replied to Dmitry Onoshko's topic in Algorithms, Data Structures and Class Design
If MyTypes is used throughout the whole project, why would you bother it UnitB is using it too. Otherwise take a walk and restructure the whole thing. -
Form's OnCloseQuery event CanClose parameter
-
Use TImageList, ideally a descendant that can handle SVGs.
-
Yes, I'm using it actively. Don't expect rushed answers; the situation must be complicated, obviously. Otherwise, the components are mature and have been working well in production for years. Is your question technical?
-
Cross platform color picker and palette library
Attila Kovacs replied to Jim McKeeth's topic in I made this
you could add to the top of the color list: clipboard (only if a color code is in the clipboard) no color -
Delphi app using Access database very slow on network drive.
Attila Kovacs replied to Jean-Michel Gaudette's topic in Databases
check this https://www.w3schools.com/asp/prop_rs_cursorlocation.asp or use use a proper dbms https://www.microsoft.com/en-us/download/details.aspx?id=104781 -
Unicode NBSP(u00A0) No-Break Space character for 64-bit
Attila Kovacs replied to sp0987's topic in RTL and Delphi Object Pascal
-
Yesterday I had the feeling I'm missing this feature from the IDE, today I can't remember why, maybe I'll recall it later 🙂 And my rough implementation of the feature: Comments, patches, etc. are welcome. ( f.e. I'm completely ignoring the top and the bottom of the file, and other line endings as 0D 0A, also not sure about utf-8 in the code) Blocks are moving on the basis of the starting and ending line. This is intended. procedure TKeyboardBinding.BindKeyboard(const BindingServices: IOTAKeyBindingServices); begin BindingServices.AddKeyBinding([ShortCut(VK_UP, [ssAlt])], MoveLineOrBlockUp, nil); BindingServices.AddKeyBinding([ShortCut(VK_DOWN, [ssAlt])], MoveLineOrBlockDown, nil); end; procedure TKeyboardBinding.MoveLineOrBlock(ADirection: Integer; const Context: IOTAKeyContext; var BindingResult: TKeyBindingResult); var EditPosition: IOTAEditPosition; EditBlock: IOTAEditBlock; CurrentRow: Integer; CurrentRowEnd: Integer; BlockSize: Integer; IsAutoIndent: Boolean; CodeLine: string; sr, er: Integer; begin EditPosition := Context.EditBuffer.EditPosition; EditBlock := Context.EditBuffer.EditBlock; // Store original cursor row CurrentRow := EditPosition.Row; // Length of the selected block (0 means no block) BlockSize := EditBlock.Size; // Store AutoIndent property IsAutoIndent := Context.EditBuffer.BufferOptions.AutoIndent; // Turn off AutoIndent, if necessary if IsAutoIndent then Context.EditBuffer.BufferOptions.AutoIndent := False; if (EditPosition.Row = 1) and (ADirection = -1) then Exit; if (BlockSize = 0) then begin // Only a single line to move EditPosition.Save; if ADirection = 1 then EditPosition.Move(EditPosition.Row + ADirection, EditPosition.Column); // Move to end of current line EditPosition.MoveEOL; // Get the column position CurrentRowEnd := EditPosition.Column; // Move to beginning of current line EditPosition.MoveBOL; // Get the text of the current line, less the EOL marker CodeLine := EditPosition.Read(CurrentRowEnd + 1); if Ord(CodeLine[Length(CodeLine)]) <> $0A then Exit; EditPosition.Move(EditPosition.Row - 1, EditPosition.Column); // Move to end of current line EditPosition.MoveEOL; // Get the column position CurrentRowEnd := EditPosition.Column; // Move to beginning of current line EditPosition.MoveBOL; // Get the text of the current line, less the EOL marker CodeLine := CodeLine + EditPosition.Read(CurrentRowEnd + 1); if Ord(CodeLine[Length(CodeLine)]) <> $0A then Exit; EditPosition.Delete(Length(CodeLine) - 2); EditPosition.InsertText(CodeLine); // Move cursor to original position EditPosition.Restore; EditPosition.Restore; EditPosition.Move(EditPosition.Row + ADirection, EditPosition.Column); BindingResult := krHandled; end else begin // More than one line selected. Get block text sr := EditBlock.StartingRow; er := EditBlock.EndingRow; if (EditBlock.StartingColumn <> 1) or (EditBlock.EndingColumn <> 1) then begin EditPosition.Move(sr, 1); EditBlock.BeginBlock; EditPosition.Move(er + 1, 1); EditBlock.EndBlock; sr := EditBlock.StartingRow; er := EditBlock.EndingRow; end; CodeLine := EditBlock.Text; EditBlock.Delete; EditPosition.Move(EditPosition.Row + ADirection, 1); // Insert block text EditPosition.InsertText(CodeLine); EditPosition.Move(sr + ADirection, 1); EditBlock.BeginBlock; EditPosition.Move(er + ADirection, 1); EditBlock.EndBlock; BindingResult := krHandled; end; // Restore AutoIndent, if necessary if IsAutoIndent then Context.EditBuffer.BufferOptions.AutoIndent := True; BindingResult := krHandled; end; procedure TKeyboardBinding.MoveLineOrBlockDown(const Context: IOTAKeyContext; KeyCode: TShortCut; var BindingResult: TKeyBindingResult); begin MoveLineOrBlock(1, Context, BindingResult); end; procedure TKeyboardBinding.MoveLineOrBlockUp(const Context: IOTAKeyContext; KeyCode: TShortCut; var BindingResult: TKeyBindingResult); begin MoveLineOrBlock(-1, Context, BindingResult); end;
-
That works only if [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem] "LongPathsEnabled"=dword:00000001 is set
-
2048 Just for the record. Nothing to do with your question. For file I/O, the "\\?\" prefix to a path string tells the Windows APIs to disable all string parsing and to send the string that follows it straight to the file system. For example, if the file system supports large paths and file names, you can exceed the MAX_PATH limits that are otherwise enforced by the Windows APIs. For more information about the normal maximum path limitation, see the previous section Maximum Path Length Limitation. Because it turns off automatic expansion of the path string, the "\\?\" prefix also allows the use of ".." and "." in the path names, which can be useful if you are attempting to perform operations on a file with these otherwise reserved relative path specifiers as part of the fully qualified path. Many but not all file I/O APIs support "\\?\"; you should look at the reference topic for each API to be sure. Note that Unicode APIs should be used to make sure the "\\?\" prefix allows you to exceed the MAX_PATH.
-
That would be cool.
-
Delphi Clipboard - WM_CLIPBOARDUPDATE (sent, but no changes)
Attila Kovacs replied to PawelPepe's topic in VCL
MCVE or didn't happen -
if FindFirst('C:\*', faAnyFile, searchResult)=0 then begin yadda yadda yadda: if FindFirst(dirName, faAnyFile, searchResult)=0 then begin yadda yadda yadda, yadda yadda?