Ian Branch
Members-
Content Count
1352 -
Joined
-
Last visited
-
Days Won
3
Everything posted by Ian Branch
-
Hi Team, I have a TButton that does one thing, I want to capture a Ctrl-Click on that button so I can have it do some preprocessing before continuing. How can I do that please? Regards & TIA, Ian
-
Tks Thomas. Ian
-
To all, Over the years I have used this Forum a lot. It has allways been a source of information. Some great, enilightening, educating, some not so much. ;-) What has never failed, is to get an answer/help/advice when needed. I am a strong believer in the saying.. "There are no stupid questions, only stupid answers." So, to all of you who have helped and responded to User's questions, issues, etc. And in particular to those that have responed to my inane, sometimes ignorant, questions/issues. A very large THANK YOU! THANK YOU! THANK YOU! All very much appreciated. Regards, Ian P.S. I'm sure I have many more questions/issues to come. :-)
-
All DB components on a form lose their connection to their datasource..
Ian Branch posted a topic in General Help
Hi Team, Win 11, D11.3.1. I experienced this a while ago, pretty sure I asked the question here, but I don't recall ifthere was a resolution. Twice in the past week two different Apps have had their DB components lose their connection to their datasource. As in the Datasource entry in the components is empty. All of them. I have had to reconnect all the components to their datasource. Oh the pain!! It isn't just one datasource either. There are a couple of datasources involved that get lost. Has anybody else experienced this? Does anybody have any suggestions as to what might be causing it? Regards & TIA, Ian -
Hi Team, I want to turn it off full time. I can't find any way/where to do that. Can I? Regards & TIA, Ian
-
Hi Team, Do we know which version of Indy is supplied with D11.3? I need at least Indy 10.5.7 for an App. Regards & TIA, Ian
-
I am almost eady to put it on a par with D2007. 🙂 IMHO the best ever. Not perfect, but still the best.
-
Hi Team, I have a function definition of .. function ValidEmail(const EmailAddress: string; out ErrorMessage: string): Boolean; const EMAIL_REGEX = '^((?>[a-zA-Z\d!#$%&''*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])' + '[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)' + '(?>\.?[a-zA-Z\d!#$%&''*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x7f])' + '[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]' + '{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d))' + '{4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\' + '[\x01-\x7f])+)\])(?(angle)>)$'; var .... .... The requirement is two fold. 1. ErrorMessage is optional in the calling program. i.e. it may be just - if validemail('myemail@somewhere.com') then .... 2. Assign an error message to ErrorMessage if the construction of the email address is incorrect. if (not Result) and Assigned(ErrorMessage) then ErrorMessage := 'The following email addresses are invalid: ' + String.Join('; ', InvalidEmails.ToArray); My problem is that I get an 'Incompatible types' error message for the 'then' in the above. I don't understand why. If I have read the help correctly, Assigned(Errormessage) should return a true or false, depending if Errormessage has been 'called'.?? Can somebody enlighten me please? What do I need to do to meet my needs? Regards & TIA, Ian
-
Hi Remy, Great minds think alike. There is my mind.... I was laying in bed at 2am mulling the issue, as you do, when it occurred to me that that was what I needed to do. Regards & Tks, Ian
-
Mmmm. Makes "If not ValidEmail('khggh.jghfjgh.vbn') then ..." more complicated and I would still have to revist every call. Thanks for your thoughts. I guess I will have to vistit every call. Regards & Tks again, Ian
-
Nope.
-
But it still requires the parameter in the calling function.
-
How does one make a parameter such as this optional?
-
Hi p2k, OK on the errormessage/object aspect. Quite so. I use the basic routine in multiple locations/projects and it doesn't have the error message functionality. I was looking to do a Global replace of old for new. Then update the many calling instances at my leisure.
-
All DB components on a form lose their connection to their datasource..
Ian Branch replied to Ian Branch's topic in General Help
It can't hurt to ask... 🙂 https://quality.embarcadero.com/browse/RSP-41366?filter=-3 -
All DB components on a form lose their connection to their datasource..
Ian Branch replied to Ian Branch's topic in General Help
It could at least warn you and ask you if it should remove the links.... -
All DB components on a form lose their connection to their datasource..
Ian Branch replied to Ian Branch's topic in General Help
I do, but better I don't cause the issue to start with. -
All DB components on a form lose their connection to their datasource..
Ian Branch replied to Ian Branch's topic in General Help
That is most often the case. Open just the form to make a quick edit and save it. Perhaps I should stop that practice.. 😉 -
All DB components on a form lose their connection to their datasource..
Ian Branch replied to Ian Branch's topic in General Help
Tks P2k. I went to my Profile but couldn't find any search functionality. @Uwe Raabe said - "This can also happen when the missing DataSource is not located at the same form/frame as the DB components and the IDE fails to open the datamodule (or wherever this datasource resides) for whatever reasons. I had similar experiences with actions located in a datamodule. If by any chance that datamodule shares its name with one of the IDE internal ones (including those in 3rd party modules) that can be the cause of breaking the linkage." Question - If the Form was opened on its own, and not via the project, therefore the relevant datamodule is not present/loaded, would that cause the issue? Ian -
Hi Team, Win 11, D11.3.1. I have the following form create code.. procedure TChangesLogForm.FormCreate(Sender: TObject); begin // IndexOrd.ItemIndex := 0; // case JSDialog1.Execute of 100: ttChangesLog.SQL.Text := 'SELECT * from dbiworkflow.changeslog order by DateTime'; 200: ttChangesLog.SQL.Text := 'SELECT * from dbiarchive.achangeslog order by DateTime'; 300: begin TaskMessageDlg('Warning!', 'You have selected to view both databases.' + #13 + 'This will take some time to produce the view!' + #13 + 'Please be patient.', mtInformation, [mbOK], 0); ttChangesLog.SQL.Text := 'SELECT * FROM vAllChangesLog order by DateTime'; end; 400: // Stop creating and abort the form. end; // end; the '400:' selection is to Cancel the form and return to the calling form. How do I achieve this please? I tried 400: PostMessage(Handle, WM_CLOSE, 0, 0);, but that didn't work. 😞 Regards & TIA, Ian
-
P2k. Tks for the suggestion. I think I will quit while I am ahead. 🙂
-
My thanks to all. I have a working solution and a new methodology for future use. Ian
-
Cured it! I did this.. procedure TMainForm.actChangesLogExecute(Sender: TObject); begin // if IsFormOpen('ChangesLogForm') then Exit; // Screen.Cursor := crHourGlass; // try // var ChangesLogForm := TChangesLogForm.Create(Self); // ChangesLogForm.Show; // finally Screen.Cursor := crDefault; end; // end; No more spinning cursor.
-
Hi Team, Getting there.. I have the following calling code.. procedure TMainForm.actEmailsLogExecute(Sender: TObject); begin // if IsFormOpen('EmailsLogForm') then Exit; // Screen.Cursor := crHourGlass; // var EmailsLogForm := TEmailsLogForm.Create(Self); // EmailsLogForm.Show; // Screen.Cursor := crDefault; // end; And the following Create in the called form.. constructor TChangesLogForm.Create(AOwner: TComponent); // called before "FormCreate()" begin inherited; // var lCloseForm := False; // case JSDialog1.Execute of 100: ttChangesLog.SQL.Text := 'SELECT * from dbiworkflow.changeslog order by DateTime'; 200: begin TaskMessageDlg('Warning!', 'You have selected to view records from the Archive database.' + #13 + 'This will take some time to produce the view!' + #13 + 'Please be patient.', mtInformation, [mbOK], 0); ttChangesLog.SQL.Text := 'SELECT * from dbiarchive.achangeslog order by DateTime'; end; 300: begin TaskMessageDlg('Warning!', 'You have selected to view records from both databases.' + #13 + 'This will take some time to produce the view!' + #13 + 'Please be patient.', mtInformation, [mbOK], 0); ttChangesLog.SQL.Text := 'SELECT * FROM vAllChangesLog order by DateTime'; end; 400: lCloseForm := True; // end; // if lCloseForm then Abort; // end; The Abort works fine, I return to the calling form, however, I end up with a spinning cursor.. 😞 Thoughts/suggestions? Regards, Ian