Flash na pełnym ekranie i jego drukowanie

0

Jak widać rymujący się temat :D
Mój problem dotyczy tego:
Chciałbym, aby po kliknięciu na dany przycisk utworzyła mi się forma, która rozciągnie się na pełny ekran i nie będzie miała paska tytułowego czy obramowania. Po prostu pełny ekran. No może i z tym bym sobie poradził, ale chciałbym, żeby utworzył się w niej automatycznie rozciągnięty na całą szerokość komponent Flash, dzięki czemu będę mógł otworzyć animację na pełnym ekranie.
Druga rzecz - jak mogę wydrukować aktualnie wyświetlaną klatkę w komponencie Flash, skoro nie ma on funkcji Print?

0
  1. Pełny ekran:
    http://4programmers.net/Forum/280967
  2. Flash na pełny ekran: http://www.actionscript.org/tutorials/beginner/Flash_Projectors_and_Crossplatform_CD_burning/
  3. Drukowanie: przewiń do klatki, zrób PrintScreena i go wydrukuj
0

Wielkie dzięki. Co do drukowania - nie chodzi mi tutaj o robienie screenów. Ma to działać tak - jest przycisk drukuj, otwiera się PrintDialog, Flash się zatrzymuje i aktualna klatka może zostać wydrukowana. Jest to możliwe, bo w normalnym odtwarzaczu Flasha jest taka opcja.

PS: Super, stworzyłem formę, na niej flash, zrobiłem na full ekran i gitara. Działa jak powinno. Tylko jedna rzecz mnie nie pokoi - czemu jak rozciągam Flasha, to animacja zostaje w wielkości takiej jak była, a rozciągnięta część jest jakby przezroczysta? Wygląda to tak, jakby tylko forma się rozciągała, a przecież flasha mam na alClient

0

Wielkie dzięki. Co do drukowania - nie chodzi mi tutaj o robienie screenów. Ma to działać tak - jest przycisk drukuj, otwiera się PrintDialog, Flash się zatrzymuje i aktualna klatka może zostać wydrukowana. Jest to możliwe, bo w normalnym odtwarzaczu Flasha jest taka opcja.

Nie wiadomo jak Flash to robi.. może też wali Print Screen`a :) .. oczywiście po uprzednim zatrzymaniu ..

0

Czemu komponent Flash nie ma funkcji Print? :]
No dobra - to może tak, zrobię:
flash.Pause;
i wtedy mam zatrzymaną klatkę. No to jak zrobić z niej teraz zrzut ekranu i go wydrukować? Gdyby był jakiś komponent w standardzie, gdzie da się wkleić rysunek, to można by było i tak zrobić, żeby potem z tego komponentu drukował, a on byłby ukryty. To jest myśl. Teraz tylko czy możecie mnie nakierować jak zrobić screena z samego komponentu Flash i potem zrobić taki trick z tym obrazkiem? Na tej funkcji najbardziej mi zależy - drukowanie.

0

Najogólniej tak:

var Canvas:TCanvas;
begin
Printer.Orientation:=poLandscape;
Printer.BeginDoc;
Canvas:=TCanvas.Create;
Canvas.Handle:=GetWindowDC(GetDesktopWindow());
Printer.Canvas.CopyRect(Rect(0,0, Printer.PageWidth, Printer.PageHeight), Canvas, Rect(0,0, Screen.Width, Screen.Height));
Canvas.Free;
end;
0

Rozumiem, ale co to Printer? No i z tego kodu wynika, że miałbym podać współrzędne do zrobienia screena, a nie da się jakoś tak, żeby z samego komponentu Flash o nazwie "flash" wycinało?</b>

0

To kod pozwalający drukować od razu zrobionego screena.

0

Nie o to mi chodziło. Pytam się co to jest "Printer", bo jego atrybuty nie pasują ani do PrintDialog ani do PrintSetupDialog. Dlatego mam pytanie co to jest i jak ten kod przystosować, żeby nie wywalało błędu tylko drukowało :)

PS: Udało zrobić mi się procedurę, która pobiera zrzut z komponentu Flash i wrzuca ją do obrazka, który jest ukryty. Teraz problem jest jedynie w tym, żeby ten obrazek wydrukować. Nie wiem czy procedura działa (program się odpala, niby wszystko OK), ale drukowanie obrazka coś mi nie wychodzi. Wszystko z powodu tego "Printer"

Ktoś mi wyjaśni CO TO JEST Printer i jego funkcje jak np. BeginDoc?

Jak to ma komukolwiek działać, skoro nigdzie, w żadnym artykule, nie jest napisane co to jest ten Printer. Wszechwiedzący nie jestem przecież.</b>

0

Przykład z Helpa:

This example uses a button and a memo on a form. When the user clicks the button, the content of the memo is printed, with a 200-pixel border around the page. To run this example successfully, you must add the Printers unit to the uses clause of your unit.

procedure TForm1.Button1Click(Sender: TObject);

begin
  with Printer do
  begin
    BeginDoc;
    Canvas.TextRect(Rect(200,200,PageWidth-200,PageHeight-200),
                    200, 200, Memo1.Lines.Text);
    EndDoc;
  end;

end;
0

Printer w module Printers to funkcja zwracająca instancję klasy TPrinter. Jeżeli chcesz używać Printer to do sekcji uses dodaj "Printers".

0

Dzięki za konkretną odpowiedź :) W końcu mogę używać Printer. No i w rezultacie mi nie drukuje. Oto co zrobiłem:

// oto procedura SpapShot
{ ... }SnapShot(var Img : TImage; L,G,P,D : integer);
var ScreenDC : HDC;
    ImageDC  : HDC;
begin
     { tutaj procedura, która otwiera mi flasha na pełny ekran i zatrzymuje go }
     ScreenDC := GetWindowDC(0);
     Img.Picture.Bitmap.Height := D-G;
     Img.Picture.Bitmap.Width  := P-L;
     ImageDC  := Img.Picture.Bitmap.Canvas.Handle;
     { tutaj zamknięcie flasha }
     BitBlt(ImageDC, 0, 0,P-L, D-G , ScreenDC, 0, 0, SrcCopy);
     zrzut.Refresh; // zrzut to nazwa mojego Image
end;

// poniżej procedura DrawImage
procedure DrawImage(Canvas: TCanvas; DestRect: TRect; ABitmap: TBitmap);
var
  Header, Bits: Pointer;
  HeaderSize: DWORD;
  BitsSize: DWORD;
begin
  GetDIBSizes(ABitmap.Handle, HeaderSize, BitsSize);
  Header := AllocMem(HeaderSize);
  Bits := AllocMem(BitsSize);
  try
    GetDIB(ABitmap.Handle, ABitmap.Palette, Header^, Bits^);
    StretchDIBits(Canvas.Handle, DestRect.Left, DestRect.Top,
      DestRect.Right, DestRect.Bottom,
      0, 0, ABitmap.Width, ABitmap.Height, Bits, TBitmapInfo(Header^),
      DIB_RGB_COLORS, SRCCOPY);
  finally
    FreeMem(Header, HeaderSize);
    FreeMem(Bits, BitsSize);
  end;
end;
// procedura drukowania
procedure PrintImage(Image: TImage; ZoomPercent: Integer);
var
  relHeight, relWidth: integer;
begin
  Screen.Cursor := crHourglass;
  Printer.BeginDoc;
  with Image.Picture.Bitmap do
  begin
    if ((Width / Height) > (Printer.PageWidth / Printer.PageHeight)) then
    begin
      relWidth := Printer.PageWidth;
      relHeight := MulDiv(Height, Printer.PageWidth, Width);
    end 
    else
    begin
      relWidth  := MulDiv(Width, Printer.PageHeight, Height);
      relHeight := Printer.PageHeight;
    end;
    relWidth := Round(relWidth * ZoomPercent / 100);
    relHeight := Round(relHeight * ZoomPercent / 100);
    DrawImage(Printer.Canvas, Rect(0, 0, relWidth, relHeight), Image.Picture.Bitmap);
  end;
  Printer.EndDoc;
  Screen.cursor := crDefault;
end;

// procedura przycisku drukuj
{ ... }
begin
     if { jeden warunek } then
        begin
             { jedna instrukcja }
        end
        else
        begin
             { nazwa formy }.SnapShot(zrzut,0,0,0,0); // gdzie zrzut to mój Image
             if print.Execute then
                begin
                     PrintImage(zrzut, 50); // Drukowanie w wielkości 50% z mojego zrzut
                end;
        end;
end;

Nie jestem do końca przekonany co do SnapShot(zrzut,0,0,0,0);
Może ktoś mnie oświecić co mam zrobione źle?

PS: Pozwoliłem sobie zakomentować ( { ... } ) fragmenty kodu, które nie dotyczą problemu :P

0

Hmm - ktoś mi powie co robię źle? ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1