Перейти к содержанию
Fire Monkey от А до Я

Akromd

Пользователи
  • Постов

    43
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Akromd

  1. 3 минуты назад, GASCHE сказал:

    Нет, Synchronize очень затратная операция, Sleep это даже понять не могу зачем, какой тут выигрыш в скорости?

    Честно не понимаю о чем речь. Я пытаюсь создать анимацию, отсюда и sleep, чтобы его выполнение было не мгновенным. Если бы я использовал его в главном потоке это привело бы к стопоры всей программы.

    Нужно понимать, что я тестирую анимацию для большого проекта, в котором во время этой анимации будут происходить другие действия, в том числе от пользователя и поэтому я не понимаю как я смогу использовать synchronize без sleep в главном потоке.

  2. Захотелось сделать красивую отрисовку TPath, т.к. отрисовку необходимо будет сделать одновременно в разных местах одного и того же объекта, то решено было использовать потоки. Собственно все реализовал, но чем больше отрисовываешь тем сильнее тормоза. Помогите разобраться. Тема для меня новая, поэтому не пойму где происходят потери. Сам проект прилагается.

    Спойлер
    
    unit Unit1;
    
    interface
    
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs,
      FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects, FMX.Edit;
    
    type
      TForm1 = class(TForm)
        Path1: TPath;
        Button1: TButton;
        Button2: TButton;
        Edit1: TEdit;
        Label1: TLabel;
        Edit2: TEdit;
        Label2: TLabel;
        Label3: TLabel;
        Edit3: TEdit;
        Label4: TLabel;
        Edit4: TEdit;
        Label5: TLabel;
        Label6: TLabel;
        Label7: TLabel;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
      TAnimationPath = class(TThread)
      public
        NowP,EndP: TPoint;
        Sender: TObject;
        SizePoint: Integer;
        tag:byte;
      private
        countflash: byte;
        sizeX,sizeY:single;
        exitbol:boolean;
        { Private declarations }
      protected
        procedure Execute; override;
        procedure update;
        procedure flashanim;
        procedure flashcreate;
        procedure delassept;
      end;
    
    var
      Form1: TForm1;
      Assept: array of Integer;
    
    implementation
    
    {$R *.fmx}
    
    procedure TAnimationPath.delassept;
      var I: integer;
          J: integer;
    begin
      for I := Low(Assept) to High(Assept) do
        if Assept[i] = tag then
          begin
            if i < high(Assept) then
              for J := i+1 to High(Assept) do
                Assept[j-1] := Assept[j];
            SetLength(Assept,Length(Assept)-1);
          end;
    end;
    
    procedure TAnimationPath.Execute;
    begin
      inherited;
      countflash := 5;
      sizeX := TPath(Sender).Width / SizePoint;
      sizeY := TPath(Sender).Height / SizePoint;
      try
      while (NowP.X <> EndP.X)or(NowP.Y <> EndP.Y) do
        begin
          Synchronize(Update);
          Synchronize(Flashcreate);
          Synchronize(flashanim);
          Sleep(50);
        end;
    
      exitbol := true;
    
      while (TPath(Sender).ChildrenCount > 0)and(exitbol) do
        begin
          Exitbol := false;
          Synchronize(flashanim);
          Sleep(50);
        end;
      except
      end;
      Synchronize(delassept);
    end;
    
    procedure TAnimationPath.flashanim;
      var C: TCircle;
          I: integer;
    begin
      for I := TPath(Sender).ChildrenCount-1 Downto 0
        do if TPath(Sender).Children[I] is TCircle
          then if TPath(Sender).Children[I].Tag = tag then
            begin
              exitbol := true;
              C := TCircle(TPath(Sender).Children[I]);
              C.Position.Point := C.Position.Point + C.Position.DefaultValue;
              if C.TagFloat / 10 < 1 then C.Opacity := C.TagFloat / 10;
              C.TagFloat := C.TagFloat - 1;
              if C.TagFloat < 0
                then
                  begin
                    Tpath(Sender).RemoveObject(C);
                    C.Free;
                  end;
            end;
    end;
    
    procedure TAnimationPath.flashcreate;
      var I: Integer;
          C: TCircle;
    begin
      for I := 0 to countflash do
        begin
          C := TCircle.Create(nil);
          C.Parent := TPath(Sender);
          C.Width := 2 + Random * 4;
          C.Height := C.Width;
          C.fill.Color := TAlphaColors.Yellow;
          C.Stroke.Kind := TBrushKind.None;
          C.Position.Point := PointF(NowP.X*SizeX,NowP.Y*SizeY);
          C.Position.DefaultValue := PointF(0.5 - Random,0.5 - Random).Normalize * (1 + random * 2);
          C.TagFloat := 10 + Random(15);
          C.Opacity := 1 - Random;
          C.Tag := tag;
        end;
    end;
    
    procedure TAnimationPath.update;
    begin
      TPath(Sender).Data.Data := TPath(Sender).Data.Data + ' M' + IntToStr(Trunc(NowP.X)) +',' + IntToStr(Trunc(NowP.Y));
      if (NowP.X < EndP.X) then NowP.X := NowP.X + 1;
      if (NowP.Y < EndP.Y) then NowP.Y := NowP.Y + 1;
      if (NowP.X > EndP.X) then NowP.X := NowP.X - 1;
      if (NowP.Y > EndP.Y) then NowP.Y := NowP.Y - 1;
      TPath(Sender).Data.Data := TPath(Sender).Data.Data + ' L' + IntToStr(Trunc(NowP.X)) +',' + IntToStr(Trunc(NowP.Y));
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    
      Function CheckId(Id:integer):boolean;
      var i:integer;
      begin
        Result := True;
        if Length(Assept) = 0 then Exit;
    
        for I := Low(Assept) to High(Assept) do
          begin
            if Assept[i] = id then
              begin
                Result := false;
                Exit;
              end;
          end;
      end;
    
      var TmpAnim: TAnimationPath;
          Id:integer;
          X,Y: Integer;
    begin
      TmpAnim := TAnimationPath.Create(True);
      TmpAnim.FreeOnTerminate := True;
      X := Random(25);
      Y := Random(25);
      TmpAnim.NowP := Point(X,Y);
      TmpAnim.EndP := Point(X + Random(25+(X-25)),Y + Random(25+(Y-25)));
      TmpAnim.Sender := Path1;
      TmpAnim.SizePoint := 50;
      Id := 39;
        repeat
         Id := Id + 1;
         TmpAnim.tag := id;
        until CheckId(TmpAnim.tag);
      SetLength(Assept,length(Assept) + 1);
      Assept[High(Assept)] := TmpAnim.tag;
      TmpAnim.Start;
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      Path1.Data.Clear;
      Path1.Data.MoveTo(PointF(0,0));
      Path1.Data.LineTo(PointF(50,0));
      Path1.Data.LineTo(PointF(50,50));
      Path1.Data.LineTo(PointF(0,50));
      Path1.Data.LineTo(PointF(0,0));
    end;
    
    end.

     

    P.s. в проекте начало и конец координаты уже не вводится через эдиты.

    Постоепенная отрисовкаTPath.rar

  3. 11 часов назад, wamaco сказал:

    причин может быть много...

    почему listbox, Вам лучше использовать ListView и сначала грузить в какую либо структуру данных из файла, а потом уже рисовать в ListView 

    Расскажите подробнее, потому как не могу понять как можно работать через стили с ListView

  4. Добрый день, не знаю уместен ли вопрос в этой ветке, но тем не менее.

    Задача следующая: есть ListBox на форме, с помощью стилей создан специальный ListItem с множеством edit'ов  и т.д. При загрузке excel файла все это заполняется и выводится.

    Так вот, все это работает хорошо, до тех пор пока не начинаешь прокручивать - через некоторое время вылетает ошибкаБезымянный.png

    Собственно вопрос - По каким причинам она возникает и как ее можно исправить?

    проект выложил, подгрузка из файла - по умолчанию путь к файлу - C:\Users\Admin\Documents\Embarcadero\Studio\Projects\.

    Projects.rar

  5. При динамическом перелистывании исчезает название Tab'а с которого происходит переход

    Вначале я убираю вкладки и перехожу на нужный tab

    TabControl1.tabindex := 1;
    Tabcontrol1.tabposition := ttabposition.none

    Затем делаю переход обратно и возвращаю вкладки, но та с которой делал переход исчезает.

    TabControl1.tabindex := 2;
    Tabcontrol1.tabposition := ttabposition.top
    

    До: post-1807-0-59315600-1456585234.jpg

    После: post-1807-0-26045900-1456585233.jpg

    Кто нибудь сталкивался с таким?

  6. Мне все таки нужна ваша помощь.

    Этот файл у меня никак не хочет открываться.

    Если его открывать чего TfileStream, то в итоге получается Кракозябра. post-1807-0-51874700-1450369769.png

     try
        MyStream:=TFileStream.Create('C:\Users\Михаил\Downloads\SecretaryAndClassChiefExport (1).xls', fmOpenRead);
        MyStream.Seek(0,soFromBeginning);
        //Размер файла в байтах.
        i := MyStream.Size;
        SetLength(buf, i);
        MyStream.Read(Pointer(buf)^,i);
      finally
        MyStream.Free;
      end;
      Memo1.Text := buf;
    

    Если открыть непосредоственно через memo

    memo1.lines.LoadFromFile('C:\Users\Михаил\Downloads\SecretaryAndClassChiefExport (1).xls');
    

    то отображение всех символов кроме русских вполне нормальное, но они то как раз и нужны.

    post-1807-0-83905900-1450369872_thumb.pn

     

     

  7. идти циклом вверх от вашего item'a до первого header'a

    И делать проверку не является ли Item нашим TListBoxGroupHeader

    procedure TFormMain.ListAllAchivItemClick(const Sender: TCustomListBox;
      const Item: TListBoxItem);
    begin
    PositionElement  := ItemIndex;
    for I := PositionElement downto 0 do
         if ListAllAchiv.ListItems[i] is TListBoxGroupHeader then
          begin
          //что то делаем
          end;
    end;
    
  8. А открывать в windows будешь?

     

    Вообще хотелось бы на андроиде, но в перспективе на любом девайсе.

     

    Это обычный HTML файл со стилями.

     

    Стили тут занимают только верхнюю часть, которая мне в принципе не нужна, главное это данные таблицы, которая тоже здесь присутствует.

  9. Добрый день! Передо мной стоит задача открыть файл, содержащий таблицу с данными и их как то использовать. Проблема в том, что данный файл формируется на сайте очень интересным способом (как именно понятия не имею), но в результате на выходе есть некий XLS-файл, который в принципе открывается excel-ем, но при этом ругается, что он как бы битый. В итоге путем переименования расширения было найдено, что это xml-файл.

    Это предисловие...

    В общем с помощью делфи никак не могу открыть этот файл и считать с него данные, т.к. если его открывать как xml-файл, то там вылазить ошибка не соответствия head и meta. Как Excel файл открыть тоже не получилось (пробывал через firedac и ODBU драйвер).

    Может кто поможет советом? Через что открыть и собственно как считать данные...

    P.s. Пример файла прикрепить не удалось...поэтому только так:

    <html>
    <head><meta HTTP-EQUIV="Content-type" CONTENT="text/html; charset=utf-8">
    
    <style>
    	{mso-displayed-decimal-separator:"\,";
    	mso-displayed-thousand-separator:" ";}
    @page
    	{margin:1.0in .75in 1.0in .75in;
    	mso-header-margin:.5in;
    	mso-footer-margin:.5in;}
    tr
    	{mso-height-source:auto;}
    col
    	{mso-width-source:auto;}
    br
    	{mso-data-placement:same-cell;}
    table.xlTable
    {
    	empty-cells: show;
    	border:thin outset gray;
    	border-collapse:collapse;
    	white-space:normal;
    	margin: auto;
    }
    table.xlTable td
    {
    	text-align: right;
    	border:thin inset gray;
    }
    table.xlTable th
    {
    	background-color: #EAEAEA;
    	border:thin inset gray;
    }
    .style0
    	{mso-number-format:general;
    	text-align:general;
    	vertical-align:middle;
    	white-space:nowrap;
    	mso-rotate:0;
    	mso-background-source:auto;
    	mso-pattern:auto;
    	color:windowtext;
    	font-size:10.0pt;
    	font-weight:400;
    	font-style:normal;
    	text-decoration:none;
    	font-family:Arial;Verdana;Helvetica;
    	mso-generic-font-family:auto;
    	mso-font-charset:204;
    	border:none;
    	mso-protection:locked visible;
    	mso-style-name:Normal;
    	mso-style-id:0;}
    td
    	{mso-style-parent:style0;
    	padding: 1px;
    	white-space:normal;
    	mso-ignore:padding;}
    .xtl
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	text-align:left;
    	border:.5pt solid black;
    	white-space:normal;}
    .xtc
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	text-align:center;
    	border:.5pt solid black;
    	white-space:normal;}
    .xtr
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	text-align:right;
    	border:.5pt solid black;
    	white-space:normal;}
    .xd
    	{mso-style-parent:style0;
    	mso-number-format:"d\/mm\/yyyy\;\@";
    	text-align:center;
    	vertical-align:middle;
    	border:.5pt solid black;
    	white-space:normal;}
    .xd_va_t
    	{mso-style-parent:style0;
    	mso-number-format:"d\/mm\/yyyy\;\@";
    	text-align:center;
    	vertical-align:top;
    	border:.5pt solid black;
    	white-space:normal;}
    .xds
    	{mso-style-parent:style0;
    	mso-number-format:"d\/mm\;\@";
    	text-align:center;
    	vertical-align:middle;
    	border:.5pt solid black;
    	white-space:normal;}
    .xn1
    	{mso-style-parent:style0;
    	mso-number-format:Fixed;
    	text-align:right;
    	border:.5pt solid black;
    	white-space:normal;}
    .xn1c
    	{mso-style-parent:style0;
    	mso-number-format:Fixed;
    	text-align:center;
    	border:.5pt solid black;
    	white-space:normal;}
    .xn2
    	{mso-style-parent:style0;
    	mso-number-format:"\#\,\#\#\#0";
    	text-align:right;
    	border:.5pt solid black;
    	white-space:normal;}
    .xn3l
    	{mso-style-parent:style0;
    	mso-number-format:0;
    	text-align:left;
    	border:.5pt solid black;
    	white-space:normal;}
    .xn3c
    	{mso-style-parent:style0;
    	mso-number-format:0;
    	text-align:center;
    	border:.5pt solid black;
    	white-space:normal;}
    .xn3r
    	{mso-style-parent:style0;
    	mso-number-format:0;
    	text-align:right;
    	border:.5pt solid black;
    	white-space:normal;}
    .xtlwr
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	text-align:left;
    	border:none;
    	white-space:nowrap;}
    .xtcb	
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	font-weight:700;
    	text-align:center;
    	border:.5pt solid black;
    	white-space:normal;}
    .xtlb	
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	font-weight:700;
    	text-align:left;
    	border:.5pt solid black;
    	white-space:normal;}
    .xtl8wr
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	font-size:8.0pt;
    	font-family:Verdana,Arial,Helvetica;
    	text-align:left;
    	border:none;
    	white-space:nowrap;}
    .xtl10bwr
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	text-align:left;
    	font-weight:700;
    	font-family:Verdana,Arial,Helvetica;
    	border:none;
    	white-space:nowrap;}
    .xtl10wr
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	text-align:left;
    	font-family:Verdana,Arial,Helvetica;
    	border:none;
    	white-space:nowrap;}
    .xtl12bwr
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	text-align:left;
    	font-weight:700;
    	font-family:Verdana,Arial,Helvetica;
    	font-size:12.0pt;
    	border:none;
    	white-space:nowrap;}
    .xtl10b
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	text-align:left;
    	font-weight:700;
    	font-family:Verdana,Arial,Helvetica;
    	border:none;
    	white-space:normal;}
    .xtl10
    	{mso-style-parent:style0;
    	mso-number-format:"\@";
    	text-align:left;
    	font-family:Verdana,Arial,Helvetica;
    	border:none;
    	white-space:normal;}
    </style>
    
    </head>
    <body>
    <tr><td class="xtl8wr">МБОУ лицей №31</td></tr><h2 align="center" >Общие сведения об обучающихся , класс: 5а</h2><br><table><tr><td class="xtl10wr" nowrap><b>Учебный год:</b> 2015/2016</td></tr><tr><td class="xtl10wr" nowrap><b>Класс:</b> 5а</td></tr><tr><td class="xtl10wr" nowrap><b>Период:</b> 2 триместр</td></tr><tr><td> </td></tr></table><BR><table class="ThinTable" border="1"><TR VALIGN="center"><TH>№<br />п/п</TH><TH>Ф.И.О. учащегося</TH><TH>Пол</TH><TR><TD ALIGN="center">1</TD><TD ALIGN="left">Бисярина Екатерина Евгеньевна</TD><TD ALIGN="center">Ж</TD>
    <TR><TD ALIGN="center">2</TD><TD ALIGN="left">Бульдяева Анфиса Игоревна</TD><TD ALIGN="center">Ж</TD>
    <TR><TD ALIGN="center">3</TD><TD ALIGN="left">Бухдрукер Роман Сергеевич</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">4</TD><TD ALIGN="left">Вейгандт Владимир Вячеславович</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">5</TD><TD ALIGN="left">Воробьёв Владимир Алексеевич</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">6</TD><TD ALIGN="left">Доможиров Антон Александрович</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">7</TD><TD ALIGN="left">Еремин Юрий Викторович</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">8</TD><TD ALIGN="left">Иванчиков Борис Алексеевич</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">9</TD><TD ALIGN="left">Киселев Георгий Константинович</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">10</TD><TD ALIGN="left">Лапаткин Владислав Игоревич</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">11</TD><TD ALIGN="left">Максимов Никита Данилович</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">12</TD><TD ALIGN="left">Мельников Глеб Денисович</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">13</TD><TD ALIGN="left">Огурцов Андрей Викторович</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">14</TD><TD ALIGN="left">Примаков Максим Антонович</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">15</TD><TD ALIGN="left">Райков Дмитрий Александрович</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">16</TD><TD ALIGN="left">Томин Ярослав Константинович</TD><TD ALIGN="center">М</TD>
    <TR><TD ALIGN="center">17</TD><TD ALIGN="left">Урубаева Ульяна Евгеньевна</TD><TD ALIGN="center">Ж</TD>
    <TR><TD ALIGN="center">18</TD><TD ALIGN="left">Чулаков Антон Андреевич</TD><TD ALIGN="center">М</TD>
    </TABLE><br /><h3>Состав класса</h3><table align="center" class="ThinTable" border="1"><tr><th align="left">Кол-во по годам рождения</th><th>2003</th><th>2004</th><th>2005</th><th>Всего</th></tr><tr><th align="left">Мальчиков</th><td align="right">2</td><td align="right">11</td><td align="right">2</td><td align="right">15</td></tr><tr><th align="left">Девочек</th><td align="right">0</td><td align="right">3</td><td align="right">0</td><td align="right">3</td></tr></table><br /><h3>Изучение языка</h3><table align="center" class="ThinTable" border="1"><tr><th align="left">Английский язык</th><td align="right"> 6 </td></tr></table><table border="0"><tr><td> </td></tr><tr><td class="xtl8wr"><i>Состояние на 08.12.2015 21:43:53</i></td></tr><tr><td class="xtl8wr">© <i>Сетевой Город. Образование</i> 2.70.26504</td></tr></table>
    </body>
    </html>
    
    
×
×
  • Создать...