Arsip: Efisien Coding (menampilkan 2 gambar)

 
user image
more 16 years ago

zones

Delphiers mo tanya dong apakah ada yang lebih efisien dari ini, gunanya utk menampilkan 2 gambar sekaligus dalam 1 form. procedure TfrmPreviewGambar.SpeedButton5Click(Sender: TObject); var Stream1, Stream2 : TADOBlobStream; GambarJpeg1, GambarJpeg2 : TJpegImage; Buffer1, Buffer2 : Word; begin GambarJpeg1 := TJpegImage.Create; GambarJpeg2 := TJpegImage.Create; Stream1 := TADOBlobStream.Create(DM.QueIklan2Level1, bmRead); Stream1.Read(Buffer1, SizeOf(Buffer1)); Stream1.Position := 0; Stream2 := TADOBlobStream.Create(DM.QueIklan2Level2, bmRead); Stream2.Read(Buffer2, SizeOf(Buffer2)); Stream2.Position := 0; if Buffer1 = $D8FF then begin GambarJpeg1.LoadFromStream(Stream1); Image1.Picture.Graphic := GambarJpeg1; end; if Buffer2 = $D8FF then begin GambarJpeg2.LoadFromStream(Stream2); Image2.Picture.Graphic := GambarJpeg2; end; end;
user image
more 16 years ago

saysansay

Saya Coba menampilkan dalam versi yang berbeda Semoga bisa jadi bahan pembelajaran:

Function ShowImage(FQry:TADOQuery,FBufer:word):TJpegImage;
Var 
 FGambar:TJpegImage;FStream: TADOBlobStream; 
begin
  Try 
    FGambar := TJpegImage.Create ;
    Fstream := TADOStream.Create(Fqry,bmRead);//Fqry tidak dicretae karena merupakan variable Dummy
    FStream.Read(FBufer,SizeOf(FBufer)) ;
    Stream.Position:=0;
    if FBufer=$D8EFF Then
    Begin
     Fgambar.LoadFromStream(Fstream);
     Result :=Fgambar;
    end;
  Finnaly
    FGambar.Free;
    FStream.Free;
  end
end;
Cara Penggunaan :

  Image1.Picture.Graphic:=ShowImange(DM.QueIklan2Level1,$D8FF);
  Image2.Picture.Graphic:=ShowImange(DM.QueIklan2Level2,$D8FF);
Note : Untuk rekan-rekan yang lain, Tolong gunakan Forum untuk sharing informasi dan bukan untuk ajang OOT. Terutama Om@eksant lebih baik diam dari pada tidak memberikan solusi (sorry saya hanya menggingatkan demi menjaga qualitas forum kita)
user image
more 16 years ago

zones

@saysansay " Fstream := TADOStream.Create(Fqry,bmRead); //Fqry tidak dicretae karena merupakan variable Dummy " tidak dicreate karena hanya menggunakan streamnya saja yahc bawaan dari ADODB klo ndak salah hee,,,, :d (pake bahasa yg di mengerti sendiri). OK nanti malam saya akan mengupas pemberian mas saysansay.
user image
more 16 years ago

zones

@saysansay saya sdh mencoba function yang diberikan, tetapi ada sedikit kendala di : "FStream := TAdoBlobStream.Create(FQry, bmRead);" ==> "[Error] Unit1.pas(61): Incompatible types: 'TBlobField' and 'TADOQuery" Bukankah TBlobField sdh ada di TAdoQuery yahc ?karena sama2 dari unit ADODB. berikut listing lengkapnya : function ShowImage(FQry:TAdoQuery; FBufer: word):TJpegImage; var FGambar : TJpegImage; FStream : TADOBlobStream; begin try FGambar := TJpegImage.Create; FStream := TAdoBlobStream.Create(FQry, bmRead); FStream.Read(FBufer, SizeOf(FBufer)); FStream.Position := 0; if FBufer = $D8FF then begin FGambar.LoadFromStream(FStream); Result := FGambar; end; Finally; FGambar.Free; FStream.Free; end end;
user image
more 16 years ago

deLogic

coba diganti menjadi FStream := TADOBlobStream.Create(FQry.FieldByName('NAMAFIELDNYA'), bmRead)
user image
more 16 years ago

DelphiExpert

Koreksi utk San:

    if FBufer=$D8EFF Then
    Begin
     ...
     Result := Fgambar; // NB: RETURN VALUE MENGEMBALIKAN POINTER KE LOCAL VARIABLE FGAMBAR
    end;
  Finnaly
    FGambar.Free; // NB: RETURN VALUE BELUM DIPAKE UDAH DI FREE? berpotensi EAccessViolation! 
  end;
Kitik-kitik berikut mungkin dapat dipertimbangkan :)

function LoadJPEGImage(const Source: TField; const Dest: TPicture): Boolean;
var Temp: TStream;
    Img: TJPEGImage;
begin
  Result:= (Source is TBlobField) and (Source.Size > 0); // is greather than zero?
  if Result then
  begin
    Temp:= TMemoryStream.Create;
    try
      TBlobField(Source).SaveToStream(Temp);
      Temp.Seek(0, soFromBeginning);
      Dest.Graphic:= nil;
      Img:= TJPEGImage.Create;
      try
        Img.LoadFromStream(Temp);
        Dest.Graphic:= Img;
      except
        if not Assigned(Dest.Graphic) then
          FreeAndNil(Img)
        else
          Dest.Graphic:= nil;
        Result:= False;
      end;
    finally
      FreeAndNil(Temp);
    end;
  end;
end;
Penggunaan:

begin
  if not LoadJPEGImage(DM.QueIklan2Level1, Image1.Picture) then
    raise Exception.Create('Cannot load image!');
end;  
user image
more 16 years ago

saysansay

@zones maaf klu sebelumnya saya tidak mencobanya terlebih dahulu :D, mas @DL,@DE Thanks untuk koreksinya
user image
more 16 years ago

zones

hee.... @saysansay ndak apa2 toch saya lebih mengerti apa yang ingin di beritahukan, setelah melihat ralat dari @DE jadi tau TAdoBlob itu masuk ke Tfield. Thanks to @DE mungkin function yang diberikan bisa di gunakan utk hal yang lain <==terinspirasi soale ada permasalahan yang sama.
more ...
  • Pages:
  • 1
Share to

AI Forward

🚀 We're thrilled to partner with Alibaba Cloud for "AI Forward - Alibaba Cloud Global Developer Summit 2025" in Jakarta! Join us and explore the future of AI. Register now: https://int.alibabacloud.com/m/1000400772/
#AlibabaCloud #DeveloperSummit #Jakarta #AIFORWARD

Local Business Directory, Search Engine Submission & SEO Tools FreeWebSubmission.com SonicRun.com