Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Bilder aus Thumnails in einem Image anzeigen lassen (https://www.delphipraxis.net/69199-bilder-aus-thumnails-einem-image-anzeigen-lassen.html)

spartakus 11. Mai 2006 17:26


Bilder aus Thumnails in einem Image anzeigen lassen
 
Hallo!


1.ich lade die Bilder erst auf die Scrollbox...
2.die Bilder befinden sich jetzt auf Scrollbox als Thumbs...
3.jetzt klicke ich auf einem Bild in der Scrollbox...
4.das bild dass ich angeklickt habe ,sollte (ich habe noch auf Form einer Image
Komponente) auf dem Image Kompo. angezeigt be. geladen werden ...

Das Problen ist ;

wenn ich diese Code nehme läd nur das letzte Bild von Thumbnails!
Delphi-Quellcode:
Image1.Picture.Assign(pct.Create);
-------------
...wenn ich diese nehme läd jedem angeklicktes bild ,aber nicht in Orginal grösse!
Delphi-Quellcode:
 Image1.Picture.Assign(TImage(Sender).Picture);
wie kann ich das Problem lösen ?
danke!

hier die kompelette Code! von DBR
_____________________________
Delphi-Quellcode:
[img]][img=http//www.sanalresim.com/rs/64589.jpg] Resim: [/url][/img]
{$R *.dfm}
 

var
  sl, gr, ab: TStringlist;
  im: array of TImage;
  pct: TPicture;
  bmp: TBitmap;


 procedure freigeben;
var x: integer;
begin
  for x := 0 to length(im) - 1 do
    im[x].free;
  im := nil;
end;



procedure TForm1.FormCreate(Sender: TObject);
begin
  pct := TPicture.create;
  bmp := TBitmap.create;
  sl := TStringlist.create;
  gr := TStringlist.create;
  ab := TStringlist.create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   freigeben;
  ab.free;
  gr.free;
  sl.free;
  pct.free;
  bmp.free;
end;

 procedure anpassen(datei: string; mass: integer;
   Image: TImage; Hintergrund, rand: TColor);
var
  faktor: double;
  fehler: boolean;
const s = 'FEHLER';
begin
  fehler := false;
  try
    pct.loadfromfile(datei);
  except
    fehler := true;
  end;
  ab.add(Inttostr(pct.width) + ' x ' + inttostr(pct.height));
  if pct.width > pct.Height then begin
    faktor := pct.height / pct.width;
    bmp.width := mass - 2;
    bmp.height := trunc(mass * faktor) - 2;
  end else begin
    faktor := pct.width / pct.height;
    bmp.height := mass - 2;
    bmp.width := trunc(mass * faktor) - 2;
  end;
  bmp.canvas.brush.color := hintergrund;
  bmp.canvas.fillrect(bmp.canvas.cliprect);
  if not fehler then
    bmp.canvas.stretchdraw(rect(0, 0, bmp.width, bmp.height), pct.graphic);
  with image.picture.bitmap do begin
    width := mass;
    height := mass;
    canvas.font.color := clred;
    canvas.pen.color := rand;
    canvas.brush.color := hintergrund;
    canvas.rectangle(0, 0, image.width, image.height);
    if fehler then
      canvas.textout((mass - canvas.textwidth(s)) div 2, (mass -
        canvas.textheight(s)) div 2, 'FEHLER') else
      canvas.draw((width - bmp.width) div 2, (height - bmp.height) div 2, bmp);
  end;
end;
//________________

  procedure suchen(pfad, filter: string);
var sr: TWin32FindData;
  h: THandle;
begin

  sl.clear;
  gr.clear;
  ab.clear;
 
    if ansilastchar(pfad) <> '' then pfad := pfad + '';
  h := FindFirstFile(PChar(pfad + '*.*'), sr);
  if h <> INVALID_HANDLE_VALUE then repeat
      if (sr.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY = 0)
        and (pos(lowercase(extractfileext(sr.cFileName)), filter) > 0)
        then begin
        sl.add(pfad + sr.cFileName);
        gr.add(inttostr(round(
          (sr.nFileSizeHigh * MAXDWORD + sr.nFileSizeLow) / 1024 + 0.49)))
      end;
    until Findnextfile(h, sr) = false;
  windows.FindClose(h);
end;

 procedure TForm1.MDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
 
          begin
         if button= mbleft then

       //LÄD NUR DAS LETZTE BILD VOM THUMBNAILS !IN ORGINAL GRÖSSE
     Image1.Picture.Assign(pct.Create);
           
    //läd jedem angeklicktes bild ,aber nicht in Orginal grösse!   
          { Image1.Picture.Assign(TImage(Sender).Picture); }
       
          end;
          end;


procedure TForm1.Button1Click(Sender: TObject); // BILDER LADEN
 var
  abstand, groesse, nebeneinander, untereinander, x, y, z: integer;
begin
  screen.cursor := crHourglass;
  groesse := 90; { Thumbnailgröße } 
  abstand := 2;

  freigeben;
       
         suchen('', '.bmp.wmf.jpg.jpeg'); { '.bmp.emf.wmf.jpg.jpeg' }
  if sl.count > 0 then begin
    setlength(im, sl.count);
    progressbar1.max := sl.count;
    z := 0;
    nebeneinander := (scrollbox1.clientwidth - abstand) div (groesse +
      abstand);     { oder frei festlegen, z.B.: nebeneinander:=20; }
    if sl.count < nebeneinander then nebeneinander := sl.count;
    untereinander := (sl.count div nebeneinander) +
      ord(sl.count mod nebeneinander > 0);
    for y := 0 to untereinander - 1 do
      for x := 0 to nebeneinander - 1 do begin
        if z < sl.count then begin
          im[z] := TImage.create(scrollbox1);
          im[z].tag := z;
          im[z].width := groesse;
          im[z].height := groesse;
          im[z].parent := scrollbox1;
          im[z].left := abstand + x * (groesse + abstand);
          im[z].top := abstand + y * (groesse + abstand);
          im[z].OnMouseDown := MDown;
          anpassen(sl[z], groesse, im[z], scrollbox1.color, clBtnShadow);
          inc(z);
          progressbar1.position := z;
        end;
      end;
    { falls "nebeneinander" nicht frei festgelegt wurde, dann z.B.: }
    scrollbox1.clientwidth := (groesse + abstand) * nebeneinander + abstand;
  end;
  progressbar1.position := 0;
  screen.cursor := crDefault;
end;

Mavarik 11. Mai 2006 19:14

Re: Bilder aus Thumnails in einem Image anzeigen lassen
 
Hi!

Wie wäre es mit

Delphi-Quellcode:

Image1.Picture.Loadfromfile(sl[(sender as TImage).Tag])
Wenn ich es auf die schnelle richtig gelesen habe...

Frank :coder:

spartakus 12. Mai 2006 23:12

Re: Bilder aus Thumnails in einem Image anzeigen lassen
 
danke Mavarik ,super es funktioniert!

danku 4. Aug 2006 11:48

Re: Bilder aus Thumnails in einem Image anzeigen lassen
 
ich hab das auch mal getestet aber obwohl ein image1 vorhanden ist, wirds als "nicht vorhanden" angezeigt. ???


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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