Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Während ein Programm läuft, Image hinzufügen (https://www.delphipraxis.net/147672-waehrend-ein-programm-laeuft-image-hinzufuegen.html)

zapper54 13. Feb 2010 19:34


Während ein Programm läuft, Image hinzufügen
 
Hallo!

Ich habe ein Problem: Während mein Programm läuft, soll in einer Textdatei gelesen werden. Dort soll dann z.B. das wort image stehen. Immer wenn mein Programm das liest, soll es ein neues Image erstellen, und zwar an den Koordinaten, die dann da hinter stehen sollen und mit dem Bild (Pfad soll dann dort stehen) und natürlich auch in der richtigen Größe.

Könnt ihr mir da helfen?

MfG

zapper54

jaenicke 14. Feb 2010 15:05

Re: Während ein Programm läuft, Image hinzufügen
 
Wo ist denn das Problem dabei?
  • Auslesen der Textdatei selbst?
  • Dynamisches Erstellen eines TImage?
  • Positionieren des TImages?
  • Laden des Bildes?
Hast du schon etwas versucht? Funktioniert etwas nicht?

Lumpiluk 14. Feb 2010 15:39

Re: Während ein Programm läuft, Image hinzufügen
 
Statt einer einfachen Textdatei würde ich dir für so etwas eine INI empfehlen. Ansonsten würde ich die Koordinaten in der normalen Textdatei auch nicht hinter das Wort 'Image' schreiben, sondern jeweils in eine Zeile.

Delphi-Narr 15. Feb 2010 10:46

Re: Während ein Programm läuft, Image hinzufügen
 
Ich gehe jetzt mal davon aus, dass du die Werte so in einer Textdatei stehen hast:

Name des Objekts
Left-Koordinate
Top-Koordinate
Width
Heigth

Beispiel:

Image1
100
100
200
150


Delphi-Quellcode:
Uses ...,extctrls;

//In der Variablendeklaration:
var
   //Ich verwende jetzt mal eine Stringlist, um die Datei zu laden
   SL:TStringlist;
   //Um ein dynamisches Objekt zur Laufzeit zu erstellen, ein TImage in einer Variable deklarieren
   Objekt:TImage;

   //Jetzt muss die Datei geladen werden. Ich mache es beim Klick auf einen Button

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
     SL:=TStringlist.create;
     SL.LoadFromFile('Test.txt');
     i:=0; //Erste Zeile der Stringlist wird durch SL[0] angesprochen (Immer -1)

     //Objekte erstellen durch eine Schleife
     while i<SL.count do
     begin
          Objekt:=TImage.create(Form1);
          Objekt.name:=SL[i]; //Name des Objekts wird aus der Liste ausgelesen
          Objekt.Left:=StrToInt(SL[i+1]); //Leftwert befindet sich eine Zeile hinter dem Namen
          Objekt.Top:=StrToInt(SL[i+2]); //Topwert befindet sich zwei Zeilen hinter dem Namen
          Objekt.Width:=StrToInt(SL[i+3]);
          Objekt.Height:=StrToInt(SL[i+4]);
          Objekt.parent:=Form1;
          Objekt.show;
          Objekt.Canvas.FloodFill(1,1,clblack,fsSurface); //Das musst du halt ersetzen, ein Bild reinladen oder sonst was
          i:=i+5; //Springt zum nächsten Namen in der Liste
     end;
end;
Ich hoffe so sollte es sein...

Liebe Grüße!

zapper54 15. Feb 2010 18:47

Re: Während ein Programm läuft, Image hinzufügen
 
@Delphi-Narr:

Sieht ganz gut aus, ich habe aber noch eine Frage:
Ich würde die Textdatei mit
Delphi-Quellcode:
var
f:textfile;
s:string;

assaignfile(f,'C:\geheim.txt');
reset(f); //Damit ich auch die 1. Zeile lese
readln(f,s);
closefile(f);
Soweit erstmal. Sagt mir bitte, wenn das aus irgendeinem Grund nicht geht.

Jetzt verstehe ich das aber nicht, wie du das mit der Liste machst. Ich habe noch nie mit Listen gearbeitet...
Geht es vielleicht auch einfacher, und nicht so umständlich wie
Zitat:

Delphi-Quellcode:
while i<SL.count do
     begin
          Objekt:=TImage.create(Form1);
          Objekt.name:=SL[i];
          Objekt.Left:=StrToInt(SL[i+1]);
          Objekt.Top:=StrToInt(SL[i+2]);
          Objekt.Width:=StrToInt(SL[i+3]);
          Objekt.Height:=StrToInt(SL[i+4]);
          Objekt.parent:=Form1;
          Objekt.show;
          Objekt.Canvas.FloodFill(1,1,clblack,fsSurface);
          i:=i+5;
     end;

Kann man der Form einen Befehl geben, mit der sie selber ein neues Image erstellt?

Danke schonmal für eure Antworten.

mkinzler 15. Feb 2010 18:54

Re: Während ein Programm läuft, Image hinzufügen
 
Zitat:

Kann man der Form einen Befehl geben, mit der sie selber ein neues Image erstellt?
Man könnte diese um eine entsprechende Methode erweitern.

Achtung: Zeichenbefehle nur in Paint()-Methode ausführen, denn sonst wird beim Neuzeichnen ( beim Verschieben, nach Übdedeckung usw.) deine Zeichnung gelöscht.

zapper54 15. Feb 2010 18:55

Re: Während ein Programm läuft, Image hinzufügen
 
Ok, aber mit diesen Methoden selbsterstellen... Wie macht man das?

mkinzler 15. Feb 2010 18:56

Re: Während ein Programm läuft, Image hinzufügen
 
Wann soll ein neues erzeugt werden?

zapper54 15. Feb 2010 19:10

Re: Während ein Programm läuft, Image hinzufügen
 
Wenn eine Bedingung erfüllt ist, wie z.B. Wenn mein Mauszeiger inerhalb eines Quadrates ist.

Delphi-Narr 15. Feb 2010 19:49

Re: Während ein Programm läuft, Image hinzufügen
 
Du kannst das natürlich auch mit Textfile machen...
Du lädst die Textdatei in die Liste und kannst dann über Sl[Zahl] auf eine bestimmte Zeile der Datei zugreifen.
Du kannst natürlich ein Image erstellen, ohne das Ganze immer einzelnd zu machen.
Hier eine allgemeine Prozedur ohne eine neue Methode zu erstellen:

Delphi-Quellcode:
procedure TForm1.ErstelleImage(Fuer:TForm;aLeft,aTop,aWidth,aHeight:integer; Quelle:string; Strecken:Boolean);
var I:TImage;
begin
     I:=TImage.create(Fuer);
     I.left:=aLeft;
     I.Top:=aTop;
     I.width:=aWidth;
     I.height:=aHeight;
     if FileExists(Quelle) then I.Picture.Bitmap.LoadFromFile(Quelle);
     I.parent:=Fuer;
     I.Stretch:=Strecken;    
end;
So würde dann der Aufruf aussehen:

Delphi-Quellcode:
     ErstelleImage(Form1,100,100,100,100,'a.bmp',True);
Hierbei würde ein Image auf Form1 mit Left, Top, Width und Height = 100 erstellt. Es würde ein Bild aus der Datei "a.bmp" geladen und dieses würde auf die Größe des Images gestreckt werden...

Liebe Grüße!


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 Uhr.
Seite 1 von 2  1 2      

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