Delphi 10 berlin Youtube Embed olayı

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Delphi 10 berlin Youtube Embed olayı

Mesaj gönderen hakanharbeli »

Kod: Tümünü seç

Procedure YouTube( VideoCode: String; WebBrowser : TWebBrowser; AutoPlay:Boolean );
var
  strIcerik  : String;
  sStream   : TStringStream;
begin
  WebBrowser.Navigate('about:blank');
  while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
  Application.ProcessMessages;

  strIcerik := ''
            + '<html><body>'
            + '<iframe width="854" height="510" src="https://www.youtube.com/embed/%EMBED%" frameborder="0" allowfullscreen></iframe>'
            + '</body></html> ';

  strIcerik := StringReplace(strIcerik, '%EMBED%', VideoCode, [rfReplaceAll]);


  if Assigned(WebBrowser.Document) then
  begin
    sStream := TStringStream.Create;
    try
      sStream.WriteString(strIcerik);
      sStream.Position := 0;
      // NOT: uses'a ActiveX eklenecek... IPersistStreamInit için...
      (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(sStream));
    finally
      sStream.Free;
    end;
  end;
end;

Merhaba delphi 10 berlinde çalışıyorum ve yukarıdaki function çalışmıyor. webbrowser.document ve readystate sorun çıkarıyor. Öyle bir özellik olmadığı görünüyor
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: Delphi 10 berlin Youtube Embed olayı

Mesaj gönderen ertank »

Merhaba,

Delphi 10.1 Update 1 kullanarak aşağıdaki kod ile bir sorun yaşamadan çalıştırabildim. Konu ile ilgili Embed URL kısmında hatanız olmuş olabilir. Zira ben URL kısmını değiştirdim. Daha detaylı bilgi için aşağıdaki linki incelemenizi tavsiye ederim.
https://developers.google.com/youtube/player_parameters


Unit1.pas kodu:

Kod: Tümünü seç

unit Unit1;

interface

uses
  Winapi.Windows,
  Winapi.Messages,
  System.SysUtils,
  System.Variants,
  System.Classes,
  Vcl.Graphics,
  Vcl.Controls,
  Vcl.Forms,
  Vcl.Dialogs,
  Vcl.StdCtrls,
  Activex,
  Vcl.OleCtrls,
  SHDocVw;

type
  TForm1 = class(TForm)
    Button1: TButton;
    WebBrowser1: TWebBrowser;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure YouTube( VideoCode: String; WebBrowser : TWebBrowser; AutoPlay:Boolean );
var
  strIcerik: string;
  sStream: TStringStream;
begin
  WebBrowser.Navigate('about:blank');
  while WebBrowser.ReadyState < READYSTATE_INTERACTIVE do
  Application.ProcessMessages;

  strIcerik := '<iframe id="ytplayer" type="text/html" width="640" height="360"' +
  'src="http://www.youtube.com/embed/%EMBED%"' +
  'frameborder="0"/>';

  strIcerik := StringReplace(strIcerik, '%EMBED%', VideoCode, [rfReplaceAll]);


  if Assigned(WebBrowser.Document) then
  begin
    sStream := TStringStream.Create();
    try
      sStream.WriteString(strIcerik);
      sStream.Position := 0;
      // NOT: uses'a ActiveX eklenecek... IPersistStreamInit için...
      (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(sStream));
    finally
      sStream.Free();
    end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  YouTube('M7lc1UVf-VE?autoplay=1&origin=http://example.com', WebBrowser1, True);
end;

end.
DFM kodu:

Kod: Tümünü seç

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 289
  ClientWidth = 554
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object Button1: TButton
    Left = 24
    Top = 24
    Width = 75
    Height = 25
    Caption = 'Button1'
    TabOrder = 0
    OnClick = Button1Click
  end
  object WebBrowser1: TWebBrowser
    Left = 24
    Top = 55
    Width = 522
    Height = 226
    TabOrder = 1
    ControlData = {
      4C000000F33500005C1700000000000000000000000000000000000000000000
      000000004C000000000000000000000001000000E0D057007335CF11AE690800
      2B2E126208000000000000004C0000000114020000000000C000000000000046
      8000000000000000000000000000000000000000000000000000000000000000
      00000000000000000100000000000000000000000000000000000000}
  end
end
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: Delphi 10 berlin Youtube Embed olayı

Mesaj gönderen hakanharbeli »

Çok teşekkürler abi süpersin kod çalışıyor mantığını anlamaya çalışıyorum şu an
hakanharbeli
Üye
Mesajlar: 76
Kayıt: 01 Nis 2016 03:58

Re: Delphi 10 berlin Youtube Embed olayı

Mesaj gönderen hakanharbeli »

Abi bir de activex android'de kullanılamıyor bu durumu nasıl düzelte biliriz?
ertank
Kıdemli Üye
Mesajlar: 1716
Kayıt: 12 Eyl 2015 12:45

Re: Delphi 10 berlin Youtube Embed olayı

Mesaj gönderen ertank »

Bildiğim kadarı ile ActiveX Microsoft'a özeldir. Sadece Windows işletim sistemi ve Internet Explorer üzerinde çalışır.
Cevapla