![]() |
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 |
Re: Während ein Programm läuft, Image hinzufügen
Wo ist denn das Problem dabei?
|
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.
|
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:
Ich hoffe so sollte es sein...
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; Liebe Grüße! |
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:
Soweit erstmal. Sagt mir bitte, wenn das aus irgendeinem Grund nicht geht.
var
f:textfile; s:string; assaignfile(f,'C:\geheim.txt'); reset(f); //Damit ich auch die 1. Zeile lese readln(f,s); closefile(f); 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:
Danke schonmal für eure Antworten. |
Re: Während ein Programm läuft, Image hinzufügen
Zitat:
Achtung: Zeichenbefehle nur in Paint()-Methode ausführen, denn sonst wird beim Neuzeichnen ( beim Verschieben, nach Übdedeckung usw.) deine Zeichnung gelöscht. |
Re: Während ein Programm läuft, Image hinzufügen
Ok, aber mit diesen Methoden selbsterstellen... Wie macht man das?
|
Re: Während ein Programm läuft, Image hinzufügen
Wann soll ein neues erzeugt werden?
|
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.
|
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:
So würde dann der Aufruf aussehen:
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;
Delphi-Quellcode:
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...
ErstelleImage(Form1,100,100,100,100,'a.bmp',True);
Liebe Grüße! |
Re: Während ein Programm läuft, Image hinzufügen
Moin,
erstmal ein kleiner Hinweis: Dieses "a.bmp" ist eigentlich unzureichend. Du weißt nie so richtig, welchen Pfad du davor hast (das muss nicht umbedingt der Pfad zur *.exe sein!). Stattdessen am besten den Pfad deiner *.exe vorne dranfügen:
Delphi-Quellcode:
Das ParamStr(0) gibt den Dateiname deiner exe-Datei zurück. Und das ExtractFilePath dann den Pfad zu einer Datei inklusive eines abschließenden "\".
ExtractFilePath(ParamStr(0)) + 'a.bmp'
Zur "Liste": An sich ist die Einfach zu benutzen:
Delphi-Quellcode:
Hier erstelle ich zuerst ein Objekt mit dem ich dann arbeiten kann. Dann lade ich die Datei (TStringList.LoadFromFile(<Dateiname>)) und gehe dann jede Zeile durch und lasse die als Dialog ausgeben. Dabei gibt TStringList.Count die Anzahl der Zeilen an. Und mit den eckigen Klammern kannst du auf eine Zeile zugreifen (beginnend bei 0).
var
SL : TStringList; i : Integer; begin SL := TStringList.Create; SL.LoadFromFile(....); for i := 0 to SL.Count - 1 do begin ShowMessage(SL[i]); end; end; MfG Fabian |
Re: Während ein Programm läuft, Image hinzufügen
Das "a.bmp" nicht ausreichend ist, ist mir schon klar... Standardmäßig wird jedoch das Programmverzeichnis benutzt.
Es bringt aber eigentlich nichts, wenn man die Zeilen ausgeben lässt. Also wenn man jetzt alle Objekte erstellen will und meine Prozedur benutzen würde, könnte man das so aufrufen: In der Datei sieht das so aus: Name Left Top Width Height Quelle Aufruf:
Delphi-Quellcode:
Edit:
var
SL : TStringList; i : Integer; begin SL := TStringList.Create; SL.LoadFromFile(Dateipfad der *.txt); //Datei mit Angaben zu den Images in die Liste laden i:=0; while i<SL.count do //Liste durchlaufen begin ErstelleImage(Form1,StrToInt(SL[i+1]),StrToInt(SL[i+2]),StrToInt(SL[i+3]),StrToInt(SL[i+4]),SL[i+5],True); i:=i+6; end; SL.Free; end; Also hier wird die Liste SL, in der sich alle Zeilen der Datei befinden, durchlaufen. Bei dieser Methode empfiehlt sich keine for-Schleife, da pro Schleifendurchlauf auf 5 verschiedene Zeilen zugegriffen wird. Anschließend wird die Prozedur ErstelleImage aufgerufen. Als parameter werden Zeilen aus der Liste übergeben. Die Zeilenzahl ist immer relativ zur Zeile, in der sich der Name befindet (Image1,etc) Um zum nächsten Objekt zu springen, wird i um 6 erhöht. Dadurch werden die bereits in SL[i+x] verwendeten Werte übersprungen Liebe Grüße |
Re: Während ein Programm läuft, Image hinzufügen
Zitat:
Zitat:
Zitat:
MfG Fabian |
Re: Während ein Programm läuft, Image hinzufügen
Zitat:
Zitat:
Zitat:
Ich editier den lezten dann mal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz