27. august 2012 - 17:46Der er
4 kommentarer og 1 løsning
Stream fra en Database til Visning .
HEJ,
Fra en database har jeg en stream (skal være STREAM pga. data'ene i samme stream (personlige data)), som jeg skal vise på "anmodning".
Jeg har 2 krav til denne "stream-viser". Den skal kunne vise billeder (jpeg, BMP, TIFF, GIff , whatever) og den skal kunne håndtere virksomme links. (A la HTML <a href ="#link1">nnnn</A> ----- <a name="link1">..</A> .)
Læsning/skrivning til basen sker som ren tekst (AnsiString // Stream), så der er ingen problemer her.
Jeg har overvejet 3 muligheder:
1: HTML 2: PDF 3: RTL
ad 1.) HTML er godt, idet du kan vise alt med HTML. MEN det er uanvendeligt når jeg skal gøre det som STREAM (med Billeder) i en Twebbrowsr. Jeg kan ikke gemme en normal STREAM i HTML med links til JPEG-filer. Det vil bryde reglen om de personlige data, hvis billederne må ligge på "offentlige" filer. Jeg kan gemme filen som MHTML (mime-formatet) men for at få den frem på Twebbrowseren SKAL jeg over en fil-løsning... Og så er jeg lige vidt.... Og samtidig skal jeg have mulighed for at indlægge ny tekst (tilføjes den "gamle"). Jeg kan ikke på nettet finde ret meget om MIME og Delphi. (Indy (til delp 7) har en MIME komponent, men den kan jeg ikke få til at funke..)
Ad 2.) Jeg er ikke så godt kendt med PDF-løsninger, så her er en mulighed. Jeg er dog ikke kendt med Delphi PDF -komponenter, som kan vise, oprette og ændre PDF-dokumenter. Og hvor jeg kan oprette LINKS. Har ADOBE PDF-reader en xxx_TLB fil, som kan dette ? (husk billederne !)..
Ad 3:) Har en RTL komponent, som kan det hele bortset fra LINKS. Så hvis der ikke kommer meget gode grunde til at ændre dette vil dette blive løsningen. Trænger dog lidt (meget?) hjælp til det med LINKS i RTL-filer (The Delphi way).
jeg har netop kæmpet med en løsning jeg tror du kan bruge. Den kan pt vise billeder, xlsx og pdf filer fra en database hvor de tidligere er blevet gemt og hive dem frem igen, mon ikke du kan modificere den til også at vise links.
Håber ikke det bliver for uoverskueligt.
På formen er bare en TPictureList, TImage og en TMemo.
var frmVisFiler: TfrmVisFiler; ListOfFiles: TList;
implementation
{$R *.dfm}
procedure TfrmVisFiler.DestroyFileList; var i:integer; begin if ListOfFiles.Count >0 then begin for I := 0 to ListOfFiles.Count-1 do begin TPicInfoClass(ListOfFiles.Items[i]).Free; end; ListOfFiles.Free; end; end;
//Gemmer filen i brugerens windows temp folder strTempFileName := SJWinTmpPath + 'bdrtmpfil'+ TPicInfoClass(ListOfFiles.Items[PictureList.ItemIndex]).ext; with TFileStream.Create(strTempFileName, fmCreate) do try CopyFrom(BlobStream, BlobStream.Size) finally Free end; if POS(Uppercase(TPicInfoClass(ListOfFiles.Items[PictureList.ItemIndex]).ext), '.JPEG .JPG .BMP .GIF .PNG')>0 then begin ShellExecute( 0, 'open', 'c:\Windows\System32\rundll32.exe', PChar('c:\Windows\System32\shimgvw.dll,ImageView_Fullscreen ' + strTempFileName), nil, SW_NORMAL); end else if POS(Uppercase(TPicInfoClass(ListOfFiles.Items[PictureList.ItemIndex]).ext), '.PDF .DOC .DOCX .XLS .XLSX')>0 then begin ShellExecute( 0, 'open', PChar(strTempFileName), nil, nil, SW_NORMAL); end else MessageDlg('Du har ingen programmer installeret der kan vise denne filtype!', mtError, [mbOK], 0);
except on E:Exception do MessageDlg('Problemer med at hente filen.', mtError, [mbOK], 0); end; finally BlobStream.Free; dmCont.qGetComboBoxFills.Active := false; Screen.Cursor := Save_Cursor; end;
Men jeg har talt med "brugeren"; han er lidt utilfreds med resultatet, men har accepteret det (nødtvungent). (Og det er også begrænset hvad man kan få for 0,00 kr. i hyre.)
Så hvis der ikke er kommentarer (ønske om point etc. ) vil jeg lukke spm. i næste uge.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.