einer hier der fix helfenkönnte?? schreiben gerade ne arbeit
Ankündigung
Einklappen
Keine Ankündigung bisher.
c++ pro needed
Einklappen
X
-
ich wuerde dir ja helfen, aber dir fragen sind so alle voellig unnuetz 0o
ich probiers trotzdem mal allgemein..., also wenn die komponentenkollektion ein array ist, dann musst du finden wieviel eintraege das array hat, das ist irgendwo definiert.
zb.
komponentenkollektion[25];
dann nimmste die 25 und durchsuchst in ner forschleife:
int i;
for(i=25;i>0;i--)
{
if(komponentenkollektion[i]==schwarzestpanel)
{
komponentenkollektion[i]=0;(je nach datentyp, bei pointer NULL)
}
}
und 5. versteh ich dir frage nicht.
Kommentar
-
Spoiler:
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h" //Clear();
int n = this->ComponentCount; //n := self.ComponentCount;
for (int i=0; iItems->Add(Components[i]->Name);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
Edit1->Text = ListBox1->Items->Strings[ListBox1->ItemIndex];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//Objekt suchen und speichern
TComponent* C1; //Variable, die für alle Komponenten passt
//* bedeutet: dynamische Variable, Anfangsadresse im Arbeitsspeicher
C1 = this->FindComponent(Edit1->Text); //Error -> NULL, sonst Adresse
if (C1) { //nicht NULL, d.h. gültig, ergo gefunden
String s = C1->Name;
Caption = s + " gefunden.";
//manipuliere gefundenes Objekt
//1. Schieberegler-Position um 1 nach rechts
if (C1->ClassNameIs("TScrollBar")) ((TScrollBar*)C1)->Position += 10;
//2. Panel soll um 2 nach rechts rücken
if (C1->ClassNameIs("TPanel")) ((TPanel*)C1)->Left += 2;
//3. Shape soll schmaler werden
if (C1->ClassNameIs("TShape")) ((TShape*)C1)->Width -= 2;
//4. Label-Beschriftung soll weiß werden
if (C1->ClassNameIs("TLabel")) ((TLabel*)C1)->Font->Color = clWhite;
//5. CheckBox soll toggeln
if (C1->ClassNameIs("TCheckBox"))
((TCheckBox*)C1)->Checked = ! ((TCheckBox*)C1)->Checked;
}
else {
Caption = Edit1->Text + " NICHT gefunden!";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
//Objekt suchen und speichern
TComponent* C1; //Variable, die für alle Komponenten passt
//C1->Name = "kaputt"; //access violation, weil C1 ungültig
//* bedeutet: dynamische Variable, Anfangsadresse im Arbeitsspeicher
C1 = this->FindComponent(Edit1->Text); //Error -> NULL, sonst Adresse
if (C1) { //nicht NULL, d.h. gültig, ergo gefunden
String s = C1->Name;
Caption = s + " gefunden.";
//lösche gefundenes Objekt, wenn zulässig
//button3 und edit1 ausnehmen
if ((C1 != Button3) && (C1 != Edit1)) {
delete C1; //C1.Free; -> C1 ungültig, Speicher freigegeben
}
else {
Caption = "Löschen von " + C1->Name + " verweigert, das würde ALLES zerstören, du Nerd!";
}
//auf gelöschtes darf nicht mehr zugegriffen werden
//sender einer routine darf sich nicht selbst löschen
}
else {
Caption = Edit1->Text + " NICHT gefunden!";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Form2->Show();
//alle Komponenten die Nachfolger von TControl sind, sollen nach Form 2 umziehen
int n = this->ComponentCount; //n := self.ComponentCount;
for (int i=0; iClassType(), __classid(TControl))) {
((TControl*)TC)->Parent = Form2;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel3MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
static int i = 0; //i ist pseudoglobal (nur hier zu sehen, nur einmal initialisiert)
//an der Klickposition ein Shape der Größe 5*5 in Zufallsfarbe erzeugen
//owner = Form1, parent = Panel3
TShape* S;
S = new TShape(this); //Formular wird Besitzer ( -> Kollektion)
S->Width = random(100)+5;
S->Height = random(100)+5;
S->Parent = Panel3;
S->Left = X;
S->Top = Y;
S->Name = "sh" + IntToStr(i++);
S->Brush->Color = (TColor)random(0xffffff); //Typwandlung, um Compiler zu beruhigen
S->OnMouseMove = Shape1MouseMove;
S->OnMouseDown = Shape1MouseDown;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Shape1MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
/* //wenn der Sender ein TShape ist, mach ihn rot //if Sender is TShape then
if (InheritsFrom(Sender->ClassType(), __classid(TShape))) {
TShape* TS = (TShape*)Sender;
TS->Brush->Color = clRed;
}
*/
///////Änderung: mit der Maus mitbewegen (nur bei linker Maustaste)
///////statt umzufärben
if (Shift.Contains(ssLeft)) {
((TControl*)Sender)->Top += Y - y0; //top: ab tcontrol verfügbar
((TControl*)Sender)->Left += X - x0;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//gehe alle Komponenten der Kollektion durch
//alle TShapes, welche a) Panel3 als Parent haben und b) rot sind
//sollen GETÖTET werden
int n = ComponentCount;
for (int i=0; iClassType(), __classid(TShape))) {
TShape* TS = (TShape*)Components[i];
//TS->Brush->Color = clBlack; //test
if ((TS->Parent == Panel3) && (TS->Brush->Color==clRed)) {
delete TS; //löscht aus Kollektion -> ComponentCount--
n--; //weil es jetzt einer weniger ist
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Panel3MouseMove(TObject *Sender, TShiftState Shift,
int X, int Y)
{
//bei gedrückter linker Maustaste soll ein kleines Shape hingelegt werden
/* if (Shift.Contains(ssLeft)) {
static int i = 0; //i ist pseudoglobal (nur hier zu sehen, nur einmal initialisiert)
//an der Klickposition ein Shape der Größe 5*5 in Zufallsfarbe erzeugen
//owner = Form1, parent = Panel3
TShape* S;
S = new TShape(this); //Formular wird Besitzer ( -> Kollektion)
S->Width = 5;
S->Height = 5;
S->Parent = Panel3;
S->Left = X;
S->Top = Y;
S->Name = "shm" + IntToStr(i++);
S->Brush->Color = (TColor)random(0xffffff); //Typwandlung, um Compiler zu beruhigen
S->OnMouseMove = Shape1MouseMove;
S->OnMouseDown = Shape1MouseDown;
} */
}
//---------------------------------------------------------------------------
void __fastcall TForm1::tmMoveTimer(TObject *Sender)
/*
Logik noch fehlerhaft.
Soll:
*/
{
//gehe alle Komponenten durch. Alle Shapes, (deren Parent das Panel3 ist),
//sollen um ... Pixel nach unten.
for (int i=0; iClassType(), __classid(TShape))) {
TShape* TS = (TShape*)Components[i];
if (TS->Parent == Panel3) {
if ((TS->Top + TS->Height) < TS->Parent->Height-1) { //Unterkante
//------------------------------------------
//ermittle Kollision mit anderen Shapes
for (int j=0; jClassType(), __classid(TShape))) {
TShape* TS2 = (TShape*)Components[j];
if (TS2->Parent == Panel3) {
int t1 = TS->Top; int l1 = TS->Left; //Kanten von TS(1)
int r1 = l1 + TS->Width; int b1 = t1 + TS->Height;
int t2 = TS2->Top; int l2 = TS2->Left; //Kanten von TS(1)
int r2 = l2 + TS2->Width; int b2 = t2 + TS2->Height;
if ((b1>t2) && (b2>t1)) { //Kollision gefunden
permit=0;
break;
}
}
}
}
//-----------------------------------------
if (permit) TS->Top += 1; //runterfallen
}
}
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Shape1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
x0 = X; y0 = Y; //merke Mouseposition für move
//Umfärben, nur wenn rechte Maustaste
if (Shift.Contains(ssRight)) {
((TShape*)Sender)->Brush->Color = clRed; //markieren zum Löschen
}
}
//---------------------------------------------------------------------------
unser project was wir zu hilfe benutzen dürfen
Kommentar
-
ich geh ma davon aus das zu den aufgaben noch der code wo die aufgaben aufbauen fehlen, also kann ich hier nur mitmaßen was ein tpanel ist und ob das nen array oder ne c++ stl collection ist.
wenns ne collection ist z.B. nen vector:
vector panels;
vector::reverse_iterator it;
for(it = panels.rbegin(); it != panels.rend(); it++){
if(it->color == BLACK){
delete *it;
it--; //um den iterator wieder valid zu machen durch das löschen.
}
}
aufgabe 5 (auch mutmaßung durch fehlendem src):
TPanel findPanel(string name){
vector panels;
vector::iterator it;
for(it = panels.begin(); it != panels.end(); it++){
if(it->name == name){
return *it;
}
}
}
}
//edit: ah gerade source gesehn wait a minute :P
Kommentar
Kommentar