Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Wie lösche ich zur Laufzeit erzeugte Images??? (https://www.delphipraxis.net/55804-wie-loesche-ich-zur-laufzeit-erzeugte-images.html)

hoscha123 27. Okt 2005 10:07


Wie lösche ich zur Laufzeit erzeugte Images???
 
Hallo Leute,

bin ziemlich neu hier, also erstmal Gruß an alle und dann natürlich gleich ans Eingemachte.

Die Fragestellung: Wie lösche ich zur Laufzeit erzeugte Images???

Beschreibung allgemein: Durchlaufe eine Datenbank mit den üblichen Controls. In Abhängigkeit eines
Datenbankfeldes lasse dann die Images anzeigen.
Beim 1.mal sind von mir aus 4 Images erzeugt worden.
Beim 2.mal sind vielleicht nur 2 Images vorhanden.
Angezeigt sind aber noch die letzten 4 Images.
Wie bekomme ich also die ersten 4 Images wieder weg.
Das ganze wird auf einem TabSheet-Control dargestellt.


Delphi-Quellcode:
procedure hole_Images(tmpStr:String);

var
  sSymbol, sDateiname : string;
  myPos, myLength : integer;
  mySearchText : string;
  myImg: TImage;
  myLeft : integer;
  myTop : integer;
  myWidth : integer;
  myHeight : integer;

begin
  begin
    myPos := 1;            // Start für While-Schleife setzen, damit sie mindestens 1.mal durchlaufen wird
    mySearchText := sSymbol;        // hier könnte sowas wie 'nr,af,er,tre ....' stehen (z.B. nr.jpg)
    myLength := Length(sSymbol);
    myLeft := 8;                    // Startposition der Images
    myTop := 280;
    myWidth := 80;                  // Größe des Images
    myHeight := 80;
    if myLength > 0 then            // nur abarbeiten wenn Symbol-Text vorhanden ist
    begin
      while (myPos > 0) do          // Solange durchfahren wie Text da ist
      begin
        myPos := pos(',', sSymbol); // Position des Trennungszeichens ermitteln
        if myPos = 0 then        // kommt nur einmal vor
        begin
          tmpStr := sSymbol;        // kommt nur mehrmals vor
        end else
        begin
          tmpStr := copy(sSymbol, 1, myPos - 1); // String herausfiltern
        end;
        sDateiname := tmpStr + '.jpg';
        myImg := TImage.Create(Self);            // neues Images erstellen
        with myImg do
        begin
          Left := myLeft;
          Width := myWidth;
          Height := myHeight;
          Top := myTop;
          parent := PageControl1.ActivePage;   // Hier auf den richtigen Tabsheet setzen
          picture.LoadFromFile(sServer_Name + 'Symbole\' + sDateiname);      // Hier mein Bild
        end;
        delete(sSymbol, 1, myPos);             // String kürzen
        myLength := Length(sSymbol);           // neue Länge des Strings bestimmen
        PageControl1.ActivePage.Refresh;       // Anzeige auffrischen
        myLeft := myLeft + 88;                 // nächste Startposition eines Images
      end;
    end;
  end;
end;
vielen Dank schon mal im Voraus .... Horst

marabu 27. Okt 2005 10:15

Re: Wie lösche ich zur Laufzeit erzeugte Images???
 
Herzlich willkommen in der Delphi-PRAXiS, Horst.

Du packst also ein Bild auf jede Page eines PageControl? Wenn du beim Erzeugen der TImage-Komponente die Page als Owner festlegst, dann wird beim Zerstören der überzähligen Pages die jeweilige Image-Komponente mit zerstört.

Grüße vom marabu

hoscha123 27. Okt 2005 10:19

Re: Wie lösche ich zur Laufzeit erzeugte Images???
 
Hallo marabu,

Nein. Es werden mehrere Images auf einen TabSheet angezeigt. Beim durchlaufen einer Datenbank mit einem
Datacontrol bleibe ich auf dem gleichen Tabsheet. Wechsle also nicht den Tab.

Gruß Horst

schöni 27. Okt 2005 10:35

Re: Wie lösche ich zur Laufzeit erzeugte Images???
 
Hallo hoscha123!

Zunächst Willkommen in der DP!

Nimm doch eine TImagelist. In der speicherst Du Deine Bilder.

1. Methode:

function AddIcon(Image: TIcon): Integer; //Icon in Liste

2. Methode:

procedure Draw(Canvas: TCanvas; X, Y, Index: Integer);
| | |
| | ------------------- BildNr. in der Liste
| |
| ------------------------- Bildposition
|
------------------------------------------ Die Zeichenfläche im TabSheet

Viel Erfolg wünscht

schöni

[edit=Sharky]Doppelposting gelöscht. Mfg, Sharky[/edit]

hoscha123 27. Okt 2005 12:09

Re: Wie lösche ich zur Laufzeit erzeugte Images???
 
Hallo schöni ,

kann keine Imagelist benutzen, da ich jpg oder gif's anzeigen lassen will. Unabhängig davon
ist die Anzahl der Images nicht bekannt(werden aus einer Datenbank gelesen).
Könnte der Ansatz mit inherit der richtige sein???
Wenn ja, wie implementiere ich dieses in meinen Code. Weiterhin, wie oder wo zerstöre ich
diese dann wieder (ginge ja wohl nur beim DataChange des Datacontrol, oder ?).

Gruß Horst


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz