IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Программирование (http://www.imho.ws/forumdisplay.php?f=40)
-   -   Flash + Delphi (а точнее - передача параметров) (http://www.imho.ws/showthread.php?t=46221)

Duh 16.12.2003 18:28

Flash + Delphi (а точнее - передача параметров)
 
Вобщем....возник такой вопрос...в нете сколько не искал...никак не могу ничего найти....=\ одна-две статьи....не больше....только что по разным сайтам раскиданы...да и то не о том....
Вобщем...что собственно надо: передать параметры (при нажатии на кнопку во флэшке) в Дельфи...во Флэше есть какой-то оператор...вот я никак не могу найти его....=\

Duh 16.12.2003 18:40

ну вот.....покопался ещё чуток и нашёл-таки кое-что...=)
Если, вдруг, у когонибудь возникнет подобный вопрос....ответ тут - http://spravkaweb.h1.ru/flash.php?ss=12
а точнее - функция fscommand
...=)сори, что поторопился с постом...=)

m-AAA-d 14.12.2007 16:58

вопрос по использованию флеша в проектах дельфи.

я импортировал активХ объект, у меня появилсяч компонент TShockwaveFlash - работаю с ним - все гут.
но вот беда. использую один компонент чтобы подгружать во время работы в него разные мувики.... так при подгрузке мувика размером отличным от размера компонента на момент создания формы этот самый мувик продолжает отображацца этим первоначальным размером, даже если изменить размер компонента вручную и выставить опции масштабирования.....

пример:
- при создании формы компонент имеет размеры 44 на 44
- мувики размером 44 на 44 грузяцца и отображаюцца отлично
- надо подгрузить мувик 100 на 100: я меняю размер компонента на 100 на 100, назначаю мувик или делаю LoadMovie - а он всеравно ужимаецца (масштабируецца) до размера 44 на 44! и отображаецца по верхнему левому углу.....

как решить трабл7 надо чтобы при изменении размера компонента мувик масштабировался вслед за ним. он этого не делает - сохраняет размеры заданные при создании формы.

менял опции масштабирования - там есть ExactFit ShowAll NoResize NoBorder - все фигня, мувик крутицца и масштабируецца в первоначальных размерах.... ( хелп, надо на выхах уже решение.....

m-AAA-d 14.12.2007 19:18

выяснил, мувик ресайзицца, но не сразу..... чтото с ним надо сделать - толи спрятать (сделать невидимым) толи перезапустить..... седня дома попробую...... )

Novoross 14.12.2007 19:45

А может сначала загрузить мувик, а после менять размер компонента? свойство автосайз в истине стоит?

m-AAA-d 16.12.2007 03:59

попробовал - не помогает..... ((
повторюсь - мувик ресайзицца только после клика по нему....
вот код на всякий случай - может поможет что.... panButton - это контейнер для TShockWave компонента swfButton - простая панелька....
Код:

procedure TfmNitro.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
var cp: TPoint; i: integer; s: string;
begin
  case msg.message of
    WM_LBUTTONUP : if FHover <> 0 then begin panButton.Visible:= false; swfButton.StopPlay;
      FCommand:= hextoint(leftstr(extractfilename(swfButton.Movie),8)) - hextoint(appset.sett[ 1]);
      if FCommand > 1 then begin appSet.State.Add(leftstr(extractfilename(swfButton.Movie),8));
      LoadFrame;
      end;
    end;
    WM_MOUSEMOVE : begin getcursorpos(cp); FHover:= 0;
      for i:= 1 to hextoint(appset.sett[ 4]) do
      if    (cp.X > hextoint(appset.sett[1+5*i]) + ScreenLeft)
        and (cp.X < hextoint(appset.sett[1+5*i]) + ScreenLeft + hextoint(appset.sett[1+5*i+2]))
        and (cp.Y > hextoint(appset.sett[2+5*i]) + ScreenTop)
        and (cp.Y < hextoint(appset.sett[2+5*i]) + ScreenTop + hextoint(appset.sett[2+5*i+2]))
        and (backSFW.CurrentFrame+1 = backSFW.TotalFrames)
      then FHover:= i; //swfButton.Perform(msg.message, VK_SELECT, msg.lParam); end;
    end;
  end;
end;

Код:

procedure TfmNitro.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
var cp: tpoint; j, k: cardinal; s, t: string;
begin
//-----------------------------------------------------------------------------
  j:= 0; for k:= 0 to AppSet.State.Count - 1 do j:= j + HexToInt(AppSet.State[ k]);
  j:= j - HexToInt(AppSet.State[ 0]); s:= IntToHex(j, 8); AppSet.State[ 0]:= AppSet.Sett[ 0]; t:= s;
//-----------------------------------------------------------------------------
  if FHover <> 0
  then begin
    getcursorpos(cp);
    with panButton do begin
      SendToBack; swfButton.StopPlay;
      width  := hextoint(appset.sett[1+5*FHover+2]);
      height := hextoint(appset.sett[2+5*FHover+2]);
      Left := hextoint(appset.sett[1+5*FHover]) + ScreenLeft;
      Top  := hextoint(appset.sett[2+5*FHover]) + ScreenTop;
      if FileExists(appSet.media + s + '\' + appset.sett[5*FHover] + '.swf') then s:= appset.media + s + '\' + appset.sett[5*FHover] + '.swf';
      if FileExists(appset.media + s + '\' + appset.sett[5*FHover] + '.jpg') then s:= appset.media + s + '\' + appset.sett[5*FHover] + '.jpg';
      swfButton.LoadMovie(0, s);
      swfButton.Play; Visible:= true; BringToFront;
  end; end else begin swfButton.StopPlay; swfButton.FrameNum:= 0; end;
end;

попробовал пообкатывать на пустом примере - без обработчиков сообщений - результат аналагичный.... на ресайз компонента - мувик реагирует только после клика на нем....

добавлено через 2 минуты
в процедуре LoadFrame никаких действий по отношению к swfButton не производицца.....

насчет масштабирования - у этого компонента свои специфичные свойства - ScaleMode например. выставлено в ExactFit или ShowAll - те по идее - растягивать мувик забив на пропорции или умещать пропорционально по малой стороне компонента.... толку - ноль, автоматическое масштабирование не происходит.....

m-AAA-d 17.12.2007 13:29

все, нашел решение

Windows.SetFocus(ShockwavwFlash1.Handle);

и все.....

перепробовал postmessage, sendmessage, shockwaveflash.setfocus, shockwave.perform - ничего не срабатывало..... ))


Часовой пояс GMT +4, время: 06:05.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.