![]() |
Bild per button verändern
Hallo!
also es geht wieder um mein mathe-programm (1. version zum download fertig, wird demnächst bei den opensource-programmen hinzugefügt) also das is mein problem: Ich hab ein bild auf dem Formular das angezeigt werden soll wenn der radiobutton 'kreis' aktiviert ist. Ich will aber das wenn ich jetzt den radiobutton 'sektor' anklicke, sich der inhalt von diesem picture ändert/ein neues bild geladen wird welche dann an dieser stelle eingesetzt wird.... WIE GEHT DAS?? |
Re: Bild per button verändern
Hi,
lad die beiden Bilder in jeweils ein Bitmap-Objekt (mir fällt gerade nicht der Name der Liste ein, die du alternativ nehmen kannst wenn die gleich groß sind). Bei einem Button klick weißt du dann immer nur die entsprechende Bitmap zu :
Delphi-Quellcode:
So ungefähr sollte es klappen.
constructor TDeineKlasse.create;
begin inherited create; self.BmpKreis := TBitmap.Create; self.BmpKreis.LoadFromFile(<Pfad zur Bitmap>); self.BmpSektor := TBitmap.Create; self.BmpSektor.LoadFromFile(<Pfad zur Bitmap>); ... end; procedure TDeineKlasse.RadioButtonKreisClick(Sender: TObject); begin self.RadioButtonSektor.Checked := False; self.RadioButtonKreis.Checked := True; self.Image1.Picture.Bitmap := self.BmpKreis; end; procedure TDeineKlasse.RadioButtonKreisClick(Sender: TObject); begin self.RadioButtonSektor.Checked := True; self.RadioButtonKreis.Checked := False; self.Image1.Picture.Bitmap := self.BmpSektor; end; Gruß Der Unwissende |
Re: Bild per button verändern
danke erstmal...
nur weil ich noch ziemlich neu bin hab ich noch folgende fragen: was heißt das constructor? as heißt das self.? |
Re: Bild per button verändern
Zitat:
Zitat:
Für dein Programm heißt dass, das nur eine Instanz auch wirklich Speicher belegt. Die Klasse sagt nur was eine Instanz speichern könnte. Variablen die einen Klassentyp haben (etwas mit = class(...)) sind nur Referenzen auf eine Instanz. Sie zeigen also nur auf eine Instanz oder auf nil, wenn es keine Instanz gibt. Um nun eine Klasse anzulegen, musst dein Rechner Speicher reservieren. Dazu fragt er Windows nach einer bestimmten Menge Speicher, Winows sucht eine freie Stelle, reserviert den Speicher und gibt die Adresse zurück (das ist dann die Referenz). Genau das erledigt dein Konstruktor. Hat die Instanz ihren Zweck erfüllt, brauchst du sie nicht mehr (also auch nicht ihren Speicher), dann rufst du den Destruktor auf. Dieser sagt Windows dann, dass der Speicher wieder freigegeben werden kann. Bei deinem Formular / Hauptfenster wird der Konstruktor immer schon von Delphi aufgerufen. Da wird dann das Formular erzeugt und dann auch gleich angezeigt. Hier kannst du einfach unter den Ereignissen doppelt auf das OnCreate Ereignis klicken. Dieses wird immer direkt nach dem Aufruf des Konstruktor aufgerufen. Dort kannst du dann die Bitmaps laden. Damit du zwei Bitmaps speichern kannst, musst du vorher im private-Teil deines Forms einfach zwei Variablen vom Typ TBitmap eintragen. Dies sind dann auch Klassen. Damit du sie benutzen kannst, reserviert TBitmap.Create einfach Speicher für ein TBitmap. Die Adresse würde in meinem Beispiel in BmpKreis gespeichert werden. Da BmpKreis eine Variable von TDeineKlasse (bei dir wahrscheinlich TForm1) ist, sagt self nur, dass du dich auf die eigene Klasse beziehst. Jede Methode, die zu einer Klasse gehört beginnt immer procedure/function TKlassenname., möchtest du in der Methode auf Variablen von TKlassenname zugreifen stellt man immer ein self. vor. Dann ist klar welche Variable du meinst. Braucht man auch häufiger mal, z.B. :
Delphi-Quellcode:
type
TKlasseIrgendwas = class(TObject) private foo : Integer; // (1) procedure setFoo(foo : Integer); end; ... procedure TKlasseIrgendwas.setFoo(foo : Integer); // (2) begin // wie sagst du jetzt, dass die Klassenvariable foo (1) den Wert von diesem foo (2) hier bekommen soll? // heißt ja dummerweise beide gleich self.foo = foo; // self.foo = (1) // foo = letzte Deklaration von foo = (2) end; |
Re: Bild per button verändern
oi.... kompliziert....
weiß net ob ich das jetz richtig verstanden hab aber danke ich werds mal versuchen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 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