You know how in Firefox, if something happens that requires your attention but isn't immediately urgent enough to require a modal dialog, it will drop down a little strip at the top of the tab with a question on it? I'd like to be able to put functionality like that in a Delphi app, but I don't know if there's a component for that. Does anyone know of one?
I have made one using a TPanel and few lines of code. But you can try something like TMS Adv Panel http://www.tmssoftware.com/site/advpanel.asp.
Related
Is there any way to embed a TPopupMenu directly on a form, as if it was a panel always open? or maybe just the TMenuItems.
No, it is not possible to embed a menu on a form. The reason is partly that a menu isn't an ordinary window that you can easily manipulate.
So you need to find a different solution. And there are many options you can chose from:
Using a TToolBar:
It doesn't look particularly modern and out of the box you don't get much control over the appearance, though. Also, I don't know exactly how robust this solution is. I stopped using toolbars many years ago.
Using a TCheckListBox:
In this case, I'd recommend you to create a subclass TCheckListBoxEx which toggles an item if you double-click its caption.
Creating a custom control:
This is what I'd do if it is about a central GUI in an important application, because this way you get full control over the appearance and behaviour and can make it really robust. I have done a modern such menu at work, but currently I am at home so I cannot show you it. Here, however, is a menu I made more than ten years ago for a hobby project:
If you don't need the menu to be attached to the form like a control, but only need it not to close when you select an item in it, there are (hacky) ways to achieve that. But that is a different Q.
For the life of me, i can't seem to figure out how to delete primitive or control elements from a style with in the style designer of Delphi. What am I missing? I have tried right clicking everything i could find and no option surfaces. I tried looking for a panel that isn't enabled. Can't seem to find one. As of now, I have to edit the actual text and reload it, in order to delete a style element.
Delphi XE6
Delphi 10.1 Berlin
EDIT UPDATE:
How do I get this window to appear in either IDE?
EDIT UPDATE:
Looks like there is a very small button on top left of structure pane that does the trick. I will leave question open for someone to answer with any other way. If no one can, Ill post the answer and accept it.
To delete a style element (tested on Delphi 10.1 Berlin)
Right-Click the element in the Structure view to get a popup menu.
Select Edit - Delete
Or use the button (doc with red X) immediately above the structure tree.
Thanks to John, I can confirm that in XE4 .. XE7 the popup menu doesn't have the Edit menu, so the only means left is the delete button, mentioned above.
The third image (in your edit) is not familiar. Where did you get the image? Perhaps a third party style editor. Possibly not intended to be incorporated in the IDE.
I'm working on a mobile application where the user needs to login.
The server is returning me if the e-mail is invalid, or subdomain or password and I want to focus the TEdit that has the error. Focus is easy but I would also like to mark the edit as invalid like many web applications do.
What is the best way to do this is a consistent way so it will look correct on both Android as iOS. Is something like this built-in? I'm using Delphi 10.1
Loki's suggestion is a possible solution.
A solution which takes advantage of FMX features would be to use a TGlowEffect for the red frame around the TEdit and then use a TPopup to create the hint.
the style it's just a nightmare in 99% of the case, so i strongly suggest to not touch it. i will instead put a Trectangle as the background of the Tedit, put the Tedit as Transparent (you already have this style ready in the stylelookup in the object inspector), and then simply set the stroke.color of the trectangle.
i m working also right now on a 100% native Tedit on ios/android/windows i guess i will finish this code in around 1 week.
I have a lot of files to keep open, and the current single line of tabs is just difficult. I see that GExperts and CNPack does not have that (unless I missed that).
Is there any trick to achieve that, or any other suggestion that I could have more tabs visible?
The TIDEGradientTabSet (if it's still used in modern Delphi) doesn't support multiline view, so the only option for those IDE experts could be making own tab set control hiding the original one.
Alternatives are:
On the far right of the tabs is a small down arrow. Press that, and you'll see a list of all the files that are open in the editor;
Pressing Ctrl+B will open up a dialog to select a tab;
TMS has a free tool AltTab but it did not get update for while. That was exactly what was needed for Delphi IDE;
i have a flow panel that i'm adding extra items to it at runtime based on whether they have chosen to show all the items. that's all works fine; the expansion is controlled by a toolbar button.
the trouble is we'd like the user to be able to move his mouse over the "+" sign to expand the section.
initially i looked at TSpeedButton (OnMouseEnter) but even when it's "Flat", the focus rectangle still shows and so the glyph isn't centered. the main problem with this solution is it's appearance.
then i looked at making a descendant of TImage. that's a bit "unconventional" but it'd work. in OnMouseEnter or OnClick, it'd toggle an internal boolean "Expanded" flag and then load the appropriate picture from a resource. i have a dislike for unconventional solutions like that.
i need to add it to a few different screens so it's probably prudent for me to have/build a component for this. i have JVCL but i don't see anything suitable offhand.
thank you for your comments/help!
I always liked the approach used by the ModelMaker Code Explorer.
For example, when you're adding a new method, some rarely-used stuff is displayed collapsed ('Options and Directives' in the image below).
(source: 17slon.com)
When you hover over the text, you notice that it's actually a flat button. (Except that it's not - I believe Gerrit does some custom painting magic here).
(source: 17slon.com)
When you click this button, a panel appears. Button is still there, but with a new image. You can click it to close the panel.
(source: 17slon.com)
The state of this toggle button is preserved between sessions. IOW, even if you restart the Delphi, next tima you invoke 'Add Method', the 'Options and Directives' panel will appear exactly as you left it the last time.
i have a dislike for unconventional solutions like that.
Over the past few years, I have grown a bit suspicious of unconventional UI solutions — which is what you seem to be creating here. Why not just use a button that the user actually has to click? That seems to be much more common in the software I use, be it MS Office or programming utilities. Also, I'd make the button somewhat larger: in the screenshot, it really seems like a tiny little thing you have to target with your mouse cursor. Oh well, and if I'm bugging you with advise you haven't asked for anyway, why not give it ">>" as a caption instead of "+"? And if you'd give it a textual caption with a mnemonic as well, it'd actually be keyboard accessible. All this should make your UI better and more intuitive. I guess.
I do apologize for not answering your question, but I hope you'll spend 2 minutes thinking whether your users would actually prefer this solution :-)
Good luck!
Actually, I think that using a TImage in this situation is pretty conventional. I have seen many people suggest using the TImage, when either the TButton, or any of its associates did not have the right amount of control for whatever the developer was trying to do.
Have you tried a TBitBtn? I think when you get rid of the text it centers whatever image you have associated with it. I just checked in Delphi 6, all I have installed on this machine, and it had the MouseMove event.