B
Hallo,
habe eine Routiene geschrieben, um maximal bei 1024x768 Bildschirmauflösung 784 Bitmap/Image (größe der Bitmap 31x31) auf einem P4 / 2,4Ghz / 512Mb zu laden. Koordinaten und Name der Imagefile liegt in einer Datenbank. Sage vorab, das ich nichts unmögliche möchte. Ladezeit etwa 2 bis 3 sek.
Frage: Besteht die Möglichkeit, dies zu beschleunigen ? Bin immer offen.
// *************************************************************** //
// *************************************************************** //
// *************************************************************** //
//--->>> Gleisbild zum Bearbeiten anzeigen <<<---//
// *************************************************************** //
// *************************************************************** //
// *************************************************************** //
bool TmyFormNewGleisbild::LoadEditGleisbild(AnsiString asFileName,
bool &boE,bool &boW,bool &boA)
//
// erstellt am: 15. August 2006 geändert am: 29. September 2006
//
{
//
AnsiString asR = FNGB+"LoadEditGleisbild";
boE=false;
boW=false;
boA=false;
//
AnsiString asPathSym;
AnsiString asBuffer;
int iRegCount;
int iPos;
int iSize;
int iSatz;
int XX;
//
//
try
{
try
{
//
ProzessRoutine = asR;
//
if (asAktivesGleisbild == asFileName)
{
return false;
}
//
myFormHaupt->ProgressBar1->Visible = true;
myFormHaupt->ProgressBar1->Position = 0;
//
//
//---> Gleisbild Datenbank öffnen
//
//
if (MyQueryOpen(2,asR,
asFileName,asPwUserDb_2,
"Str_1",asMyDatenbank,
"Str_4",asModellbahnGleisbild,
"","",
iRegCount))
{
return true; // und zurück mit Fehler
}
//
asAktivesGleisbild = asFileName;
//
//
//---> Name Gleisbild
//
//
asBuffer = asFileName;
iPos = asBuffer.LastDelimiter(".");
asBuffer = LeftStr(asBuffer, iPos - 1);
asMyCaptionTop = " [ MBCC ] Gleisbild - - > " + asBuffer + " < - -";
FrameKopfLabel1->Label1->Caption = asMyCaptionTop;
//
//
//---> dynamisch erstelle Bitmap's löschen
//
//
iSize = NewTImage.Length;
for (int i=0; i<iSize; i++) {delete NewTImage[i];} NewTImage.Length = 0;
//
iSize = vasNewTBitmap.size();
for (int i=0; i<iSize; i++) {vasNewTBitmap[i].clear();} vasNewTBitmap.clear();
//
iSize = viNewTBitmap.size();
for (int i=0; i<iSize; i++) {viNewTBitmap[i].clear();} viNewTBitmap.clear();
//
//
//---> leere Datenbank ?
//
//
if (iRegCount <= 1)
{
iSatzanzahl = 0;
return false; // und zurück
}
//
//
//---> wieviele aktive Datensätze existieren ?
//
//
DM->PQuery->FindFirst();
iSatz = 0;
//
myFormHaupt->ProgressBar1->Max = iRegCount;
//
for (int i=0; i<iRegCount; i++)
{ // i=0; i<iRegCount; i++
//
if (asAktiv == DM->PQuery->Fields->FieldByName("Str_22")->AsString)
{ // asAktiv == DM->PQuery->Fields->FieldByName("Str_22")->AsString
viNewTBitmap.resize(viNewTBitmap.size() + 1);
viNewTBitmap[iSatz].resize(viNewTBitmap[iSatz].size() + iSizeIntBitmap);
//
vasNewTBitmap.resize(vasNewTBitmap.size() + 1);
vasNewTBitmap[iSatz].resize(vasNewTBitmap[iSatz].size() + iSizeBitmap);
//
viNewTBitmap[iSatz][0] = DM->PQuery->Fields->FieldByName("ID")->AsInteger;
viNewTBitmap[iSatz][1] = DM->PQuery->Fields->FieldByName("Int_2")->AsInteger;
viNewTBitmap[iSatz][2] = DM->PQuery->Fields->FieldByName("Int_3")->AsInteger;
viNewTBitmap[iSatz][3] = DM->PQuery->Fields->FieldByName("Int_4")->AsInteger;
viNewTBitmap[iSatz][4] = DM->PQuery->Fields->FieldByName("Int_5")->AsInteger;
//
vasNewTBitmap[iSatz][0] = DM->PQuery->Fields->FieldByName("Str_21")->AsString;
vasNewTBitmap[iSatz][1] = DM->PQuery->Fields->FieldByName("Str_22")->AsString;
vasNewTBitmap[iSatz][2] = DM->PQuery->Fields->FieldByName("Str_23")->AsString;
vasNewTBitmap[iSatz][3] = DM->PQuery->Fields->FieldByName("Str_24")->AsString;
vasNewTBitmap[iSatz][4] = DM->PQuery->Fields->FieldByName("Str_25")->AsString;
//
myFormHaupt->ProgressBar1->Position += 1;
iSatz ++;
} // asAktiv == DM->PQuery->Fields->FieldByName("Str_22")->AsString
//
DM->PQuery->FindNext();
} // i=0; i<iRegCount; i++
//
//
//---> n Bitmap's dynamisch erstellen
//
//
iSize = vasNewTBitmap.size();
//
for (int iTBitmap=0; iTBitmap<iSize; iTBitmap++)
{ // iTBitmap=0; iTBitmap<iSize; iTBitmap++
asPathSym = asGleisbildBmpPath + vasNewTBitmap[iTBitmap][0];
//
//---> existier Bmp-File ?
//
if (!FileExists(asPathSym))
{ // !FileExists(asFile)
ShowMessage("Bitmap-Datei existiert nicht. " + asPathSym);
return true;
} // !FileExists(asFile)
//
//
//---> jetzt Bitmap dynamisch erstellen
XX = NewTImage.Length;
NewTImage.Length++;
NewTImage[XX] = new TImage(this);
NewTImage[XX]->Left = viNewTBitmap[iTBitmap][1];
NewTImage[XX]->Top = viNewTBitmap[iTBitmap][2];
NewTImage[XX]->Width = iconBitmapWidth;
NewTImage[XX]->Height = iconBitmapHeight;
NewTImage[XX]->Tag = XX;
NewTImage[XX]->Picture->LoadFromFile(asPathSym);
NewTImage[XX]->OnMouseDown = NewTImageMouseDown;
NewTImage[XX]->OnMouseMove = NewTImageMouseMove;
NewTImage[XX]->OnMouseUp = NewTImageMouseUp;
NewTImage[XX]->Parent = this;
NewTImage[XX]->Show();
//
} // iTBitmap=0; iTBitmap<iSize; iTBitmap++
//
//
//
}
__finally
{
//.... Datenbank schliessen
if (MyQueryClose()) { return true; } // und zurück mit Fehler
//
myFormHaupt->ProgressBar1->Position = 0;
myFormHaupt->ProgressBar1->Visible = false;
//....
}
//
//
//
return false; // und zurück
//
//
}
//
//--->
catch (Exception &E)
{iPE=9000;ZentralErrorList(asR,"",iPE,101,boE=true,boW,boA);return true;}
//
//--->
catch (...)
{iPE=9001;ZentralErrorList(asR,"",iPE,102,boE=true,boW,boA);return true;}
//
//
//
//
//
}
//---------------------------------------------------------------------------
gruß Siegfried
[Edit] habe vergessen, Bitmapfile Größe 2.070 k
Gruß Siegfried