Rad Studio XE und vector.erase
-
Ok,
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Game.h" #include "Editor.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm2 *Form2; std::vector<TImage*> ImgVector; //--------------------------------------------------------------------------- __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm2::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { switch (Key){ case 69 : //Editor öffnen (E- Taste) Form2->Close();//Editor schliessen WURDE ZUM TESTEN ÜBERGANGEN!!! break; case VK_ESCAPE : //Escape (Programm beenden) Key=0; //Kein "Ping"-Sound Application->Terminate(); break; } } //--------------------------------------------------------------------------- void __fastcall TForm2::FormPaint(TObject *Sender) { Top=0; Left=1921; } //--------------------------------------------------------------------------- void __fastcall TForm2::FormShow(TObject *Sender) { DisEnabelAllPicControls->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_AddPictureClick(TObject *Sender) { // Bilder hinzufügen if (OpenPictureDialog1->Execute()) { TImage *img = new TImage(Form1); img->Picture->LoadFromFile(OpenPictureDialog1->FileName); img->Left=0; img->Top=0; img->Width=img->Picture->Width; img->Height=img->Picture->Height; img->Stretch=true; img->Parent=Form1; ImgVector.push_back(img); lb_PictureList->AddItem(ExtractFileName(OpenPictureDialog1->FileName), NULL); lb_PictureList->ItemIndex=lb_PictureList->Count-1; EnableAllPicControls->Execute(); UpdatePicturePositionEdits->Execute(); } } //--------------------------------------------------------------------------- //*************************************************************************** //Manage Picture Controls : void __fastcall TForm2::bt_btn_PicRightClick(TObject *Sender) {// Ausgewältes Bild nach rechts verschieben ImgVector[lb_PictureList->ItemIndex]->Left++; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_PicLeftClick(TObject *Sender) {// Ausgewältes Bild nach links verschieben ImgVector[lb_PictureList->ItemIndex]->Left--; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_PicUpClick(TObject *Sender) {// Ausgewältes Bild nach oben verschieben ImgVector[lb_PictureList->ItemIndex]->Top--; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_PicDownClick(TObject *Sender) {// Ausgewältes Bild nach unten verschieben ImgVector[lb_PictureList->ItemIndex]->Top++; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_PicSizePlusClick(TObject *Sender) {//Bild vergrössern ImgVector[lb_PictureList->ItemIndex]->Width++; ScaleImageWidth->Execute(); ImgVector[lb_PictureList->ItemIndex]->Height=ImgVector[lb_PictureList->ItemIndex]->Picture->Height*PicFak; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_PicSizeMinusClick(TObject *Sender) {//Bild verkleinern ImgVector[lb_PictureList->ItemIndex]->Width--; ScaleImageWidth->Execute(); ImgVector[lb_PictureList->ItemIndex]->Height=ImgVector[lb_PictureList->ItemIndex]->Picture->Height*PicFak; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::ed_PicLeftChange(TObject *Sender) {//Links-Wert eingeben für ausgewäles Bild if (ed_PicLeft->Text != "") { ImgVector[lb_PictureList->ItemIndex]->Left=StrToInt(ed_PicLeft->Text); } } //--------------------------------------------------------------------------- void __fastcall TForm2::ed_PicTopChange(TObject *Sender) {//Top-Wert eingeben für ausgewäles Bild if (ed_PicTop->Text != "") { ImgVector[lb_PictureList->ItemIndex]->Top=StrToInt(ed_PicTop->Text); } } //--------------------------------------------------------------------------- void __fastcall TForm2::lb_PictureListClick(TObject *Sender) {//Wenn Bild-Auswahl angeklickt wird dann Werte in Edits übernehmen EnableAllPicControls->Execute(); UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::ed_PicWidthKeyPress(TObject *Sender, wchar_t &Key) {//Werte aus ed_PicWidth übernehmen und Bildhöhe proportional skalieren if (Key == VK_RETURN) {//Enter muss gedrückt werden Key=0;//Kein "Ping"-Sound ImgVector[lb_PictureList->ItemIndex]->Width=StrToInt(ed_PicWidth->Text); ScaleImageWidth->Execute(); ImgVector[lb_PictureList->ItemIndex]->Height=ImgVector[lb_PictureList->ItemIndex]->Picture->Height*PicFak; UpdatePicturePositionEdits->Execute(); } } //--------------------------------------------------------------------------- void __fastcall TForm2::ed_PicHeightKeyPress(TObject *Sender, wchar_t &Key) {//Werte aus ed_PicHeight übernehmen und Bildbreite proportional skalieren if (Key == VK_RETURN) {//Enter muss gedrückt werden Key=0;//Kein "Ping"-Sound ImgVector[lb_PictureList->ItemIndex]->Height=StrToInt(ed_PicHeight->Text); ScaleImageHeight->Execute(); ImgVector[lb_PictureList->ItemIndex]->Width=ImgVector[lb_PictureList->ItemIndex]->Picture->Width*PicFak; UpdatePicturePositionEdits->Execute(); } } //--------------------------------------------------------------------------- void __fastcall TForm2::UpdatePicturePositionEditsExecute(TObject *Sender) { ed_PicLeft->Text=IntToStr(ImgVector[lb_PictureList->ItemIndex]->Left); ed_PicTop->Text=IntToStr(ImgVector[lb_PictureList->ItemIndex]->Top); ed_PicWidth->Text=IntToStr(ImgVector[lb_PictureList->ItemIndex]->Width); ed_PicHeight->Text=IntToStr(ImgVector[lb_PictureList->ItemIndex]->Height); } //--------------------------------------------------------------------------- void __fastcall TForm2::ScaleImageWidthExecute(TObject *Sender) { ImageWidth=ImgVector[lb_PictureList->ItemIndex]->Width; PicWidth=ImgVector[lb_PictureList->ItemIndex]->Picture->Width; PicFak=ImageWidth/PicWidth; } //--------------------------------------------------------------------------- void __fastcall TForm2::ScaleImageHeightExecute(TObject *Sender) { ImageHeight=ImgVector[lb_PictureList->ItemIndex]->Height; PicHeight=ImgVector[lb_PictureList->ItemIndex]->Picture->Height; PicFak=ImageHeight/PicHeight; } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_ResetPicSizeClick(TObject *Sender) { ImgVector[lb_PictureList->ItemIndex]->Width=ImgVector[lb_PictureList->ItemIndex]->Picture->Width; ImgVector[lb_PictureList->ItemIndex]->Height=ImgVector[lb_PictureList->ItemIndex]->Picture->Height; UpdatePicturePositionEdits->Execute(); } //--------------------------------------------------------------------------- void __fastcall TForm2::EnableAllPicControlsExecute(TObject *Sender) { ed_PicLeft->Enabled=true; ed_PicTop->Enabled=true; ed_PicWidth->Enabled=true; ed_PicHeight->Enabled=true; bt_btn_PicUp->Enabled=true; bt_btn_PicDown->Enabled=true; bt_btn_PicLeft->Enabled=true; bt_btn_PicRight->Enabled=true; bt_btn_PicSizePlus->Enabled=true; bt_btn_PicSizeMinus->Enabled=true; bt_btn_DelPicture->Enabled=true; bt_btn_ResetPicSize->Enabled=true; } void __fastcall TForm2::DisEnabelAllPicControlsExecute(TObject *Sender) { ed_PicLeft->Enabled=false; ed_PicTop->Enabled=false; ed_PicWidth->Enabled=false; ed_PicHeight->Enabled=false; bt_btn_PicUp->Enabled=false; bt_btn_PicDown->Enabled=false; bt_btn_PicLeft->Enabled=false; bt_btn_PicRight->Enabled=false; bt_btn_PicSizePlus->Enabled=false; bt_btn_PicSizeMinus->Enabled=false; bt_btn_DelPicture->Enabled=false; bt_btn_ResetPicSize->Enabled=false; } //--------------------------------------------------------------------------- //*************************************************************************** //End of Picture Control void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { ImgVector.clear();//Bin nicht sicher, ob die Bilder mitgelöscht werden } //--------------------------------------------------------------------------- void __fastcall TForm2::bt_btn_DelPictureClick(TObject *Sender) { lb_PictureList->Items->Delete(lb_PictureList->ItemIndex); DisEnabelAllPicControls->Execute(); ImgVector.erase(lb_PictureList->ItemIndex); } //---------------------------------------------------------------------------
Ganz unten
-
@manni66 sagte in Rad Studio XE und vector.erase:
int?
-
@Jockelx sagte in Rad Studio XE und vector.erase:
@wNw :
Was ist x?
@manni66 sagte in Rad Studio XE und vector.erase:
@wNw sagte in Rad Studio XE und vector.erase:
erase(int)
int?
-
Das Problem ist doch, dass der Compiler kein vector.erase kennt.
Vergiss das int. Da ist alles in int.
-
Es gibt ja auch kein vector::erase mit
int
als Parameter.PS. Und warum ist
ImgVector
global?Und das Gegenteil von
enable
istdisable
(nichtDisEnabel
)...
-
@wNw sagte in Rad Studio XE und vector.erase:
Das Problem ist doch, dass der Compiler kein vector.erase kennt.
NEIN
-
Klingelt es endlich?
Und schomal der Link für die Folgefrage:
-
Ok, danke.
Dann frage ich mal so:
Wie würdet ihr in meinem Fall vorgehen?
Ich will einfach nur ein Element aus dem vector löschen können.
DankeÜberschneidung, Jockelx
-
ImgVector.erase(lImgVector.begin() + b_PictureList->ItemIndex);
-
@manni66 sagte in Rad Studio XE und vector.erase:
ImgVector.erase(lImgVector.begin() + b_PictureList->ItemIndex);
NeinDoch
-
Viellen Dank für eure Hilfe, aber anscheinend drücke ich mich falsch aus.
manni66 das bringt doch nichts und hat mit meinem Problem nichts zu tun.
Ich will wissen, warum der Compiler vector.erase nicht kennt obwohl es doch in den "Statuten" von c++ steht:
http://www.cplusplus.com/reference/vector/vector/erase/#include <vector>
Habe ich in der Header (.h) Datei.
-
@Jockelx: Warum nein? @wNw möchte das Element an Position
lb_PictureList->ItemIndex
löschen und das geht mit
dem von @manni66 gezeigten Code (bis auf, daß sich dort einl
verschoben hat ;- ):ImgVector.erase(ImgVector.begin() + lb_PictureList->ItemIndex);
-
@wNw sagte in Rad Studio XE und vector.erase:
manni66 das bringt doch nichts und hat mit meinem Problem nichts zu tun
Du kennst dich ja aus, da halt ich mich dann zurück ...
-
@Th69
Und wer aktualisiert die Indices der verbleibenden Items? Oder soll es beim zweiten löschen des letzten knallen bzw. den falschen löschen?
Wobei sich natürlich die Frage stellt, wozu das ItemIndex gut ist überhaupt gut ist.
-
@Th69 Danke.
Aber es gibt kein .erase bei ImgVector...
Es ist zum verzweifeln
-
@wNw gibt nicht = "keine Übereinstimmung"?
Die Fehlermeldung auf englisch ist "no matching overload found for std::vector<T>::erase".
Du musst verstehen die Fehlermeldungen richtig zu verstehen und was das in C++ bedeuetet.
Es gibt keine Überladung (<- lernen was das heißt, wenn unbekannt!) von der erase Funktionen die einen integer nimmt. Das heißt nicht dass es erase gar nicht gibt, das ist ja schmarn.
-
Muss ich da vielleicht was in den Compiler-Einstellungen verändern, damit .erase erkannt wird?
-
@wNw Auch wenn du ja eh alles besser weißt:
Hast du das@Th69 sagte in Rad Studio XE und vector.erase:
ImgVector.erase(ImgVector.begin() + lb_PictureList->ItemIndex);
ausprobiert? Das kompilert bei dir sicher auch.
Warum das semantisch (wahrscheinlich) nicht sinnvoll ist, hab ich schon gesagt, aber einen Kompilerfehler kriegst du nicht mehr.
-
Hier mal ein Screenshot:
http://www.imagebam.com/image/0a8e341347779150
-
Hast du meinen Code jetzt mal übernommen? Ansonsten zeige komplette Fehlermeldung!
@Jockelx: ItemIndex stellt den aktuell selektierten Eintrag in der ListBox dar (da muß nichts nachträglich korrigiert werden - außer evtl. vorher eine Abfrage auf "nichts ausgewählt" (
-1
)).