-
Content Count
47 -
Joined
-
Last visited
-
Days Won
1
Alberto Fornés last won the day on February 26 2023
Alberto Fornés had the most liked content!
Community Reputation
15 GoodRecent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
-
Good Job¡, and very nice scroll movement. I like it¡
-
Programs with embedded P4D only run on my own PC, not on any other
Alberto Fornés replied to JGMS's topic in Python4Delphi
I don't know about Python, but if I understand correctly : is it possible to make an isolated installation of Python including libraries like matplotlib, pandas, etc and using it from Delphi?. Is it needed any user installation?. Thanks -
Thanks Peter, I will investigate in that direction. Do you have experience about the speed performance to calculate widths and drawing character individually?
-
I am rewriting an editor where I am looking to display some text on the screen, to which I can zoom and therefore increase or decrease its size, and ensure that what I display on the screen corresponds to what I get when printing what has been drawn. From what I've been reading, GDI doesn't always respect these relationships in terms of text sizes, although when printing it can display the result well. As I show in tests I've done where I want to draw a 10mm high text, when I double the height to 20mm, the width of the text is not equal to double, as seen in the image. Is there a way to get the ratio to hold and equal to what we get in print, thanks. I use this code to draw the text: procedure TForm3.Button4Click(Sender: TObject); var h: integer; TextOutSize: TSize; NewFont, OldFont: HFont; // holds the old and new fonts begin bmp:= TBitmap.Create(Image1.Width,Image1.Height); bmp.PixelFormat:= pf32bit; try bmp.Canvas.Brush.Color:= clWhite; bmp.Canvas.Brush.Style:= bsSolid; bmp.Canvas.FillRect(Rect(0,0,Image1.Width,Image1.Height)); bmp.Canvas.Pen.Color:= clSilver; d:= 0; h:= 0; while d<= Image1.Width do begin if (h = 5) then begin bmp.Canvas.Pen.Color:= clGray; h:= 0; end else bmp.Canvas.Pen.Color:= clSilver; bmp.Canvas.MoveTo(d,0); bmp.Canvas.LineTo(d,Image1.Height); Inc(d,10); Inc(h); end; d:= 0; h:= 0; while d<= Image1.Height do begin if (h = 5) then begin bmp.Canvas.Pen.Color:= clGray; h:= 0; end else bmp.Canvas.Pen.Color:= clSilver; bmp.Canvas.MoveTo(0,d); bmp.Canvas.LineTo(Image1.Width,d); Inc(d,10); Inc(h); end; bmp.Canvas.Brush.Style:= bsClear; bmp.Canvas.Font.Color:= clBlack; SetMapMode(bmp.Canvas.Handle,MM_ISOTROPIC); SetViewportExtEx(bmp.Canvas.Handle,Image1.Width,Image1.Height,0); SetWindowExtEx(bmp.Canvas.Handle,Round(Image1.Width * 25.4 / GetDeviceCaps(bmp.Canvas.Handle, LOGPIXELSX)),Round(Image1.Height * 25.4 / GetDeviceCaps(bmp.Canvas.Handle, LOGPIXELSY)),0); // Create a 10 mm font NewFont:= CreateFont(10, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH or FF_DONTCARE, 'Arial'); OldFont := SelectObject(bmp.Canvas.Handle, NewFont); bmp.Canvas.Pen.Width:= 0; bmp.Canvas.Pen.Color:= clBlue; TextOut(bmp.Canvas.Handle,0,10,txt, Length(txt)); MoveToEx(bmp.Canvas.Handle,0,10,nil); LineTo(bmp.Canvas.Handle,230,10); MoveToEx(bmp.Canvas.Handle,0,20,nil); LineTo(bmp.Canvas.Handle,230,20); GetTextExtentPoint32(bmp.Canvas.Handle, PWideChar(txt), Length(txt), TextOutSize); TextOut(bmp.Canvas.Handle,230,10,PWideChar('Width: ' + TextOutSize.cx.ToString), Length('Width: ' + TextOutSize.cx.ToString)); SelectObject(bmp.Canvas.Handle, OldFont); DeleteObject(NewFont); // Create a 20 mm font NewFont:= CreateFont(20, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, DEFAULT_PITCH or FF_DONTCARE, 'Arial'); OldFont := SelectObject(bmp.Canvas.Handle, NewFont); bmp.Canvas.Pen.Width:= 0; bmp.Canvas.Pen.Color:= clBlue; TextOut(bmp.Canvas.Handle,0,30,txt, Length(txt)); MoveToEx(bmp.Canvas.Handle,0,30,nil); LineTo(bmp.Canvas.Handle,230,30); MoveToEx(bmp.Canvas.Handle,0,50,nil); LineTo(bmp.Canvas.Handle,230,50); GetTextExtentPoint32(bmp.Canvas.Handle, PWideChar(txt), Length(txt), TextOutSize); TextOut(bmp.Canvas.Handle,230,30,PWideChar('Width: ' + TextOutSize.cx.ToString), Length('Width: ' + TextOutSize.cx.ToString)); SelectObject(bmp.Canvas.Handle, OldFont); DeleteObject(NewFont); Image1.Picture.Assign(bmp); finally FreeAndNil(bmp); end; end;
-
Hello, some time ago I thought of making a program that could be used by young programmers and students who need to write a project document and show them the possibilities of programs they could develop with Delphi. I have recently published the program and it is called TICdoc. The program also has a diagram editor and a code editor for saving code snippets that can be tagged for further searches. A project document is generated by uniting various types of sections (functional requirements, table of contents, Gantt charts, use cases, etc). Some of these sections have their own editor and the editable sections have a text editor (html) to which styles (css) can be applied. The program uses a SQLite database. It is free and does not have any usage restrictions. It is signed with an OV certificate, which I know shows some warning when downloading it in the browser. You can see it at TICdoc , there is also a youtube channel (currently only in spanish) where you can watch short videos of program features Small task editor at intro page: Code editor to save snippets (SynEdit component): Diagram editor (TMS Diagram Studio), you can insert this diagrams into project document: Document editor (HTML component library): In the editable section you can insert images, formulas, tables, data-bound tables, editor diagrams or PlantUML diagrams: By clicking on the active language in the lower bar we can change the language (it is in a json file, so it can be translated into other languages, it is currently in Spanish and English)
-
Yes, rapid development is not always the best solution for big projects.
-
Is asked ChatGPT: What is Internet Component Suite for Delphi?
Alberto Fornés replied to FPiette's topic in ICS - Internet Component Suite
If ChatGPT do taht, we can say that it is the closest thing to human intelligence that we have seen so far. -
Send message frmo VCL app to another machine in lan
Alberto Fornés replied to mikak's topic in General Help
Maybe Tethering also can be used in that scenario. -
Hello, and thanks for your reply. The python DLL 3.11 can be loaded because I can run basic scripts, but when try to execute scripts that imports modules like matplotlib, numpy, pandas, etc raises that errors. I confirm that 3.10.9 runs ok without that errors.
-
Hello, I have started working with Python4Delphi. I have installed Python 11, and in environment variables is set the path to the python exe folder and the scripts folder. I have installed with pip the modules of the examples of the webminar II of the tutorials (python4delphi/Tutorials/Webinar II at master · pyscripter/python4delphi · GitHub). I can't get to run the scripts without getting errors like: "no module named _ctypes", it's a required module for Pandas. I have also got this error with the unicodedata module, I installed with pip unicodedata2, but it doesn't work either. Any suggestions for things to check?
-
I have an application developed with Delphi 10.4 where I use the Diamond vcl style. The app shows up fine, but when I run the same code with Delphi Alexandria it shows a strange result. The main window when the application starts (the same with Delphi 10.4 and Delpgi Alexandria): If I open a second form created by code. The result with Delphi 10.4 is this: But when open with Delphi Alexandria it shows wrong rendering: As you can see the border icons have disappeared, after closing the window, the main screen is also displayed wrong with Alexandria: Any suggestions of things to check?, thanks
-
Really is that there was no reason not to use it, finally it is what I have done and as Anders suggested it solves the problem. Thanks In this case the date did not work because I need also assign a code from that number. Thanks Anders, now works without repetitions using a generator.
-
Hello, I have a Firebird table (ORDEN) where I need to have a unique numbering in a field depending on the date. In the before insert of the table I define a trigger that basically does this: SELECT MAX(NUMBER) FROM ORDEN WHERE FECHAINT >= :FECHA INTO :NUM; IF (:NUM IS NULL) THEN NUM = 0; NUM = :NUM + 1; NEW.NUMBER = :NUM; Sometimes numbers are repeated in this table, so I deduce that something is wrong in the handling of transactions to cause this error. I work with Firedac, what are the properties of the connection or the write and read transactions supposed to be to avoid this problem?, thanks
-
delphimvcframework global variable
Alberto Fornés replied to borni69's topic in Network, Cloud and Web
No , this datamodule should be created at start, and always alive, you reference it from your controller (add datamodule unit to controller), and access it through TMultiReadExclusiveWriteSynchronizer. -
delphimvcframework global variable
Alberto Fornés replied to borni69's topic in Network, Cloud and Web
Yes, you can use this in delphimvcframework. I declare such dictionary in the service unit (it's a windows service), or you can put it in a datamodule and create it at program start and destroy at the end. Webmodule can be created and destroyed several times during program execution.