|
Form1 creates the webBrowser with this code:
this->webBrowser1->AllowNavigation = false;
this->webBrowser1->Location = System::Drawing::Point(57, 102);
this->webBrowser1->MinimumSize = System::Drawing::Size(20, 20);
this->webBrowser1->Name = L"webBrowser1";
this->webBrowser1->Size = System::Drawing::Size(250, 140);
this->webBrowser1->TabIndex = 3;
this->webBrowser1->Url = (gcnew System::Uri(L"about:blank", System::UriKind::Absolute));
I have a series of “Do This” buttons on the main form.
I want to be able to clear the web browser window as each button is clicked so the browser control only displays the result of the last button that was pressed.
As a test, I am calling this Html Line method 5 times. Each call should clear the box and display only the last html line. I’ve tried multiple ways to clear the box, nothing works. At the end of the process all 5 lines are displayed.
What is the proper way to define a web browser box so I can clear it and refill it at will?
System::Void Feedback::HtmlLine ( String ^ showLine )
{
if ( webBox == nullptr)
return;
webBox->DocumentText = ""; webBox->Navigate("about::empty"); webBox->Document->Write(showLine);
webBox->Refresh();
String ^ fullDisplay = webBox->DocumentText;
int count = 1;
return;
}
|
|
|
|
|
in your first snippet, it is all about webBrowser1 .
in your second snippet, it is all about webBox .
If those are distinct, then you're probably looking at one while modifying the other; and if they aren't distinct, you should not have two variable names for the same thing. Cleaner code yields fewer problems.
|
|
|
|
|
My suspicion is that you need to wait for the Navigate to finish before doing the Document->Write since Navigate is an asynch operation as I recall. Try moving the code after ->Navigate into a handler for webBox->Navigated event.
|
|
|
|
|
First note that it should be "about:blank" not "about::empty". There is just one colon, not two, and use blank instead of empty. You can try all those out in a browser window and if you do I think you will see that you need to use "about:blank".
Next, yes; you must wait for the navigation to complete. The common way to do that is to handle the DocumentComplete event. That event is used so much that it is the default event for the WebBrowser control. In other words, if you double-click on the WebBrowser control in the designer, then a handler for the DocumentComplete event will be automatically added.
I am not sure how to clear the page when you use Write to write HTML. What I would do in my DocumentComplete event handler is to use:
webBrowser1->Document.Body.InnerHtml = showLine;
I have been using C# more than I have been using C++ lately so that syntax might be incorrect but I assume you can fix it if needed.
Note however that you need to wait for the document to be complete only once; after that, you can change the HTML without waiting, but you might need to wait for DocumentComplete event if you need to immediately use the document.
|
|
|
|
|
Hi Everyone,
I am new to C++/CLI. I am trying to write a CLI wrapper on top of native C++ class.
I am a bit confused on how to marshal below mentioned C++ object to c++/CLI. Could you give me some ideas?
Native C++ Classes
class HeaderMessage {
double timestamp;
string ric_code;
}
class TradeMessage {
double price;
int size;
}
class RFARecord
{
public:
RFARecord();
HeaderMessage * hMsg;
list<TradeMessage *> qMsgs;
};
My C++/CLI classes look like this
public ref class RFARecordRef
{
public:
RFARecordRef();
RFARecordRef(RFARecord *record);
HeaderMessageRef hMsg;
List<TradeMessageRef> tMsgs;
private:
RFARecord *record;
};
ref class HeaderMessageRef
{
private:
HeaderMessage *hMsg;
public:
HeaderMessageRef(void);
};
ref class TradeMessageRef
{
private:
TradeMessage *tMsg;
public:
TradeMessageRef(void);
};
I am not sure if my approach is correct.
I read data from a text file and transfer this data in the form of RFARecords to my C# program.
What is the right way to wrap or marshal above data objects to C++/CLI which can then be consumed by my C# program.
Thanks in advance.
Regards, Alok
|
|
|
|
|
I have a headerfile for my strings and variables to use with my whole project. But I don't know, how to define or declare the similar for images...Iam facing the problem like the below...
For Strings....Below is good
#define MY_STR "My Value"
public:
System::Drawing::Image^ MyMainImge=System::Drawing::Image::FromFile("C:\\MyPrgCodes\\Images\\MyMenuImage.jpg");
error C3145: 'MyMainImge' : global or static variable may not have managed type
Any Ideas for me? Thanks
|
|
|
|
|
You are trying to declare and implement a variable without any context for it to exist within. Firstly the declaration needs to be inside a class, and secondly the implementation needs to be inside a constructor or other class function.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Thanks Richard![Rose | [Rose]](https://codeproject.global.ssl.fastly.net/script/Forums/Images/rose.gif)
|
|
|
|
|
I’m creating a window’s form application that will have a series of “do it” buttons and a large scrollable text area for feedback.
The feedback might be something like:
Item 1 completed
Item 2 completed
Warning: I had problems
Item 3 completed
Error: That was a serious problem
Item 4 failed
Item 5 completed
During the feedback I’d want to highlight words like Warning and Error so they pop out.
I tried using a RichTextBox, but it really only allows one selection at a time. I can highlight “Warning” on the fly, but when I try to then highlight “error” I change the selected area and “Warning” goes back to standard text.
My thought was to create a WebBrowser object instead of a RichTextBox object, then format it with HTML. But I can’t seem to find the right syntax to create the browser object, not give it a URL, then be able to build the HTML code on the fly from within my program.
Anyone know of the proper way to create a scrollable text box where I can format the text on the fly as my process runs?
|
|
|
|
|
There are many ways to achieve something like that, from simple to very complex:
1.
use a ListBox in OwnerDrawn mode; that will easily allow you to have a homogeneous style for each line of text, meaning you could simply have a line in red, or in a bold font, or ... . An example can be found here[^].
2.
Use a RichTextBox, and make sure to use it correctly. Which means:
- add text, select text, set properties for selected text, unselect;
- rinse and repeat.
3.
Use a WebBrowser; build an HTML document in memory, and assign it to the browser's DocumentText property.
4.
Create your own control, from scratch (based on UserControl or, my preference, Panel); paint everything yourself, and teach it any trick you want.
|
|
|
|
|
1. many times I want words in the line to be different, not entire lines.
2. I've looked for ways to "unselect" and the only thing I've found is to select from the end, size 0.
The problem I get is ever time I select a new area to highlight, it un-highlights the previous area.
3. I've tried the WebBrowser approach, it is the most promising. I can create anythign I like with it.
I used the WebBrowser->Document->Write( HtmlCode ) to add lines to the control and all is great -- almost.
My problem is I can't find a way to clear the control for the next "do it" run of the process.
It just keeps appending to the end of what is alreay there.
4. This might be my only answer, but I'd like to avoid it.
|
|
|
|
|
RTB unselect = SelectionLength zero
RTB coloring is by applying ForeColor/BackColor to text while it is selected; it is NOT the highlighting you get while one piece of text is selected, that merely indicates what is selected, it isn't permanent.
I suggest you search and read some CP articles on text editing in RTBs.
WebBrowser.DocumentText is what is needed in a WB.
|
|
|
|
|
Have you overlooked the Multiline property of the RichTextBox? I don't know what the default is but if the RichTextBox is the same as a TextBox then you need to set it to true.
The WebBrowser control and HTML are a little confusing to use initially but they are very useful and worth learning. I wrote the article Introduction to Web Site Scraping[^]. It mostly goes the other direction in the sense of getting from HTML not putting it but it is probably useful for you too.
|
|
|
|
|
Hi,
Actually its my first project in VC++2010. Right now Iam converting my project from C# to VC++2010. In VB.Net I used Modules to use my Public variables and functions to my whole project. And in C# samething I used classes to declare the same accessed in every forms.
Similarly Now I want to use it in VC++2010.. For that any Samples & Codes will be useful for me..
Thanks For the ideas.
|
|
|
|
|
Paramu1973 wrote: in C# samething I used classes to declare the same accessed in every forms.
It's just the same in C++.
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Thanks Richard...![Rose | [Rose]](https://codeproject.global.ssl.fastly.net/script/Forums/Images/rose.gif)
|
|
|
|
|
I would like to store a value to a Excel cell
But iits giving error
MyXLWorkSht->Cells[2,2]->Value=="PARAMU";
Error: C2039: Value is not a member of System::Object
Thanks
|
|
|
|
|
Actually I did mistake with Worksheet declaration, and I altered as like the below, then its get solve.
Let it be useful someone like me...
Microsoft::Office::Interop::Excel::Worksheet^ MyXLWorkSht
Earlier
MyXLWorkSht=MyXLApp->ActiveSheet;
Now Ichanged it as
Microsoft::Office::Interop::Excel::Worksheet^ MyXLWorkSht
= static_cast<Microsoft::Office::Interop::Excel::Worksheet^>( MyXLWorkBook->Worksheets->Item[1]);
|
|
|
|
|
Actually its my first time Iam trying to write some data from datatable to excel sheet. For that I need to add Microsoft.Office.Interop.Excel...
Any Ideas ?
Thanks & Regards
PARAMU![Rose | [Rose]](https://codeproject.global.ssl.fastly.net/script/Forums/Images/rose.gif)
|
|
|
|
|
Start here[^].
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
In my c++ project, I use cutePDF to print in non-interactive mode(no save-as dialog) by using GDI print API. The sample code is like below,
DOCINFO di;
ZeroMemory( &di, sizeof(DOCINFO) );
di.cbSize = sizeof(DOCINFO);
di.lpszDocName =L"My_PDF_File";
di.lpszOutput=L"c:\\My_PDF_Folder\\My_PDF_File.pdf";
pDC->StartDoc( &di );
CutePDF geneates PS instead of PDF file. Does anyone know why and how to make it work?
Cheers
Susan
|
|
|
|
|
Check your CutePDF installation includes Ghostscript which is the process that does the actual conversion. See also here[^].
Unrequited desire is character building. OriginalGriff
I'm sitting here giving you a standing ovation - Len Goodman
|
|
|
|
|
Hi,
I need to use "not Managed C++/CLI class" in a Managed C++/CLI class. But I got the "not supported" error message.
Is there a way to do following?
--------------------------------------
class A (){};
public ref class B()
{
A a; <----- not supported
}
-------------------------
Thanks
|
|
|
|
|
You could store a pointer to an "A" object in an IntPtr[^].
Mark Salsbery
|
|
|
|
|
Thank you very much for the reply. Could you write some sample code?
Best,
|
|
|
|