

PiedSoftware
Members-
Content Count
64 -
Joined
-
Last visited
Everything posted by PiedSoftware
-
Hi It seems like a natural thing to want: is there a way to get all the datasouces that have dataset = ADataset? Other than looping through the components property of the owner of course. I was looking at the code of TDataset. It even has a private member variable FDatasources: TList<TDatasource>, but it is not exposed. So close! TIA Mark
-
How can you list all the datasources linked to a dataset?
PiedSoftware replied to PiedSoftware's topic in VCL
Done. https://embt.atlassian.net/servicedesk/customer/portal/1/RSS-3336 -
How can you list all the datasources linked to a dataset?
PiedSoftware replied to PiedSoftware's topic in VCL
I don't know if it has the right meaning though. And since in Delphi there can only be one helper, I would avoid that approach in case someone else had a better use for it. -
Hi How can I get a list of all the data-aware controls whose datasource is one that is specified? I have googled and even consulted Claude, without success, but I thought there was a way. Any ideas?
-
Ho to list all data-aware controls attached to a datasource
PiedSoftware replied to PiedSoftware's topic in VCL
Here is the code when reduced in size because it works: type TLocalDataSource = class(TDataSource); // Exposes protected property DataLinks function GetDataAwareList(ds: TDataSource): TArray<TControl>; var lds: TLocalDataSource absolute ds; link: TDataLink; fldLink: TFieldDataLink absolute link; begin result := []; for link in lds.DataLinks do begin // See, I told you if (link is TFieldDataLink) and (fldLink.Control is TControl) then begin result := result + [TControl(fldLink.Control)]; end; end; end{ GetDataAwareList}; -
Ho to list all data-aware controls attached to a datasource
PiedSoftware replied to PiedSoftware's topic in VCL
Thanks for the thought, Uwe. I should have said I'm using Delphi 10.4. I tried this function: uses Vcl.DBCtrls, System.Generics.Collections, System.Classes; type TLocalDataSource = class(TDataSource); function GetDataAwareList(ds: TDataSource): TArray<TControl>; var lds: TLocalDataSource absolute ds; links: TList<TDataLink>; link: TDataLink; fldLink: TFieldDataLink; cmp: TComponent; begin result := []; links := lds.DataLinks; for link in links do begin if link is TFieldDataLink then begin fldLink := link as TFieldDataLink; cmp := fldLink.Control; if cmp is TControl then begin result := result + [TControl(cmp)]; end; end; end; end{ GetDataAwareList}; It keeps seizing in the middle there, no particular line, sometimes reading fldlink.Control, sometimes when adding it to the array. I've been hacking at that for a while, stretching it out with more local variables to make it finer grained, but it has never worked for me. I'll just have to go ahead with code that is aware of what controls it needs to manage. EDIT: It seems that it does actually work. It was the debugger that was freezing. When I don't single step through it, it works fine. -
I just used claude for a while. I asked it to write a function to return the number of bytes in a string. It generated code that looked right, but I didn't check the unicode specs to confirm. But it had an error. It use a for i := loop but in the loop had inc(i) which of course does not compile. But I just told it that that wouldn't work and it replaced it with a while loop. Also it responded well to my style specifications, like having all the reserved words in lower case. I haven't tried others. Maybe DeepLink will be worth a look. I hope that helps.
-
Delphi uses OneDrive. How can I make it use my local storage?
PiedSoftware posted a topic in Delphi IDE and APIs
I keep getting messages from OneDrive that it is close to full (4.5GB of 5GB), with of course an offer for me to purchase more. I went looking at at the folder and found that most of it (4.53 GB) is in C:\Users\Mark\OneDrive\Documents\Embarcadero\Studio Is there some process for making Delphi use some other folder for that and getting away from OneDrive? I'm concerned about the risk of corrupting my Delphi installation. Regards Mark -
Delphi uses OneDrive. How can I make it use my local storage?
PiedSoftware replied to PiedSoftware's topic in Delphi IDE and APIs
I meant the only option for disconnecting that OneDrive offered. It didn't let me disconnect some directories by not others. -
Delphi uses OneDrive. How can I make it use my local storage?
PiedSoftware replied to PiedSoftware's topic in Delphi IDE and APIs
Thanks for clarifying that. I surfed around and disconnected OneDrive entirely. That was the only option. -
Type inference in assignment but not comparison??
PiedSoftware posted a topic in RTL and Delphi Object Pascal
I like the way Delphi is getting better at arrays, but there is still a gap in the compiler that let me down. I tried this code in 12.2 to highlight the issue. const nostrings: tarray<string> = []; procedure TForm1.FormShow(Sender: TObject); begin var a: tarray<string>; a := []; if a = nostrings then say('nostrings'); if a = [] then say('it''s blank'); end; procedure TForm1.say(const s: string); begin ListBox1.Items.Add(s); end; This refuses to compile at the line if a = [] then with the error "Incompatible types". But it has no problem with the assignment, so it looks like the programmers have just put this in the "do eventually" basket. Does anyone have any insights into this? --- Mark -
How to refer to a single value from an enumerated type declared in a set type?
PiedSoftware posted a topic in RTL and Delphi Object Pascal
In Delphi in System.Class we have this declaration: TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble, ssTouch, ssPen, ssCommand, ssHorizontal); Given that declaration, how can I declare a variable that will be just one of those values?- 7 replies
-
- pascal
- enumerate type
-
(and 1 more)
Tagged with:
-
Type inference in assignment but not comparison??
PiedSoftware replied to PiedSoftware's topic in RTL and Delphi Object Pascal
Thanks for thinking about it Dave. But ... It already knows the type of a to be an array, so a set interpretation is ruled out. And for arrays, nil and [] mean the same thing. That is why the assignment operator works. So, I think it is reasonable to expect the compile to test for equality with the same syntax. -
Yes, definitely. XCode does that, and you need it.
-
Yes, it would be much better if sets has a different punctuation from arrays. Sets came first though, and they got [ and ] on a first come first choose basis. If Delphi could yield { and } from comments and give it to arrays or sets, life would be better.
-
Delphi should let me use a const array reference as a constant
PiedSoftware posted a topic in RTL and Delphi Object Pascal
type TCodeStructure = record StartTkn: string; EndTkn: string; SubTkns: array of string; end; type TIfTkns = (itElse, itElsif); const elseTkn = '#else'; elsifTkn = '#elseif'; IfTkns: array[TIfTkns] of string = (elseTkn, elsifTkn); IfStruct: TCodeStructure = (StartTkn: '#if'; EndTkn: '#endif'; SubTkns: [IfTkns[itElse], IfTkns[itElsif]]); I wrote this code and got the error "E2026 Constant expression expected" on the last line. I also tried SubTkns: IfTkns); When I changed it to SubTkns: [elseTkn, elsifTkn]); it compiled happily. and that gave me E2010 Incompatible types: 'Dynamic array' and 'Array'. To me it seems that Delphi should allow the first thing I tried - referencing a const array via constant indices to specify a constant. There is no reason to disallow that sort of thing. Ideally even the second attempt should be reasonable. I have Delphi 10.4. -
Delphi should let me use a const array reference as a constant
PiedSoftware replied to PiedSoftware's topic in RTL and Delphi Object Pascal
The way Swift works is that you can declare value with either the keyword let or the keyword var. If you use let the value cannot be changed. But the expression you assign to a let value can be anything available at that point. -
Delphi should let me use a const array reference as a constant
PiedSoftware replied to PiedSoftware's topic in RTL and Delphi Object Pascal
I guess I am a bit spoiled playing with Swift. It lets you assign any expression to a constant, compile time or run time. -
Delphi should let me use a const array reference as a constant
PiedSoftware replied to PiedSoftware's topic in RTL and Delphi Object Pascal
Yes, David, I agree. I would like them to fill that out: everything that is logically able to be evaluated at compile time should be assignable to a constant. -
Opening form takes 1 minute in debugger, 2.5 s without
PiedSoftware posted a topic in Delphi IDE and APIs
Hi I have been trying to work out what is going on with one of my forms. Just opening it, which has only a small amount of DB activity, was taking nearly a minute in the debugger, once it was about 35s. But when I run it without the debugger it is less than 3 seconds. There is no obvious bottlenecks in Task Manager. I have 8 GB of RAM. Does this sound familiar to anyone? Does anyone have a possible solution? Regards Mark -
Opening form takes 1 minute in debugger, 2.5 s without
PiedSoftware replied to PiedSoftware's topic in Delphi IDE and APIs
I went to Component | Install Packages and unchecked "Embarcadero LiveBindings Components" and saved, but when I closed and reopened Delphi, it was back on again. D'oh! I'm concerned the maybe a library is using it. How can I work that out? Should I remove it? -
Opening form takes 1 minute in debugger, 2.5 s without
PiedSoftware replied to PiedSoftware's topic in Delphi IDE and APIs
Thank. What I am comparing are the 2 functions from the Delphi Run menu: Run (f9) and Run without debugging (shift-ctrl-f9) -
Opening form takes 1 minute in debugger, 2.5 s without
PiedSoftware replied to PiedSoftware's topic in Delphi IDE and APIs
I don't think we have that package in the app at all. We certainly haven't coded that way. -
Opening form takes 1 minute in debugger, 2.5 s without
PiedSoftware replied to PiedSoftware's topic in Delphi IDE and APIs
Delphi 10.4 MySQL, but I don't think that is the issue. I probably shouldn't have mentioned it. It was my first thought, I put timings in the code. The time is just the form getting created, with no database activity. It looks fine when it has loaded Yes, I know it's pretty diffuse. I haven't started pulling my hair out yet. -
Delphi has stopping on break points and exceptions
PiedSoftware posted a topic in Delphi IDE and APIs
Hi I have a break point, but when I run the procedure it is in the code is going right past it and putting up a message a few lines down. Also, I had a bug where the code was throwing an exception, the exception dialog would come up, but the debugger didn't stop at the relevant line. I have been googling and poking around in the settings but nothing has shown up that would make it stop at the line. I have deleted and recreated the break point, rebooted my machine, and it looks as if Delphi is broken, but I hope not! This is Delphi 10.4, building for windows32.