I am trying to use ultimate grid from Code Project in a dialog box but the grid is invisible.
m_Plist.AttachGrid(this, IDC_CREDENTIALS) returns true but the static text place holder where the grid should be shown cant be seen and the grid is never displayed.
I am using sample the code from here http://www.codeproject.com/KB/MFC/UltimateGrid_Start.aspx?display=PrintAll&fid=452565&df=90&mpp=25&noise=3&sort=Position&view=Quick&select=2629959&fr=51#Using_the_Grid_in_a_CDialog
I have installed the latest update UltimateGrid72_Src_Update03.zip and Im using VS2008 SP1.
Thanks...
BOOL CCredentials::OnInitDialog()
{
CDialog::OnInitDialog();
MyCug m_PList;
m_Plist.AttachGrid(this, IDC_CREDENTIALS);
}
I've not used Ultimate Grid myself. However, looking at the code you posted, I can see that there is likely to be a problem: you declare an instance of "MyCug" on the stack, then attach it, but that stack-based instance will be destroyed as soon as the OnInitDialog() method exists. What you must do is put the declaration of "MyCug m_PList;" as a member of the dialog class, so that the lifetime of the grid object is the same as the lifetime of the dialog.
I don't know why your grid is not displaying, things to look for are is it correctly loading from the dialog template, and is it visible? You can use spy++ (a tool distributed with visual studio) to see what windows are actually created in your dialog, where they are and the flags and styles set on them.
After you create and attach the grid, are you adding rows and columns as defined by the examples?
Otherwise, there isn't going to be anything to see.
You'll need the following code in MyCug::OnSetup():
void MyCug::OnSetup(){
//*******Set the Rows and Columns
SetNumberCols(10);
SetNumberRows(10);
}
That's from the tutorial in the 7.2 version. I used UG extensively, and have no problems with VS2008. But I create all my grid myself, I don't use dialog templates.
Related
The "File >New >Other..." command of the IDE environment, shows the following image:
In the image, two areas (A) and (B) are observed. I am interested in using area control (B).
I assumed it was a TListView control, but I haven't been able to achieve similar view options as above. Other people have suggested that each of the displayed items (icon, title, and descriptive text) can be inserted inside a common container (TPanel, TFrame) and "stacked" inside a TScrollBox, a possible solution, but I think the Delphi folks may have used something more optimized.
Does anyone know which component has been used to generate that view? Or, does anyone know how to generate such a view?
It is a component called TControlList: https://docwiki.embarcadero.com/Libraries/Alexandria/en/Vcl.ControlList.TControlList
I have a hierarchical flexgrid control with the ToolTipText property set, and when I run from source the tooltip displays as it should. But when I compile it and run that way, the tooltip doesn't display.
I've tried to remove anything listening to MouseMove in the hopes that that would fix it, and when I add some code to put the tooltip text into a message box, it appears to be set correctly. Can anyone think of why this would be happening?
Update: It appears that the problem arises when I host the grid inside another user control. E.g.: make container.ctl, which is just a blank control but with ControlContainer = True. Then make gridholder.ctl, which is a mshfg inside of a container.ctl. Lastly, embed gridholder.ctl into some form. Tooltips on the flexgrid don't appear to show up.
I'm interested to see how reproducible this is...
I haven't found a workaround for this issue yet, but I have a better idea of why it's happening after some testing and stepping through some of the VB6 runtime code in WinDBG.
The first interesting thing is that VB6 doesn't use the standard tooltip display mechanisms provided by Windows. For example, it doesn't use WM_NOTIFY messages to show/hide tooltips, or any of the other "standard" tooltip support described in the documentation explaining how tooltips work in Windows.
Instead, the VB6 runtime has its own way of managing and displaying tooltips. In principle, it's similar to in some ways to the standard Windows way of dealing with tooltips, but it's also different in a quite a few areas.
A breakdown of how VB6 does tooltips:
When a VB6 program starts, the runtime uses SetWindowsHookEx to install a mouse hook for the program's main thread.
The mouse hook intercepts all mouse messages sent to the program, in particular all WM_MOUSEMOUSE messages
Whenever the mouse hook runs, it calls an internal method in the VB6 runtime to get the object pointer (HCTL) of the control that the mouse is currently over top of. Note that this is an actual COM interface pointer, not a window handle.
It translates the HCTL to the corresponding window handle (HWND).
It checks to see if the mouse position is within that window's rectangle.
If so, it retrieves the ToolTipText property for the control. If this is not empty, it creates a tooltip window and displays the tooltip after a 700ms delay.
The problem with the MSHFlexGrid (and I imagine other controls that are not standard VB6 controls) is that this code doesn't retrieve the correct HCTL when you hover over the control and it's inside a custom container.
In that case, the code retrieves the HCTL of the custom container, not the HCTL of the MSHFlexGrid itself. Therefore, it retrieves the container's ToolTipText property (which is empty) and not the grid's ToolTipText, and therefore won't display a tooltip.
I'm not sure exactly why it does this, because as noted in the comments on your question, all of this works correctly if you use a PictureBox as your container.
I suspect the PictureBox has code to handle this correctly that is not included when you create your own container.
I'll update this answer with an actual workaround if I can find one. The only thing I can think right now is to somehow "sync" your container's ToolTipText property with the grid's ToolTipText property, so that when VB6 requests the container's ToolTipText, it will return the value of the grid's ToolTextTip property instead.
This is easier said than done, however, because ToolTipText is an extender property, and extender properties take precedence over properties that you write yourself that have the same name.
After a bit of research, I found what I think is the underlying problem. Your user control is not implementing any method for the controls to interact with. User Controls that are Container Controls need to implement the Extender functionality. These two links are the best I've found on the subject so far.
http://www.justvb.net/obook/ch7.htm#UsingtheExtenderObject
http://msdn.microsoft.com/en-us/library/aa733622(v=vs.60).aspx
I'm implementing a Visual Studio Language Service for a custom scripting language used internally at my company, and I've run into an issue with the navigation bar implemented as a subclass of TypeAndMemberDropdownBars. The subclass is created by my LanguageService subclass' LanguageService.CreateDropDownHelper method.
In the OnSynchronizeDropdowns method I'm iterating through the types defined in the file and adding DropDownMembers to the passed-in array to fill out the navigation bar. The issue I'm seeing is that the first item in the array is being duplicated and placed at the end of the listing by code that I don't have access to. This extra item does not behave correctly when selected (nothing happens), but doesn't seem to cause any other issues; the rest of the items in the list work fine. Additionally, this only seems to happen for the type dropdown box - the members dropdown box does not display this behavior.
I'm hoping someone else has seen and resolved this issue and could provide some assistance. Thanks!
Turns out this was caused by me calling LanguageService.SynchronizeDropdowns from my LanguageService.ParseSource method, which was being called on a background thread. I've fixed the problem by setting a flag when ParseSource does a Check parse, and then implementing a check for that flag in my LanguageService.OnIdle function that will call SynchronizeDropdowns. It's now working as expected!
A better solution is to implement the LanguageService.OnParseComplete callback, and call SynchronizeDropdowns from there. OnParseComplete is always called from the main thread, so this prevents any synchronization issues from coming up, and also keeps you from having to keep track of whether or not you need to call SynchronizeDropdowns().
Since there is no grid asset in SketchFlow, what is the best way to represent one? Does everyone just use the rectangle asset?
At the time the question was posed, there were workarounds and kludges. But now--with the advent of the just-released (June 7, 2010) SketchFlow/Blend version 4 there is a great solution: Sketchables from Philipp Sumi. This add-on to SketchFlow 4 lets you use concise markup to customize and tailor a control to display sophisticated output--including the SketchableDataGrid.
Sketchables is a completely new package, due to be released the week of June 21, 2010, according to his blog. He has a startling demo video on his site, though. For a snapshot of the SketchableDataGrid take a look at Figure 12 in my just-published article Creating WPF Prototypes with SketchFlow, June 18, 2010.
(I have no connection with Philipp Sumi other than admiration for his Sketchables product.:-)
There should be a DataGrid Asset (defined in System.Windows.Control.Data.dll -Might need to add a reference?) which I think is what you're looking for.
The first thing you need to do is create a datasource.
You can create a data source by choosing the data tab in the top right corner and clicking on the "define new sample data" icon. Under the collection you should be able to add/edit the field properties for the data source. The data source will have auto-generated data for you (a very cool feature!). This can be replaced by selecting the "Edit Sample Values" icon beside the collection if desired.
Next you can drag a data grid onto your screen and set the data source by choosing the ItemsSource property on the grid (the data binding option should be chosen). On the data field tab you can choose your data source. Make sure to select the actual "Collection(array)" option on the right hand side. By default it should auto generate the columns for you. This can be changed if you want more control the column header names, etc.
Hope this helps.
I did it using a ListBox-Sketch.
Check it out here.
There isn't a 'sketch' style grid, so you have 2 options:
Use a list box and edit the template to be a grid / horizontal stack panel with borders etc.
Use the standard grid, you can still make the text 'Buxton Sketch' font so it still looks pretty good, but it does have some chrome effects breaking the 'pure sketch' look
Use what suits you best.
First of all, if you are using Silverlight based sketch, you have a datagrid available otherwise if you are working with WPF you could use WPF Toolkit which includes one.
To make a Silverlight datagrid "sketchy" please take a look at the sample at:
http://cid-99b45ff02d12b84d.skydrive.live.com/self.aspx/Public/Scratch/SilverlightPrototype8.zip
I think this sample also applies to a WPF based sketch with a datagrid from WPF toolkits with only minor adjustments...
Good luck
I am not 100% clear on what you are trying to do. You could use the SketchBorderUC or a Rectangle-Sketch.
What visual representation are you trying to achieve that you would use a grid for?
I'm running into a problem trying to anchor a textbox to a form on all 4 sides. I added a textbox to a form and set the Multiline property to True and the Anchor property to Left, Right, Up, and Down so that the textbox will expand and shrink with the form at run time. I also have a few other controls above and below the textbox.
The anchoring works correctly in Visual Studio 2005 (i.e. I can resize the form and have the controls expand and shrink as expected), but when I run the project, the bottom of the textbox is extended to the bottom of the form, behind the other controls that would normally appear beneath it. This problem occurs when the form loads, before any resizing is attempted. The anchoring of the textbox is correct for the top, left, and right sides; only the bottom is malfunctioning.
Has anybody heard of this and if so, were you able to find a solution?
Thanks!
UPDATE:
Here is some of the designer code as per Greg D's request (I am only including the stuff that had to do with the textbox itself, not the other controls):
Friend WithEvents txtRecommendationText1 As System.Windows.Forms.TextBox
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.txtRecommendationText1 = New System.Windows.Forms.TextBox
' ...snip...
'txtRecommendationText1
Me.txtRecommendationText1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _
Or System.Windows.Forms.AnchorStyles.Left) _
Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)
Me.txtRecommendationText1.Location = New System.Drawing.Point(4, 127)
Me.txtRecommendationText1.Multiline = True
Me.txtRecommendationText1.Name = "txtRecommendationText1"
Me.txtRecommendationText1.Size = New System.Drawing.Size(223, 149)
Me.txtRecommendationText1.TabIndex = 10
End Sub
ANOTHER UPDATE:
The textbox I originally posted about was not inherited from a baseclass form (although it was added to a custom User Control class; I probably should have mentioned that earlier), but I recently ran into the same problem on a totally unrelated set of controls that were inherited from a baseclass form. It's easy to blame these problems on possible bugs in the .NET framework, but it's really starting to look that way to me.
Is your Form localized? Check the resource files for an entry with Textbox.Size, delete is and reset the size.
Is your Form inherited and is the Textbox on the baseform? Try setting the Textbox's access modifier to Protected or Public.
Have you implemented custom resize logic? Turn it off and see if the problem is still there.
Have you entered a Textbox.MinimumSize/MaximumSize? Remove or change the value.
It might also be a combination of these things...
Does the form snap back to the expected layout when you resize it after it's been initialized weirdly? Also, have you set a Height or MinimumHeight/MaximumHeight property for the text box?
If possible, a few snippets from the designer code might be useful. :)
One possibility that I've run into in the past is DPI. If you're running/testing your code on a machine with a different DPI setting than the machine that you're developing on, you may observe some strange things.
The anchor functionality essentially establishes a fixed distance between the edge of a control and the edge of the control's parent. Is your textbox embedded within another control (e.g., a panel) that doesn't have its anchors properly set? Right clicking on the text box in the designer should pop up a menu that lets you select any controls that exist underneath it, also.
Does your program include any custom resize logic, or does it modify the size of the textbox programmatically outside of designer-generated code? That might also result in weird behavior. I've assumed maintenance for a number of pieces of software at my organization where the original developers spent a great deal of time implementing (buggy) resize logic that I had to tear out so that I could just let the designer-generated code do the work for me.
The textbox I originally posted about was not inherited from a baseclass form (although it was added to a custom User Control class; I probably should have mentioned that earlier), but I recently ran into the same problem on a totally unrelated set of controls that were inherited from a baseclass form. It's easy to blame these problems on possible bugs in the .NET framework, but it's really starting to look that way to me.
It's very likely because of the 'AutoScaleMode' property being set in InitializeComponent(). Try setting it to 'None' and see if that fixes it. I've had these problem a couple of times now.