1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
|
Procedure TForm2.FlashDansBitmap(w, h: Integer);
var
formFlash: TForm; // Fenêtre temporaire dans laquelle on va afficher le flash
Swf: TShockwaveFlash;
panelSwf: TPanel;
finAttente: Cardinal; // Pour ne pas attendre indéfiniment
begin
// Création d'une fenêtre temporaire pour afficher le Flash
formFlash := TForm.create(nil);
formFlash.visible := cbVisible.checked; //Pour les test de rapidité
try
panelSwf := TPanel.Create(formFlash);
panelSwf.Parent := formFlash;
panelSwf.Height := h;
panelSwf.Width := w;
formFlash.clientHeight := h;
formFlash.clientWidth := w;
Swf := TShockwaveFlash.Create(panelSwf);
Swf.Parent := panelSwf;
Swf.Align := alClient;
SendMessage(Swf.Handle, WM_LBUTTONDOWN, -10, -10); // Il faut lui envoyer un message pour qu'il prenne la bonne taille
Swf.OnFSCommand := SwfFSCommandVueFlash; // Sera appelé quand le flash aura été maj
//SwfFSCommandVueFlash met pretPourScreenShot à true
pretPourScreenShot := false;
movieTime := GetTickCount ;
Swf.Movie := monFlash;
//La chaine de paramètres est complète. On peut la passer au flash
flashVars := lesParametresDuFlash;
Swf.flashVars := flashVars;
// On attend de recevoir du Flash le message que l'affichage est maj
finAttente := GetTickCount + (5 * 1000); // x secondes au max
while (not pretPourScreenShot) and (GetTickCount < finAttente) do
begin
Application.ProcessMessages;
end;
if pretPourScreenShot then
begin
// Le flash est pret pour une capture d'écran
bmpVue.Width := Swf.Width;
bmpVue.Height := Swf.Height;
Swf.PaintTo(bmpVue.Canvas, 0, 0);
mlog.lines.Add('pretPourScreenShot recu');
end
else
begin
// Problème : le Flash ne s'est pas maj
mlog.lines.Add('Pb pretPourScreenShot pas recu');
end;
finally
formFlash.release;
end;
end; |
Partager