AGB  ·  Datenschutz  ·  Impressum  







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

problem mit dynamischem array

Ein Thema von chamop87 · begonnen am 20. Feb 2008 · letzter Beitrag vom 20. Feb 2008
Antwort Antwort
Seite 2 von 2     12   
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: problem mit dynamischem array

  Alt 20. Feb 2008, 21:44
Zitat von chamop87:
ich ziehe dort jeweils einen ab, weil das array ja zwangsweise bei null losgeht.
beispiel
anzahl der bilder=10

wenn ich dann schreibe setlength(array,10) habe ich elf speicherplatze, ich brauche aber nur zehn.
Das ist dein Irrtum.

SetLength(randoms, 10) führt zu einem Array mit den Indewerten 0 bis 9 und insgesamt 10 Items. Lies nochmal genau in der Hilfedatei nach.

Gute Nacht.
  Mit Zitat antworten Zitat
chamop87

Registriert seit: 10. Feb 2008
11 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: problem mit dynamischem array

  Alt 20. Feb 2008, 21:49
genau das habe ich doch auch gesagt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#13

Re: problem mit dynamischem array

  Alt 20. Feb 2008, 21:50
Nein du gingst von 11 aus
Markus Kinzler
  Mit Zitat antworten Zitat
busybyte

Registriert seit: 15. Sep 2006
165 Beiträge
 
#14

Re: problem mit dynamischem array

  Alt 20. Feb 2008, 21:51
Dein Code ist Horror,ich habe ihn in soweit korrigiert ,das er für mich halbwegs einen Sinn
ergeben könnte.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var fa:integer;
begin
randomize;
zaehl:=0;
filelistbox1.Directory:='C:\';//Eigene Dateien\Eigene Bilder\';
filelistbox1.Mask:='*.bmp;*.jpg;*.jpeg';

if filelistbox1.Items.Count>1 then
begin
setlength(randoms,filelistbox1.Items.Count); //Edit
bildanzahl:=filelistbox1.items.count; //Edit
end;
ca:=0;
memo1.lines.add(inttostr(filelistbox1.Items.count));
for fa:=low(randoms) to high(randoms) do
randoms[fa]:=fa;
//randoms[11]:=11;
end;//procedure

procedure TForm1.Button1Click(Sender: TObject);
var dateiname,endung:string;
    fi,fa,fb,zufall,bildnr:integer;
begin
//for fa:=0 to filelistbox1.items.count-1 do begin



//Edit
  zufall:=bildanzahl;
  while zufall>high(randoms) do Zufall:=random(bildanzahl); //Edit

//while (zufall>Length(randoms)-1) do exit;
  bildnr:=randoms[zufall];

  //Edit
  for fa:=0 to filelistbox1.Items.count-1 do
  begin
  test:=inttostr(randoms[fa]);
  memo1.lines.add(inttostr(randoms[fa])+' '+inttostr(bildnr));
  end;


 //Letztes Edit memo1.lines.add(test+' '+inttostr(bildnr));
test:='';
  randoms[zufall]:=randoms[bildanzahl-1]; //Edit
  inc(bildanzahl,-1);
  if bildanzahl<0 then begin
    for fb:=0 to filelistbox1.items.count-1 do randoms[fb]:=fb;
    bildanzahl:=filelistbox1.items.count;
  end;

////EDIT
while (bildnr<0) or (bildnr>filelistbox1.items.count-1) do exit;

dateiname:=filelistbox1.items[bildnr];

for fi:=length(dateiname)-3 to length(dateiname) do endung:=endung+dateiname[fi];
endung:=lowercase(endung);
jpeganzeigen(dateiname,endung);
//inc(zaehl);
end;//procedure

procedure TForm1.jpeganzeigen(dateiname:TFilename;endung:string);
var jpeg: TJPEGImage;
begin
bmp := TBitmap.Create;
//Bitmaps anzeigen
if endung='.bmpthen bmp.loadfromfile(dateiname);
//Jpegs anzeigen
if (endung='.jpg') or (endung='jpeg') then begin
  jpeg := TJPEGImage.Create;
  try
    jpeg.CompressionQuality := 100; {Default Value}
    jpeg.LoadFromFile(dateiname);
    bmp.Assign(jpeg);
  finally
    jpeg.Free
  end;
end;//if
image1.picture.bitmap:=bmp;
image1.AutoSize:=true;
bmp.free;
end;//procedure;
I love DiscCat
  Mit Zitat antworten Zitat
busybyte

Registriert seit: 15. Sep 2006
165 Beiträge
 
#15

Re: problem mit dynamischem array

  Alt 20. Feb 2008, 21:58
Tipp:
lagere das ganze in eine eigene function oder precdure aus und übergebe die Parameter
=mehr Übersicht (wer macht was und was soll dabei herauskommen)
I love DiscCat
  Mit Zitat antworten Zitat
busybyte

Registriert seit: 15. Sep 2006
165 Beiträge
 
#16

Re: problem mit dynamischem array

  Alt 20. Feb 2008, 22:56
Delphi-Quellcode:
unit jpganzeigen02;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, FileCtrl,jpeg, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    FileListBox1: TFileListBox;
    Image1: TImage;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  public
   Function getZufall(bildanzahl_:integer):integer;
   Function debugrandoms(L1_,BildNr_:integer):TStrings;
   procedure jpeganzeigen(dateiname:TFilename; endung:string);
   Procedure iniRandoms(L1_:integer);
 { Public-Deklarationen }
  end;

var Form1: TForm1;

implementation {$R *.dfm}

var bmp: TBitmap;
    bildanzahl:integer;
    randoms:array of integer;
 TestS:string;
 Testi:integer;


Procedure TForm1.iniRandoms(L1_:integer);
Var cnt1:integer;
begin
for cnt1:=0 to L1_-1 do randoms[cnt1]:=cnt1;
bildanzahl:=L1_;
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
randomize;

with Memo1 do
begin
Align:=alBottom;
Scrollbars:=ssBoth;
end;

with filelistbox1 do
begin
Directory:='C:\Windows';//Eigene Dateien\Eigene Bilder\';
Mask:='*.bmp;*.jpg;*.jpeg';

 if Items.Count>1 then
 begin
 setlength(randoms,Items.Count); //Edit
 iniRandoms(items.count);
 end;

end;


//randoms[11]:=11;
end;//procedure



Function TForm1.debugrandoms(L1_,BildNr_:integer):TStrings;
Var cnt1:integer;
begin
Result:=TStringlist.Create;
Result.add('BildNr: '+inttostr(BildNr_));
//Länge überschritten ? wenn ja dann reduzieren
while (L1_>Length(randoms)-1) do L1_:=High(randoms);

  for cnt1:=0 to L1_-1 do
  Result.add('Randoms' +inttostr(cnt1)+': '+inttostr(randoms[cnt1]));
  Result.add('*** end of debug ***');
end;


Function TForm1.getZufall(bildanzahl_:integer):integer;
begin
  
  Result:=Random(bildanzahl_); //Edit;
  while Result>high(randoms) do Result:=random(bildanzahl_); //Edit
end;


procedure TForm1.Button1Click(Sender: TObject);
var dateiname,endung:string;
    fi,fa,fb,zufall,bildnr:integer;
begin

  zufall:=GetZufall(bildanzahl);
  bildnr:=randoms[zufall];
  //debug anzeigen
  memo1.lines.Assign(DebugRandoms(filelistbox1.Items.count-1,bildnr));

  dateiname:=filelistbox1.items[bildnr];
  endung:=ExtractFileExt(dateiname);
  jpeganzeigen(dateiname,endung);


  randoms[zufall]:=randoms[bildanzahl-1];
  dec(bildanzahl);
   if bildanzahl<0 then iniRandoms(filelistbox1.items.count);
//inc(zaehl);
end;//procedure



procedure TForm1.jpeganzeigen(dateiname:TFilename;endung:string);
var jpeg: TJPEGImage;
begin
bmp := TBitmap.Create;
//Bitmaps anzeigen
if endung='.bmpthen bmp.loadfromfile(dateiname);
//Jpegs anzeigen
if (endung='.jpg') or (endung='jpeg') then begin
  jpeg := TJPEGImage.Create;
  try
    jpeg.CompressionQuality := 100; {Default Value}
    jpeg.LoadFromFile(dateiname);
    bmp.Assign(jpeg);
  finally
    jpeg.Free
  end;
end;//if
image1.picture.bitmap:=bmp;
image1.AutoSize:=true;
bmp.free;
end;//procedure;

end.
I love DiscCat
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 17:04 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