Texte aus CheckBox in die Zwischenablage?

Cybdummi

Grünschnabel
Hi Leute, ich habe wieder mal ein Problem. Ich habe eine Form die mehrere CheckBoxen hat. Die Texte der CheckBoxen werden aus einer .ini File beim start gelesen. Ich möchte jetzt mit einem Button alle angekreuzten CheckBox->Text in die Zwischenablage kopieren.
Die Texte sollen aber wenn ich dann praktisch die Zwischenablage in einem Word Dokument einfüge nacheinander durch Komma getrennt erscheinen!

Leider bekomme ich beim Versuch
Clipbrd->
die Meldung: [C++ Fehler] Fehlerkat.cpp(1): Die Programmierhilfe kann nicht aufgerufen werden, da der Quelltext Fehler enthält

obwohl ich #include <vcl\Clipbrd.hpp> includet habe

Ich dachte einfach das es so funktionieren könnte:
Clipbrd = Form1->CheckBox1->Text;

dem ist aber nicht so und wie ich die einzelnen Texte dann auch noch durch ein Komma trenne sprengt meine Möglichkeiten.

Darum hoffe ich nun das hier einer von euch der richtig Ahnung hat und schon länger mit C++Builder programmiert mir helfen kann

Danke schon mal Gruß
 

Sinac

Erfahrenes Mitglied
Probiere es mal so:
Code:
TClipboard *CB = Clipboard();
CB->AsText = CheckBox1->Text;

Greetz...
Sinac
 

Cybdummi

Grünschnabel
Hey cool. ABER: ich will ja nur angekreuzte CheckBox->Text in die Zwischenablage kopieren! ich krübel schon den ganzen Tag wie ich diese if Abfrage machen soll das er mir nur von ca. 10 CheckBoxen diejenigen Texte in die ablage kopiert die angekreutzt sin?

Wäre sehr dankbar für den Gedankenanstoß!

Danke schon mal.
ich habe jetzt das ganze so gelöst:
//Die Auswahl in die Zwischenablage kopieren
char Auswahl[1240];
sprintf(Auswahl, "%s , %s , %s",CheckBox1->Caption, CheckBox2->Caption, CheckBox3->Caption);
Clipboard()->SetTextBuf(Auswahl);

Wohin mit der Abfrage denn so wie ich das gemacht habe nimmt er alle!!

Danke Danke ich glaub ich brauch a weng frische Luft vielleicht gehts dann leichter ;o)
 

Turri

Erfahrenes Mitglied
Hallo,

ich krübel schon den ganzen Tag wie ich diese if Abfrage machen soll das er mir nur von ca. 10 CheckBoxen diejenigen Texte in die ablage kopiert die angekreutzt sin?

Code:
string Auswahl ="";
if(CheckBox1->Checked == cbChecked)
{
   Auswahl += CheckBox1->Text.c_str();
   Auswahl += ",";
}
if(CheckBox2->Checked == cbChecked)
{
...
}
Clipboard()->SetTextBuf(AnsiString(Auswahl).c_str());

Habs nicht getestet, aber so in etwa, sollte das gehn ;-)

MfG Turri
 
Zuletzt bearbeitet:

Cybdummi

Grünschnabel
hmmm das gefällt mir aber ich weiss leider nicht soll ich das anstatt meinem Quellcode einsetzen oder welchen Teil von meinem soll ich ersetzen ich habe es jetzt so probiert:

{
//Die Auswahl in die Zwischenablage kopieren
char Auswahll[1240];
//sprintf(Auswahl, "%s , %s , %s",CheckBox1->Caption, CheckBox2->Caption, CheckBox3->Caption);
//Clipboard()->SetTextBuf(Auswahl);

string Auswahl ="";
if(CheckBox1->Checked == cbChecked)
{
Auswahl += CheckBox1->Text.c_str();
Auswahl += ",";
}
if(CheckBox2->Checked == cbChecked)
{
Auswahl += CheckBox2->Text.c_str();
Auswahl += ",";
}
Clipboard()->SetTextBuf(AnsiString(Auswahl).c_str());
}

aber da bringt er leider folgenden fehler:

[C++ Fehler] Fehlerkat.cpp(76): E2451 Undefiniertes Symbol 'string'
[C++ Fehler] Fehlerkat.cpp(76): E2379 In Anweisung fehlt ;
[C++ Fehler] Fehlerkat.cpp(79): E2451 Undefiniertes Symbol 'Auswahl'

;o( und nun mann mann mann so ne bestimmt einfache sache !! ich merke wie weit ich entfernt bin vom richtigen programmieren ;o( heul
ABER ich gebe nicht auf und ich weiss das wenns nicht ausm eigenen Brain geht auf euch alle hier verlass ist ALSO? ;o))

Danke schon mal bis morgen
 

CSANecromancer

Erfahrenes Mitglied
Wird der String nicht mit einem Großbuchstaben geschrieben? C++-Compiler können da sehr pingelig sein. So könnte ich mir auch die restlichen Fehlermeldungen erklären:

"string" wird als Variablenname aufgefasst. Aber welchen Typ hat denn die Variable namens "string"?

=> [C++ Fehler] Fehlerkat.cpp(76): E2451 Undefiniertes Symbol 'string'

Nach einem Variablennamen kommt entweder eine Zuweisung/Initialisierung oder ein ; aber nach dem "string" kommt nichts dergleichen

=> [C++ Fehler] Fehlerkat.cpp(76): E2379 In Anweisung fehlt ;

Und was bitte soll denn dann das "Auswahl" sein? Es ist ja noch nicht einmal "string" richtig definiert.

=> [C++ Fehler] Fehlerkat.cpp(79): E2451 Undefiniertes Symbol 'Auswahl'


Ich würde mal frech behaupten, du hast damit die praktische Begründung von Netiquettenregel 15 erfahren. ;-) Einem Chat- oder Briefpartner mag die Groß- und Kleinschreibung noch egal sein, dem Compiler ist sie das auf gar keinen Fall.
 

Sinac

Erfahrenes Mitglied
Richtig, du solltest einen AnsiString verwenden und keinen cstring:
Code:
TClipboard *CB = Clipboard();
String auswahl;
if(Checkbox1->Checked)
   auswahl = Checkbox1->Text;
if(Checkbox2->Checked)
   auswahl = auswahl + "," + Checkbox2->Text;
...
CB->AsText = auswahl;

So sollte das eigentlich klappen...
Greetz...
Sinac
 

Cybdummi

Grünschnabel
Also:
CSANecromancer das hast du ziehmlich trocken aber richtig cool rübergebracht ;o) danke.

UND Allen anderen genauso ein Riesen Mercy. Ihr habt mich gerettet und ich habe wieder dazu gelernt ;o)
Tausend Dank Leute ich wusste das ich hier richtig bin.
Für alle die es interessiert hier alle Lösungen nochmal gepostet und wie sie funktionieren.


void __fastcall TForm1::Button4Click(TObject *Sender)
{
/*
//Die gesamte Auswahl in die Zwischenablage kopieren
char Auswahll[1240];
sprintf(Auswahl, "%s , %s , %s",CheckBox1->Caption, CheckBox2->Caption, CheckBox3->Caption);
Clipboard()->SetTextBuf(Auswahl);
*/
//---------------------------------------------Aber besser....

//nur die ausgewählten Zeilen in die Zwischenablage
//und durch ein Komma getrennt!
/*
String Auswahl ="";
if(CheckBox1->Checked == cbChecked)
{
Auswahl += CheckBox1->Caption.c_str();
Auswahl += ",";
}
if(CheckBox2->Checked == cbChecked)
{
Auswahl += CheckBox2->Caption.c_str();
Auswahl += ",";
}
Clipboard()->SetTextBuf(AnsiString(Auswahl).c_str());
}
*/
//--------------------------------------------------------oder sooo...

// Ausgewählte Zeilen in die Zwischenablage kopieren
//sind es mehr als eine werden die Einträge durch ein Komma getrennt

TClipboard *CB = Clipboard();
String Auswahl;
if(CheckBox1->Checked)
Auswahl = CheckBox1->Caption;
if(CheckBox2->Checked)
Auswahl = Auswahl + "," + CheckBox2->Caption;
CB->AsText = Auswahl;

}

//-------------------------------------------------------------------
 

Turri

Erfahrenes Mitglied
Ich bitte vielmals um Entschuldigung, das ich durch meinen Schreibfehler (string statt String),
weil ich gerade keinen Borland Builder zur Hand hatte,
etwas Verwirrung gestiftet hatte. :)

Aber die Überlegung war immerhin die richtige. ;-)

MfG Turri
 

CSANecromancer

Erfahrenes Mitglied
Ich wollte mit meiner Besserwisserei niemandem zu nahe treten, aber ich bin noch ein wenig der Auffassung, daß es auch nützlich ist, wenn man den Grund, also das "warum" für Fehlermeldungen und Regeln kennt. :) "Warum" ist mein liebstes und wichtigstes Fragewort.

Nichts bringt mich mehr auf die Palme als etwas wie "allgemeine Speicherschutzverletzung". Solche Fehlermeldungen sind vollkommen nutzlos und nichtssagend. Aber der Borland Compiler ist da schon auskunftsfreudiger, man muß sich nur ein- (oder ein paar-) mal durch die Fehlermeldungen durchgearbeitet haben und verstanden haben, wieso der Compiler die entsprechenden Meldungen bringt und schon ist die Fehlersuche sehr viel einfacher.

Und die Bemerkung mit der Netiquette 15 war nur deswegen, weil manche Neueinsteiger hier meinen, das sei reine Schikane von den Forenbetreibern. Dabei hat diese Regel imho mehrere Gründe und der, welcher den meisten am schnellsten einleuchtet, ist einfach der, daß Compiler sehr intolerant gegenüber einer falschen Schreibweise sind. ;-)