Monday, 31 October 2016
Solution to Delphi IDE Freezing Problem
Over the last few years I've been using Delphi XE, and on quite a few occasions the IDE can just freeze for what seems to be no reason. It does not appear to be an issue with small projects, but mainly larger projects and might relate to code insight and how I have it configured. When this problem occurred I use to 'End Task' in task manager, which meant potentially losing some work, but the best solution for when this happens to to find the directory that contains all the 'dcu' files and delete them.
Tuesday, 25 October 2016
ADO Stored Procedure Blank Record Issue Fixed
I recently had an issue where I had an ADO stored procedure (TADOStoredProc) that returned a single record from a SQL Server database and the first time it was open it worked fine, however the second time it appeared to return a blank record. After some investigation it appeared the record count was 1, but the recno value was -1.
It appears that when you 'open' the stored procedure it is not guaranteed to position the record pointer on the first record. The solution is to simply call 'first' just after calling 'open'.
It appears that when you 'open' the stored procedure it is not guaranteed to position the record pointer on the first record. The solution is to simply call 'first' just after calling 'open'.
Wednesday, 28 September 2016
TCategoryPanel refresh issue solved
I have a form with a TCategoryPanelGroup on it with several TCategoryPanels, on one of the category panels is a combox and when the user changes a selected value in the combobox it changes a label caption on the same category panel.
One issue I have had is that when I change the caption of the label it does not refresh correctly and it looks like the caption overwrites the previous caption. I tried various refresh, repaint and invalidates on the label, category panel and category panel group, but nothing worked. The only way I've found to solve the issue is to set the 'DoubleBuffered' property of the form to true.
One issue I have had is that when I change the caption of the label it does not refresh correctly and it looks like the caption overwrites the previous caption. I tried various refresh, repaint and invalidates on the label, category panel and category panel group, but nothing worked. The only way I've found to solve the issue is to set the 'DoubleBuffered' property of the form to true.
Labels:
DoubleBuffered,
issue,
Solved,
TCategoryPanelGroup,
TCategoryPanels
Friday, 2 September 2016
Delphi Vs Visual Studio
This is a comparison between developing software in Delphi XE+ vs Visual Studio 2015 (C#). I’ve decided not to go to in-depth with regards to syntax or run time dependencies of executables. I have experience in both although I have mainly developed web service and WCF services in C#, and mainly developed desktop applications in Delph, so that might affect some of my opinions.
Delphi Pros
- Quick and easy to develop desktop applications.
- I prefer the form designer, because I find it easier to use.
- Quick to compile projects.
- I like the code structure of interface and implementation in the same file.
- You can develop mobile apps.
Delphi Cons
- Code insight is slow and could be significantly improved.
- Some areas of the IDE look dated and it needs investment to keep it up to date with its competitors.
- Find declaration does not always work, finding the function or procedure is more time consuming than Visual Studio.
- Hard to employ developers as there are not many about.
- Code insight is slow to update, for example add a new property to a class and sometimes you need to compile to make that property available for code insight.
- Unit testing using DUnit feels old and there has been little development of it over the years.
Visual Studio Pros
- IDE has a more modern interface, like the option for a dark color theme.
- Code IntelliSense is great, and I like the ‘potential fixes’ option which is very useful for adding directive or assembly reference.
- Unit testing is easy and integrated into the IDE, making it easy to run tests while you are developing.
- Debugging services is easier than when I have developed services in Delphi, this might have changed recently in later versions of Delphi.
- Peek definition is a nice feature.
Visual Studio Cons
- Slow to start-up.
- Sometimes freezes and it is best just to wait.
Tuesday, 21 June 2016
Delphi error XML document must have a top level element. line 0
I have a Delphi application written in XE that consumes a WCF service written in C#, I have been receiving the following error message with one of the methods
XML document must have a top level element. line 0
I managed to fix the issue by making the method in the WCF Service return a value (boolean) if successful. It is possible Delphi does not like WCF Service methods that are one way ([OperationContract(IsOneWay = true)]).
XML document must have a top level element. line 0
I managed to fix the issue by making the method in the WCF Service return a value (boolean) if successful. It is possible Delphi does not like WCF Service methods that are one way ([OperationContract(IsOneWay = true)]).
Sunday, 6 September 2015
Slow code insight - How to improve
Over the past couple of weeks I've noticed my code insight has gone slow. It seemed to happen after about 10 minutes of using Delphi, and got slower and slower to a point even typing in a string took over 5 seconds per character. The following reasons could have been the cause for this:
I am still looking at how to improve the situation.
- Something in Windows after an update is causing the issue. I believe this to be highly unlikely because all my other software works fine.
- The problem seemed to coincide with installing the latest version of Visual Studio Professional (2015). This again seems unlikely.
- Something specific to my current project is causing the problem. I think this is the most likely issue, other smaller projects work fine.
I am still looking at how to improve the situation.
Labels:
Code insight,
error insight,
how to,
improve,
performance,
slow
Sunday, 19 July 2015
How to draw an arrow head
I've worked on a few developments that require graphical input form users like CAD, flow control and diagram applications. Here is a snippet of code that draws an arrow head to a line.This is an example and in real code you might want to pass the arrow head length and width in as parameters.
procedure TMainForm.DrawArrowHead(const x1, y1, x2, y2: integer;
Canvas: TCanvas);
var
HeadLength : real;
HeadWidth : real;
xbase : Integer;
xLineDelta : Integer;
xLineUnitDelta : Double;
xNormalDelta : Integer;
xNormalUnitDelta : Double;
ybase : Integer;
yLineDelta : Integer;
yLineUnitDelta : Double;
yNormalDelta : Integer;
yNormalUnitDelta : Double;
OrigBrushColor : TColor;
begin
OrigBrushColor := Canvas.Brush.Color;
Canvas.Brush.Color := clBlack;
xLineDelta := x2 - x1;
yLineDelta := y2 - y1;
xLineUnitDelta := xLineDelta / SQRT( SQR(xLineDelta) + SQR(yLineDelta));
yLineUnitDelta := yLineDelta / SQRT( SQR(xLineDelta) + SQR(yLineDelta));
// (xBase,yBase) is were the arrow line is perpendicular to base triangle.
HeadLength := 12;
HeadWidth := 2;
xBase := x2 - ROUND(HeadLength * xLineUnitDelta);
yBase := y2 - ROUND(HeadLength * yLineUnitDelta);
xNormalDelta := yLineDelta;
yNormalDelta := -xLineDelta;
xNormalUnitDelta := xNormalDelta / SQRT( SQR(xNormalDelta) + SQR(yNormalDelta));
yNormalUnitDelta := yNormalDelta / SQRT( SQR(xNormalDelta) + SQR(yNormalDelta));
//Draw the arrow tip
Canvas.Polygon([Point(x2,y2),
Point(xBase + Round(HeadWidth*xNormalUnitDelta),
yBase + ROUND(HeadWidth*yNormalUnitDelta)),
Point(xBase - ROUND(HeadWidth*xNormalUnitDelta),
yBase - ROUND(HeadWidth*yNormalUnitDelta)) ]);
Canvas.Brush.Color := OrigBrushCOlor;
end;
Subscribe to:
Posts (Atom)