Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Dynamisch erstelltes Panel + Dynamisch erstelltes Image (https://www.delphipraxis.net/9408-dynamisch-erstelltes-panel-dynamisch-erstelltes-image.html)

Deven 25. Sep 2003 21:05


Dynamisch erstelltes Panel + Dynamisch erstelltes Image
 
Hallo :)

Ich habe wieder ein Problem!

Ich lasse im folgenden Source eine bestimmte anzahl von Panels dynamisch erstellen.
Da diese Panels als meine Memory-Karten dienen sollen, möchte ich auf diesen nun auch dynamisch images erstellen und das am besten direkt in einer Funktion... soll heissen

Erstelle ein Panel mit dem namen Panel1 und dann erstelle in diesem Panel1 ein Image mit dem Namen Image1

Allerdings weiss ich nicht so recht wie ich das machen muss/kann...

Als zusatz würde jetzt noch kommen das er immer Zwei Panels zufällig 2 gleiche bilder gibt, diese Bilder aber nur maximal 2 mal vergibt...

Kann mir jemand helfen?

Gruss Deven :D

Delphi-Quellcode:
//Menü Neu-Button (Neue Karte geben)
procedure TForm1.Neu1Click(Sender: TObject);
   var
   i,links,oben,breite,hoehe,verschiebung: Integer;
   C: TComponent;
const
   NamePrefix = 'Panel';
   NamePrefix2 = 'Image';
begin
Form2.showmodal; // Ruft die zweite form auf

if form2.Button1.Tag = 1 then
  begin
      for I := 1 to 64 do
      begin
        C := Self.FindComponent('Panel' + IntToStr(I)); // Sucht die Komponenten

        if (C <> nil) then
          FreeAndNil(C); // Gibt die gefunden Panels frei und setzt sie auf nil
                         // nil bedeutet soetwas wie null, bzw. nicht vorhanden
      end;
  end;


x := Form2.ComboBox1.ItemIndex; // der ItemIndex aus der ComboBox der Form2
                                // gibt hier an die Case den gewünschten Fall
                                // weiter

Case x Of

    1: begin                                                        //4 Karten
        links :=10;
        oben :=10;
        breite :=120;
        hoehe :=120;
        verschiebung :=130;

        for i := 1 to 4 do begin
        TPanel.Create(Self).Name := NamePrefix + IntToStr(i);
(das war mein versuch den Image in den Panel zu machen)
        TImage.Create(TPanel(i)).Name := NamePrefix2 + IntToStr(i);
        with TPanel(FindComponent(NamePrefix + IntToStr(i))) do
         begin
         SetBounds(links, oben, breite, hoehe); //setzt Left, Top, Width, Height
          Inc(oben,verschiebung); // Erhöht "oben" um "verschiebung"

          if i = 2 then
           begin
            Inc(links,verschiebung);
            oben := 10;
           end;

          Parent := self;
         end;
        end;
       end;

    2: begin                                                       //16 Karten
        links :=10;
        oben :=10;
        breite :=120;
        hoehe :=120;
        verschiebung :=130;

        for i := 1 to 16 do begin
        TPanel.Create(Self).Name := NamePrefix + IntToStr(i);
        with TPanel(FindComponent(NamePrefix + IntToStr(i))) do
         begin
         SetBounds(links, oben, breite, hoehe); //setzt Left, Top, Width, Height
          Inc(oben,verschiebung); // Erhöht "oben" um "verschiebung"

          Case i Of
           4: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
           8: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          12: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          16: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          end;
          Parent := self;
         end;
        end;
       end;

    3: begin                                                       //36 Karten
        links :=10;
        oben :=10;
        breite :=120;
        hoehe :=120;
        verschiebung :=130;

        for i := 1 to 36 do begin
        TPanel.Create(Self).Name := NamePrefix + IntToStr(i);
        with TPanel(FindComponent(NamePrefix + IntToStr(i))) do
         begin
         SetBounds(links, oben, breite, hoehe); //setzt Left, Top, Width, Height
          Inc(oben,verschiebung); // Erhöht "oben" um "verschiebung"

          Case i Of
           6: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          12: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          18: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          24: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          30: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          36: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          end;

          Parent := self;
         end;
        end;
       end;
    4: begin                                                       //64 Karten
        links :=10;
        oben :=10;
        breite :=95;
        hoehe :=95;
        verschiebung:=105;

        for i := 1 to 64 do begin
        TPanel.Create(Self).Name := NamePrefix + IntToStr(i);
        with TPanel(FindComponent(NamePrefix + IntToStr(i))) do
         begin
         SetBounds(links, oben, breite, hoehe); // setzt Left, Top, Width, Height in
                                               // einem rutsch
          Inc(oben,verschiebung); // Erhöht "oben" um "verschiebung"

          Case i Of
           8: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          16: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          24: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          32: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          40: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          48: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          56: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          64: begin
              Inc(links,verschiebung);
              oben := 10;
              end;
          end;

          Parent := self;
         end;
        end;
       end;
 end;
end;

Touchdown 25. Sep 2003 22:24

Re: Dynamisch erstelltes Panel + Dynamisch erstelltes Image
 
Grundsätzlich würde sowas auch dynamisch gehen, aber warum willst du es unbedingt?

Mach dir doch einfach ein Formular mit Panels an den gewünschen Panels und ordne diesen dann nur noch verschiedene Grafiken zu.

Tonic1024 26. Sep 2003 09:31

Re: Dynamisch erstelltes Panel + Dynamisch erstelltes Image
 
Moin Deven...

Wenn du eine schnelle Antwort willst, dann mach es den leuten nicht so schwer. Niemand hat Lust sich in X Seiten Quellcode hineinzuversetzen.

Ich habe mir auch nicht die Mühe gemacht alles zu lesen, geschweige nachzuvollziehen. Vielleicht hilft dir dies aber trotzdem weiter...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var MyPanel: TPanel;
    MyImage: TImage;
begin
  MyPanel:=TPanel.Create(Form1);
  with MyPanel do
  begin
    width:=60;
    height:=60;
    top:=20;
    left:=20;
    parent:=Form1;
  end;

  MyImage:=TImage.Create(Form1);
  with MyImage do
  begin
    width:=40;
    height:=40;
    top:=10;
    left:=10;
    parent:=MyPanel;
  end;

end;
Bis denne...

Deven 28. Sep 2003 17:52

Re: Dynamisch erstelltes Panel + Dynamisch erstelltes Image
 
ah danke!

Das hilft mir schon sehr viel weiter ...

Nur ein problem habe ich
wenn ich die Images so dynamisch erstellen lasse,
kann ich diesen nicht im gleichem Zug die Bilder zuordnen ..
er sagt dann im Quellcode immer das es ein Undefinierter Bezeichner ist :(

auch wenn ich Image1 erst mit findcomponent suchen lasse geht es nicht :(

Christian Seehase 28. Sep 2003 18:27

Re: Dynamisch erstelltes Panel + Dynamisch erstelltes Image
 
Moin Deven,

Zitat:

Zitat von Deven
Nur ein problem habe ich
wenn ich die Images so dynamisch erstellen lasse,
kann ich diesen nicht im gleichem Zug die Bilder zuordnen ..

Was Tonic geschrieben hat kannst Du ja erweitern.

Zitat:

Zitat von Deven
auch wenn ich Image1 erst mit findcomponent suchen lasse geht es nicht

Das liegt daran, das derart erzeugte Komponenten keinen Namen haben.
Auch den müsstest Du selber vergeben.


Code:
MyImage:=TImage.Create(Form1);
  with MyImage do
  begin
    [color=red]Name := 'Image'+IntToStr(iNextImage);
    inc(iNextImage);[/color]
    width:=40;
    height:=40;
    top:=10;
    left:=10;
    [color=red]Picture.LoadFromFile(...);[/color]
    parent:=MyPanel;
  end;
iNextImage ist einfach eine Zählvariable vom Typ integer in der der Zähler für die TImage Kompos verwaltet wird.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:55 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 by Thomas Breitkreuz