Win32 API Combo-box issue - winapi

I have a combo-box within my window; and I'm capable of adding elements to the combo-box flawlessly however when I attempt to remove one or all of the items, no items are removed. According to Spy++ the message WM_DELETEITEM sends however the combo-box is not receiving the message.

You don't send WM_DELETEITEM to delete the item, it gets sent back to you once the control has finished deleting the item. Use CB_DELETESTRING instead.

Related

Hiding Recipients in a qbo3 Message/Search panel

When using qbo3's Message/Search panel in a landing page to announce system changes to all users, every user that has acknowledged the message is appearing underneath the message, like this:
How can I disable the rendering of recipients, as this list will get very long?
When rendering a Message/Search panel, you may specify which behaviors you want displayed. In this case, the key is to omit the Recipient behaviors, such as:
Message/Search?Behaviors=Selectable ParentLabel Labels TabLauncher MessageAttachments Unread
For a report landing page, this API call is typically defined in the Search Panel field:
A quick recap of the behaviors listed here:
Behavior
Description
Selectable
Enable multi-selection of rows by clicking on a row, and then shift-clicking on a later row to select all rows between the two selected.
ParentLabel
If a Message is bound to a parent object, execute an API call to get the friendly label of the parent object.
Lables
Enable display of any labels each Message is tagged with.
TabLauncher
Enable popping out of the Message/Summary into a panel to the right of the Message/Search panel.
MessgeAttachments
Display a link to any attachments associated with each messages.
Unread
Marks any unread message with a css style (defaults to messageunread).

Angular Material md-select load options in async way

I need to load select's options asynchronously (
through a service), using the Angular Material md-select component.
Actually, I use a click event to load data. It works but I need to click the select twice to show the options. That it's a problem.
The expected behavior is shown at this link (AngularJs Material)
The actual behavior is shown at this link.
Is Async options' loading supported by md-select?
The reason you need to click twice is because when you first click, there are no options in the select control and so it doesn't try and open the panel. Then your async method loads the options into the DOM and on the next click it will open.
In order to deal with this, you must always include at least one <mat-option> in your <mat-select>. You can add a disabled <mat-option> with a <mat-spinner> showing that the data is loading for example.
Here the most simple example of that. This is not the best approach... see below.
However, this still uses the click event which isn't the best approach. If you put the click event on the <mat-select> there are spots where you can click on the control but your click event wont trigger even though the dropdown panel still opens (places like the floating label area). You could put the click event on the <mat-form-field> but then there will be places where you can click and trigger the click event but the dropdown panel wont open (places like the hint/error text area). In both cases you lose keyboard support.
I would suggest using the <mat-select> openChanged event instead of a click event. This has its own quirks too but they are manageable.
Here is an example using the openChanged event. I also made the component more robust overall.
I also made a version that uses the placeholder element to show the spinner instead of using a disabled mat-option. This required View Encapsulation to be turned off.
Note: In my example, the service can return different data depending on the circumstances. To simulate this my fake service keeps track of how many requests you send it and changes the options returned accordingly. So I have to set the option list back to empty and clear the formControl's value every time the list is opened. I save the selected value before clearing the formControl so that if the service returns a list with the same item I can automatically reselect the value. If you only need to load the options once, then you would want to modify the code a bit to only load the options the first time the user opens the select.

VSTO: How do I cast a mailitem as a form?

If I have an Outlook.MailItem how can I get the Location, Width and Height of this?
Also I need to "disable" the entire Outlook.MailItem form - how do I do this?
I want to show a centered "modal" dialog (just a Windows.Forms.Form) over this MailItem without it actually being modal.
Thanks
Update (more explaining)...
When a user clicks "Send" on a mail, I want to check it for large files before sending and if the file size are too big, then I want to show a "Files are too big, do you want to zip them" dialog. The dialog must be centered to the mail form and disable the mail form (like a dialog would) without freezing outlook.
There is no need to disable the default form in Outlook.
For example, the Open event of the MailItem class which is fired when an instance of the parent object is being opened in an Inspector. The Cancel parameter passed to the event handler allows to abort the default action. If the event procedure sets this argument to True, the open operation is not completed and the inspector is not displayed.
When this event occurs, the Inspector object is initialized but not yet displayed. The Open event differs from the Read event in that Read occurs whenever the user selects the item in a view that supports in-cell editing as well as when the item is being opened in an inspector.
Also you may consider using Outlook form region. The Replacement-all layout allows to override the whole inspector window. See Creating Outlook Form Regions for more information.
Why do you need to do anything with the form? Process the Application.ItemSend event, display the prompt if necessary, and cancel the submission process if you need to.

Get value from autocomplete text field in ApEx

I want to create a dynamic action, that will set a value to an item on the page, when the value of another item (autocomplete text field) is set.
So the proccess goes like this:
Click on the autocomplete field
type some letters
choose one of the suggested values
I cannot find an event that will be executed when the selection of one of the suggested values happens. This way, I cannot see how I can read the value of the autocomplete field, once a suggested value is selected.
The change event doesn't fit my needs, it doesn't execute when one suggested value is selected.
I had the same problem, found this link: https://community.oracle.com/thread/2130716?tstart=0 and modified my dynamic action as follows to get the desired behaviour:
Event = Custom
Custom Event = result
From the link:
the problem seems to be the default behavior of the browser. When you
enter some text into the autocomplete and the list is displayed, the
focus is still in the text field. Also if you use the keyboard cursors
to pick an entry the focus will still be in the textfield. That's why
the change event of the textfield doesn't fire. It only fires if you
leave the field.
On the other side if you pick an entry with the mouse, the browser
will remove the focus from the text field for a moment (before the
JavaScript code puts the focus back), because you clicked outside of
the field. But that's enough so that the browser fires the change
event.
I had a look into documentation of the underlaying jQuery Autocomplete
widget
(http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/) and
there is actually an event called "result" which can be captures if an
entry is selected from the drop down list.
Try "Lose Focus" as event. It will trigger your dynamic action when you leave the autocomplete field, i.e. your curosr is moved to another field.
This probably depends on the APEX version you are using.
In case of 18.2, because the underlying component is based on Oracle JET's "inputSearch" component, you need to use following configure to capture the select change event for text with autocomplete:
event: Custom
custom event: ojupdate
Reference:
https://docs.oracle.com/cd/E87657_01/jet/reference-jet/oj.ojInputSearch.html#event:optionChange
I turned on the browser console, then turned ApEx Developer toolbar debug, and found that, on the contrary, the "Change" event does fire upon user clicking with the mouse on one of the selections. However if the user uses keyboard (type a few letters to narrow the list down, then use down arrow key to arrive at desired value, then press enter) then the Change event does not fire, just as you say.
Moreover: even when you do get the value sent back via mouse-click initiated Change event, the value isn't the autocomplete's complete and valid value, but instead the possibly partial and wrong-case value just as typed by the user. I.e., the the change event's submission of the value precedes the autocomplete's substitution.
The answer that #VincentDeelen gave is the best alternative that I can see, although it doesn't quite give that "instantantenous synchronicity" feel. You could maybe use the "Key Down" event, but be careful with that. You could get a really excessive amount of web and db traffic as each and every keystroke (including corrections) results in another firing of the dynamic action.
Testing environment: ApEx 4.2.3 with Chrome 33 as well as IE 9.
p.s. This might be worth a mention to the ApEx development team as well.
It's not really ideal, but you could use onfocus(). I'm looking for the same thing you are, I think, a custom event that fires when the selection of a suggested value happens. I haven't found it yet though and that is my work-around for now. It will run whatever function you've created for this initially with no value, but once the selection is made it will return focus and run the function again with the right value. Like I said, not ideal but it works.
Jeffrey Kemp is right. You can set it up through a dynamic action using the custom event, result. You can also register it on page load using document.getElementById("{id}").addEventListener("result", {function}); or $("#{id}").result( function( event, data, formatted ) { //something here });.
Oracle apex 19 now added a "component event" when you create a dynamic action called "Update [Text Field with autocomplete]" - this action is fired when you select a value from the list, but not when you leave the field (similar to adding the custom event "ojupdate").

Windows Store app ComboBox fire event on user change

In my Windows Store (Metro) app, my ComboBoxes fire their selectionChanged() events every time their item sources get updated or their selected value/index gets changed in code. How do I make it so that these events only fire when the user selects a different value? Note - I tried looking for SelectionChangeCommitted, but MSVS claims this event doesn't exist.
Thanks for reading!
I managed to get it fixed by adding a flag (a bool) in the page, which is set to true during the loading process. Before it is set, the selectionChanged() methods will return before doing anything.

Resources