Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bild per button verändern (https://www.delphipraxis.net/59605-bild-per-button-veraendern.html)

gelvuun 25. Dez 2005 18:09


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??

Der_Unwissende 25. Dez 2005 18:22

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:
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;
So ungefähr sollte es klappen.

Gruß Der Unwissende

gelvuun 25. Dez 2005 18:26

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.?

Der_Unwissende 25. Dez 2005 19:56

Re: Bild per button verändern
 
Zitat:

Zitat von gelvuun
danke erstmal...
nur weil ich noch ziemlich neu bin hab ich noch folgende fragen:

Na dann erstmal Herzlich Willkommen in der Delphi Praxis :dp:

Zitat:

Zitat von gelvuun
was heißt das constructor?
as heißt das self.?

Delphi beherscht ein wenig die Objekt Orientierte Programmierung (OOP). Sehr sehr stark vereinfacht heißt es, dass du aus Klassen konkrete Instanzen machst. Eine Klasse ist ein Bauplan (den du schreibst). Möchtest du jetzt auch was produzieren, so musst du auch die Fabrik anwerfen. Das was sie produziert nennt man eine Instanz.
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;

gelvuun 26. Dez 2005 09:46

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 00:45 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