adecc Online Konzept

#ifdef BUILD_WITH_VCL
class MyListViewStreamBuf : public MyStreamBufBase {
private:
TListView* lvValue;
TListItem* lvItem;
bool boNewItem;
public:
MyListViewStreamBuf(TListView* para, bool boClean = true) : MyStreamBufBase() {
lvValue = para;
lvItem = 0;
if(boClean) lvValue->Items->Clear();
lvValue->ViewStyle = vsReport;
lvValue->RowSelect = true;
boNewItem = true;
}
virtual ~MyListViewStreamBuf(void) {
lvValue = 0;
lvItem = 0;
}
virtual int overflow(int c) {
if(c == '\n') {
Write();
//lvItem->MakeVisible(false);
boNewItem = true;
}
else {
if(c == '\t') {
Write();
}
else {
os.put(c);
}
}
return c;
}
virtual void Write(void) {
if(boNewItem) {
lvItem = lvValue->Items->Add();
lvItem->Caption = os.str().c_str();
boNewItem = false;
}
else {
lvItem->SubItems->Add(os.str().c_str());
}
os.str("");
return;
}
};
#endif
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MainForm.h"
#include <string>
#include <algorithm>
#include <functional>
using namespace std;
using namespace placeholders;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { }
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender) {
Caption = L"Hilfsprogramm für Blog";
Panel1->Caption = L"";
btnTransform->Caption = L"Transformiere";
Memo1->Lines->Clear();
}
//---------------------------------------------------------------------------
void mytransform(char para, string& strTarget) {
switch(para) {
case '&' : strTarget += "&"; break;
case '<' : strTarget += "<"; break;
case '>' : strTarget += ">"; break;
case '\t': strTarget += " "; break;
default:
{
char szBuffer[2] = { para, 0 };
strTarget += szBuffer;
}
}
return;
}
void __fastcall TfrmMain::btnTransformClick(TObject *Sender) {
string strSource = AnsiString(Memo1->Text).c_str();
string strTarget = "";
strTarget += "<pre><code class=\"language-cpp\">\r\n";
for_each(strSource.begin(), strSource.end(), bind(mytransform, _1, ref(strTarget)));
strTarget += "\r\n</code></pre>\r\n";
Memo1->Text = strTarget.c_str();
}
//---------------------------------------------------------------------------
#ifndef MyFormH
#define MyFormH
#include <vcl.forms.hpp>
class TMyWait {
private:
TCursor old_cursor;
public:
TMyWait(void) {
old_cursor = Screen->Cursor;
Screen->Cursor = crHourGlass;
}
~TMyWait(void) {
Screen->Cursor = old_cursor;
}
};
#endif
Benutzung von RAII im Zusammenhang mit den Stream- Umlenkungen
Eine Reihe von Blogposts zur Erklärung, wie man Standardstreams in C++ mit VCL- Komponenten verbinden kann.