AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array of Tpicture?

Ein Thema von DerMario · begonnen am 4. Sep 2009 · letzter Beitrag vom 15. Okt 2014
Antwort Antwort
Seite 1 von 2  1 2      
DerMario

Registriert seit: 24. Jan 2008
21 Beiträge
 
#1

Array of Tpicture?

  Alt 4. Sep 2009, 16:02
hallo,

ich bräuchte in einem programm ein array das ich mit bildern vollstopfen kann also ein Array of tpicture.
ich habe da mal ein vereinfachtes prog gebastelt um zu demonstrieren was ich meine...

Delphi-Quellcode:
uses jpeg;

var
  bilder:array[1..4] of tpicture;

procedure TForm1.Button1Click(Sender: TObject);
begin
  bilder[1].create;
  bilder[1].LoadFromFile('bild01.jpg');
  bilder[2].create;
  bilder[2].LoadFromFile('bild02.jpg');
  bilder[3].create;
  bilder[3].LoadFromFile('bild03.jpg');
  bilder[4].create;
  bilder[4].LoadFromFile('bild04.jpg');
end;
wenn ich das prog dann aber starte und den button1 betätige gibt es eine zugriffs verletztung.

hat jemand ne ahnung warum?

mfg mario
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Array of Tpicture?

  Alt 4. Sep 2009, 16:04
Man erzeugt die Instanzen so:

bilder[1] := TPicture.Create;
  Mit Zitat antworten Zitat
DerMario

Registriert seit: 24. Jan 2008
21 Beiträge
 
#3

Re: Array of Tpicture?

  Alt 4. Sep 2009, 16:06
jo danke
  Mit Zitat antworten Zitat
Kuehter

Registriert seit: 14. Okt 2014
59 Beiträge
 
Delphi 7 Professional
 
#4

AW: Array of Tpicture?

  Alt 15. Okt 2014, 07:54
Ich habe das mal einfach übernommen was ihr gemacht habt nur etwas anders geschrieben
ich habe jetzt nur das problem ich kann die bilder nicht auslesen er sagt mir immer der Zeiger sei falsch gesetzt ich weiß jedoch nicht wo der fehler ist.

Delphi-Quellcode:
type
  Tintegerarray = array of integer;
  Tpicarray = array of Timage;


   Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Image8: TImage;
    Image9: TImage;
    Image10: TImage;

var
  Form1: TForm1;

implementation
{$R *.dfm}


function picload: Tpicarray;

var counter: integer;
    i,j,t: integer;

begin
  SetLength(result,10);

  for counter := 1 to 10 do
  begin
    Result[counter] := TImage.Create(nil);
    Result[counter].Picture.LoadFromFile('Symbolik_' + inttoStr(counter) + '.jpg');
  end;

  for counter := 1 to 10 do
  begin
    j := trunc(random(10))+1;
    t := trunc(random(10))+1;

    i := t;
    Result[t]:= Result[j];
    Result[j]:= Result[i];
  end;

end;





function bedingung: Tintegerarray;
var
  Generierer: array[0..3] of integer;
  max, max2: integer;

begin

    repeat

      Generierer[0] := trunc(random(899))+100;
      max := 999 - Generierer[0];
      Generierer[1] := trunc(random(max))+10;
      Generierer[2] := trunc(random(max))+10;
      max := 999 - Generierer[1];
      max2 := 999 - Generierer[2];

      if max > max2 then
        Generierer[3] := trunc(random(max2))+10
      else
        Generierer[3] := trunc(random(max))+10;


      SetLength(result,9);
      result[0] := Generierer[0];
      result[1] := Generierer[1];
      result[2] := Generierer[2];
      result[3] := Generierer[3];
      result[4] := Generierer[0] + Generierer[1]; //A2 + A1 = C1
      result[5] := Generierer[2] + Generierer[0]; //B1 + A1 = C2
      result[6] := Generierer[1] + Generierer[3]; //A2 + B2 = D1
      result[7] := Generierer[2] + Generierer[3]; //B1 + B2 = D2
      result[8] := Result[5]+Result[6]; //engergebnis

   until(result[8] <= 999);

   if (Result[8] = Result[4] + Result[7]) then
        ShowMessage('Die Zahlen Stimmen ')
   else
        ShowMessage('Die Zahlen stimmen nicht');

end;





procedure TForm1.Button1Click(Sender: TObject);
var
  rec : TIntegerarray;
  caller : Tpicarray;

begin
    //Image1.Picture.LoadFromFile('Symbolik_1.jpg');
   rec := bedingung ;
   caller := picload;




   Edit1.Text := InttoStr(rec[0]);
   Edit2.Text := InttoStr(rec[1]);
   Edit3.Text := InttoStr(rec[4]);

   Edit4.Text := InttoStr(rec[2]);
   Edit5.Text := InttoStr(rec[3]);
   Edit6.Text := InttoStr(rec[7]);

   Edit7.Text := InttoStr(rec[5]);
   Edit8.Text := InttoStr(rec[6]);
   Edit9.Text := InttoStr(rec[8]);


   Image2 := caller[2]; // schätze mal hier fehlt was wieß nur nicht was

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
       Randomize;
end;


end.
sobald ich die bilder aus dem array aufrufen will sagt er mir das der zeiger falsch sei
nicht nur Delphi sondern auch Java und C# formen die Welt

Geändert von Kuehter (15. Okt 2014 um 07:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Array of Tpicture?

  Alt 15. Okt 2014, 07:57
Dynamische Arrays beginnen immer mit Index 0 und nicht 1, d.h. Deine Schleifenvariablen sind falsch belegt. Tipp: immer mit High() und Low() arbeiten, dann können Dir die Indizes so gut wie immer wurscht sein.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Kuehter

Registriert seit: 14. Okt 2014
59 Beiträge
 
Delphi 7 Professional
 
#6

AW: Array of Tpicture?

  Alt 15. Okt 2014, 08:06
Ok das funktioniert jetzt mit den Zeigern danke für den Tipp

hoffe ich geh euch nicht zu sehr auf den zeiger weil ich habe noch eine weitere frage denn die bilder die geladen werden werden nicht angezeigt

warum ?
nicht nur Delphi sondern auch Java und C# formen die Welt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Array of Tpicture?

  Alt 15. Okt 2014, 08:16
Wo sollen die denn auch angezeigt werden? Du hast da irgendwelche globalen Variablen (allerdings ohne das Var-Schlüsselwort, eigentlich wäre das ja dann noch eine Tydeklaration, dass der Compiler da nicht meckert ) definiert, die zwar vom Typ TImage sind, aber nirgends erzeugt werden. Und selbst wenn sie erzeugt werden, musst Du immer noch einen Parent zuweisen, der für die Darstellung zuständig sein soll. Dieser Parent muss vom Typ TWinControl sein, also ein Festerhandle haben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Kuehter

Registriert seit: 14. Okt 2014
59 Beiträge
 
Delphi 7 Professional
 
#8

AW: Array of Tpicture?

  Alt 15. Okt 2014, 08:21
ok ich wollte mir das einfacher machen die bilder erkennt er sofort
Image1.Picture.LoadFromFile('Symbolik_1.jpg'); wenn ich das schreibe und zeigt sie auch direkt an
nur ich wollte die in ein array haben das unsortiert ist damit ich mit den bildern an sich noch arbeiten kann nur wenn ich die jetzt anzeigen lasse will habe ich keine ahnung wie ich das machen soll

Delphi-Quellcode:
type
  Tintegerarray = array of integer;
  Tpicarray = array of Timage;

function picload: Tpicarray;

var counter: integer;
    i,j,t: integer;

begin
  SetLength(result,9);

  for counter := Low(result) to high(Result) do
  begin
    Result[counter] := TImage.Create(nil);
    Result[counter].Picture.LoadFromFile('Symbolik_' + inttoStr(counter) + '.jpg');
  end;

  for counter := Low(result) to high(Result) do
  begin
    j := trunc(random(high(Result)))+Low(result);
    t := trunc(random(high(Result)))+Low(result);

    i := t;
    Result[t]:= Result[j];
    Result[j]:= Result[i];
  end;

end;


procedure TForm1.Button1Click(Sender: TObject);
var
  rec : TIntegerarray;
  caller : Tpicarray;

begin
    //Image1.Picture.LoadFromFile('Symbolik_1.jpg');
   rec := bedingung ;
   caller := picload;

   Image1 := Caller[0];
   Image2 := caller[2];

end;
dachte die anzeige kann man so machen wie das mit den arrays oder habe ich mich da getäuscht?
nicht nur Delphi sondern auch Java und C# formen die Welt
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Array of Tpicture?

  Alt 15. Okt 2014, 08:28
Du erzeugst die Images ja auch dynamisch, aber ohne ihnen einen Parent zuzuweisen. Wenn es immer dieselbe Anzahl von Images sein soll, wäre es doch einfacher, sie wie gewohnt auf das Formular zu klatschen und nur die anzuzeigenden Grafiken zufällig aus Deinem Array zuzuweisen. Übrigens solltest Du beachten, dass, wenn Du Dein Array freigibst bzw. die Dimensionen änderst, die enthaltenen Grafiken noch lange nicht freigegeben werden, Du fängst Dir also u.U. Speicherlecks ein. Ich würde an Deiner Stelle daher kein dynamisches Array, sondern eine TObjectList verwenden, da besteht diese Gefahr nicht, solange Du OwnsObjects nicht auf false stellst.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Array of Tpicture?

  Alt 15. Okt 2014, 08:32
Ein TImage ist ein Steuerelement.
Ein TPicture ist ein Klasse die als Container für eine Grafik (TGraphic) in beliebigem Format dient.
Delphi-Quellcode:
type
  TPicArray = array of TPicture;
{...}
  {Die Grafik aus caller[2] in Image2.Picture übernehmen und anzeigen.}
  Image2.Picture.Assign(caller[2]);
Du musst nicht das Steuerelement austauschen, sondern nur die angezeigte Grafik.

Beim Beenden des Formulars nicht vergessen die einzelnen Objekte im Array wieder freizugeben.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 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