Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2012.04.01;
Скачать: [xml.tar.bz2];

Вниз

FireMonkey   Найти похожие ветки 

 
LDV   (2011-12-04 18:45) [0]

FireMonkey это аналог WPF?


 
DVM ©   (2011-12-04 19:00) [1]

похоже вобщем то.


 
DiamondShark ©   (2011-12-04 22:53) [2]

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

и

Глючная, практически не документированная, никому не известная поделка кулибина из Улан-Удэ за неадекватную цену

Ну... похоже, в общем-то, чо там...


 
DVM ©   (2011-12-04 23:24) [3]


> DiamondShark ©   (04.12.11 22:53) [2]

насчет глючности, неизвестности до сего момента и плохо документированности, соглашусь, пожалуй.


> Ну... похоже, в общем-то, чо там...
>
>

Идеология схожа.


 
Кто б сомневался ©   (2011-12-05 03:21) [4]

Имхо если взяли Delphi то здесь явное преимущество юзать обычное Win GUI (удобство программирования форм и качественный скомпилированный результат), тем более что GUI результирующего продукта требует гораздо меньше ресурсов чем WPF (в плане памяти и CPU).
Насчет FM не в курсе, но думаю все будет.


 
Кто б сомневался ©   (2011-12-05 03:30) [5]


> юзать обычное Win GUI


VCL смысле. Разработка форм с VCL очень удобна, как и в WPF, а результат более качественный с точки зрения производительности и требуемых ресурсов.

На WPF фотошоп, архикад, и программы которые вычисляют и отрисовывают множество данных в разных окнах в real time и др. тяжести лучше не делать, т.к. он будет очень неповоротлив.


 
DVM ©   (2011-12-05 07:13) [6]


> Кто б сомневался ©   (05.12.11 03:30) [5]


> На WPF фотошоп, архикад, и программы которые вычисляют и
> отрисовывают множество данных в разных окнах в real time
> и др. тяжести лучше не делать, т.к. он будет очень неповоротлив.
>

WPF вообще то быстрее должен быть, т.к. вся отрисовка ложится на GPU в результате.


 
Кто б сомневался ©   (2011-12-05 18:28) [7]


> DVM ©   (05.12.11 07:13) [6]


И раз на GPU значит WPF должны быть быстрее чем Windows Forms?
С чего бы это? :)


 
icelex ©   (2011-12-05 18:35) [8]


> Кто б сомневался ©   (05.12.11 03:30) [5]

на чем основано это убеждение?
на вере?


 
Кто б сомневался ©   (2011-12-05 18:58) [9]


> icelex ©   (05.12.11 18:35) [8]

> на чем основано это убеждение?
> на вере?



Аналогичный вопрос я могу задать - убеждение основано на маркетинге и рекламе?
Вам сказали что WPF работает напрямую с GPU и вы автоматом решили что он быстрее WinForms? :)

Во первых точно известно что WPF требует больше ресурсов память, CPU (это уже о многом говорит).
Во вторых логическая точка зрения, с чего бы это на обычных формах WPF с GPU будет быстрее Win Forms которые оптимизированы по самое нехочу и оптимизировались годами (специально для слабых PC), и главное с чего бы это CPU быть слабее GPU по выч. мощности? Далее, даже WinForms в конечном итоге также отрисовываются GPU.

3 На практике использования программ с WPF (ProgDVB, Win 7).
Даже после смены видяхи с GF 7900 Gs 512 на GF GTS 450 1024 абсолютно ничего не изменилось.
4 обсуждения на форумах программистов.
5. Давайте чтобы решить спор - напишем 2 программы - VCL(WinForms) и WPF - в которых по форме будут быстро перемещаться несколько стандартных виз. компонентов. (либо 50 прогресс баров) Это уже делали на одном форуме кстати, года 4 назад.


 
Rouse_ ©   (2011-12-05 19:34) [10]


> 5. Давайте чтобы решить спор - напишем 2 программы - VCL(WinForms)
> и WPF - в которых по форме будут быстро перемещаться несколько
> стандартных виз. компонентов. (либо 50 прогресс баров) Это
> уже делали на одном форуме кстати, года 4 назад.

А кстати - у кого есть возможность, накидайте плз такой тест, только в плане WPF + FireMonkey


 
И. Павел ©   (2011-12-05 19:51) [11]


> Давайте чтобы решить спор - напишем 2 программы - VCL(WinForms)
> и WPF - в которых по форме будут быстро перемещаться несколько
> стандартных виз. компонентов. (либо 50 прогресс баров) Это
> уже делали на одном форуме кстати, года 4 назад.

WPF не заточен под перемещение Button-ов (ему это и не к чему). Там богатые средства визуализации графики в широком смысле этого слова (например в кисточку можно вложить кучу геометрий, которые будут определять вид закраски, а в геометриях можно использовать специальный язык для постройки графических примитивов и т.д.). А Button-ы перемещать не нужно - юзер может испугаться :)


 
Кто б сомневался ©   (2011-12-05 21:04) [12]


> WPF не заточен под перемещение Button-ов (ему это и не к
> чему).


По пунктам.
1. Мы не говорим про широту возможностей, мы говорим о производительности, GPU, ресурсах, скорости отрисовки, и проектах с большим кол. визуальных элементов обновляющихся в real time  .

2. Перемещения элементов - это самая элементарная задача. Поэтому и она и выбрана.
У меня был реальный проект - большое дерево элементов (>200)  и на каждом элементе по 2 кнопки. При скроле эти кнопки надо передвигать. Если ты говоришь что "не заточен", представляю как это все бы работало.


 
И. Павел ©   (2011-12-05 21:45) [13]

Вот программа WPF. Перемещается массив из 1000 кнопок (ну или сколько влезет на экране, т.к. не знаю, отрисовываются ли невидимые кнопки). Абсолютно отсутствуют характерные для CGI моргания. В Delphi даже одна кнопка при перемещении без специальных ухищрений моргает.
http://www.fayloobmennik.net/1255479

PS: в WPF есть еще анимация. Я пока не дошел до этого момента в учебнике. Возможно, она предлагает лучший способ решения этой задачи, чем использование таймера.


 
И. Павел ©   (2011-12-05 21:48) [14]

Забыл текст к кнопкам добавить: http://www.fayloobmennik.net/1255511
Exe находится в bin\Debug\WpfApplication3.exe


 
И. Павел ©   (2011-12-05 21:49) [15]

CGI -> GDI


 
Rouse_ ©   (2011-12-05 21:51) [16]


> И. Павел ©   (05.12.11 21:48) [14]
>
> Забыл текст к кнопкам добавить: http://www.fayloobmennik.
> net/1255511
> Exe находится в bin\Debug\WpfApplication3.exe

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


 
Кто б сомневался ©   (2011-12-05 21:54) [17]


> В Delphi даже одна кнопка при перемещении без специальных
> ухищрений моргает.


1. Причем тут Delphi если мы говорим о Win Controls API vs WPF?
VCL это мощная обертка над Win Controls. Все остальное это дело ОС.


> В Delphi даже одна кнопка при перемещении без специальных
> ухищрений моргает.


2. У кого то моргает, у кого-то не моргает. Смотря как перемещать. Ухищрений там никаких делать не надо.


 
Rouse_ ©   (2011-12-05 21:56) [18]


> И. Павел ©   (05.12.11 21:48) [14]

Если есть возможность, сделай плз такой-же код, только с использованием FireMonkey


 
Кто б сомневался ©   (2011-12-05 21:57) [19]


> И. Павел ©   (05.12.11 21:48) [14]
>
> Забыл текст к кнопкам добавить: http://www.fayloobmennik.
> net/1255511
> Exe находится в bin\Debug\WpfApplication3.exe


Не запускается. Пишет что нужен 4,0,30319 фреймворк. В системе стоит 4. Видимо какой то апдейт нужен. XP x64 SP2


 
Кто б сомневался ©   (2011-12-05 21:58) [20]

Кстати все остальные ,Net программы работают без проблем - что -то ты накрутил там.


 
картман ©   (2011-12-05 22:03) [21]

всегда удивляло: нарисовать 1000 квадратиков - неужели так много нужно вычислений?


 
И. Павел ©   (2011-12-05 22:08) [22]


> Хм, такое ощущение что что-то с частотой вывода, после 5
> сек просмотра глаза заболели ппц. Моргает оч сильно.

Видимо, зависит от производительности системы.
Под морганием я имел ввиду появление "белых полос" при стирании и отрисовке заново.


> XP x64 SP2

Извиняюсь. Видимо, сделал не ту сборку. Вот этот, по идее, должен работать (хотя я занимаюсь WPF не долго, может быть WPF требует обновление но в опциях проекта прописан 4 фреймворк).

http://www.fayloobmennik.net/files/ok/1255581.html?check=5acf389ed4e8c4258475a9d5d4a0aab0

(bin\Release\WpfApplication3.exe)


 
Кто б сомневался ©   (2011-12-05 22:10) [23]

Загрузился на Win 7 ради интереса.
Чес говоря офигел. Пишет тоже самое  нужен 4,0,30319 фреймворк и не запускается.
Хотя Win 7 SP1. Думал что в Win 7 с .Net проблем не будет.


 
Kerk ©   (2011-12-05 22:11) [24]

Кто-то нам тут недавно про отличную совместимость между дотнетами рассказывал. Позвал бы его сейчас в студию, но не помню кто это был :)


 
Кто б сомневался ©   (2011-12-05 22:12) [25]

http://postimage.org/image/3okbhu187/


 
Rouse_ ©   (2011-12-05 22:17) [26]


> И. Павел ©   (05.12.11 22:08) [22]
>
>
> > Хм, такое ощущение что что-то с частотой вывода, после
> 5
> > сек просмотра глаза заболели ппц. Моргает оч сильно.
>
> Видимо, зависит от производительности системы.
> Под морганием я имел ввиду появление "белых полос" при стирании
> и отрисовке заново.

Хм, на производительность не жалуюся :)
Кризисы всякие там и прочее летает на максималке :)
Что наблюдаю - мерцание в области отрисовки кнопок, причем жутко раздражает глаза (что-то с частотой, как я и сказал).
ЗЫ: семерка с первым SP + .NET от последней студии.


 
Рамиль_   (2011-12-05 22:19) [27]


> И. Павел ©   (05.12.11 22:08) [22]

У меня запустилось, правда я компилировал.
Ну и сжирает одно ядро полностью, где здесь GPU?


 
И. Павел ©   (2011-12-05 22:21) [28]


> Кто б сомневался ©

Кажется, разобрался. У меня был выбран Framework 4 (client profile). Видимо под client profile подразумевалось, что в качестве минимальной будет та версия, которая в системе (а Framework  4,0,30319 (client profile) не написали).

http://www.fayloobmennik.net/1255650


 
DVM ©   (2011-12-05 22:24) [29]


> Рамиль_   (05.12.11 22:19) [27]


> Ну и сжирает одно ядро полностью, где здесь GPU?

а видеокарта поддерживает шейдеры, там вроде шейдеры какой то версии нужны


 
DVM ©   (2011-12-05 22:27) [30]


> Кто б сомневался ©   (05.12.11 18:28) [7]
>
> > DVM ©   (05.12.11 07:13) [6]
>
>
> И раз на GPU значит WPF должны быть быстрее чем Windows
> Forms?
> С чего бы это? :)

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


 
И. Павел ©   (2011-12-05 22:29) [31]


> Рамиль_   (05.12.11 22:19) [27]

Для сравнения сделайте тоже самое в Win Forms. Я сделал - результат впечатляет - код на win Forms выполняется еле-еле, кнопки рисуются медленно, мигают при перерисовке.

http://www.fayloobmennik.net/1255693


 
DVM ©   (2011-12-05 22:34) [32]


> И. Павел ©   (05.12.11 22:29) [31]

Более показательным было бы сравнение поведения формы и контролов на ней при масштабировании формы и  масштабировании контролов на ней. Вот тут WPF вне конкуренции.


 
Кто б сомневался ©   (2011-12-05 22:35) [33]

На XP x64 не запустилась, та же причина. На Win 7 запустилась.

Как выше написали проц на 100%.
Кнопки передвигаются с заметными рывками.
Запустил на реальной и на виртуальной ОС (обе 2 ядра). Разницы реально никакой.
На реальной GF GTS 450 1024 - Crysis 2 играл почти на эстремальных.


> а видеокарта поддерживает шейдеры, там вроде шейдеры какой
> то версии нужны


Шейдеры? Для квадратных кнопок? Зачем?


 
DVM ©   (2011-12-05 22:37) [34]


> Кто б сомневался ©   (05.12.11 22:35) [33]


> Шейдеры? Для квадратных кнопок? Зачем?

не конкретно для кнопок а для WPF вообще, для ее максимальной производительности.


 
Рамиль_   (2011-12-05 22:43) [35]


> И. Павел ©   (05.12.11 22:29) [31]

Да, гораздо медленнее.

> DVM ©   (05.12.11 22:24) [29]

Сомнительно, что шейдры нужны для кнопок, но ATI 5770 должна тянуть.


 
DVM ©   (2011-12-05 22:44) [36]


> Рамиль_   (05.12.11 22:43) [35]


> Сомнительно, что шейдры нужны для кнопок, но ATI 5770 должна
> тянуть.

для простых кнопок не нужны.


 
Кто б сомневался ©   (2011-12-05 22:44) [37]

И. Павел расскажи вкратце как ты делал, я сделаю тоже на VCL как приду домой.
Просто интересно для сравнения.
Кнопки с каким интервалом перемещаются, сколько кнопок? Где находиться код перемещения (в каком файле)?


 
DVM ©   (2011-12-05 22:45) [38]


> Кто б сомневался ©   (05.12.11 22:44) [37]


> И. Павел расскажи вкратце как ты делал, я сделаю тоже на
> VCL как приду домой.

там же исходники есть для обеих версий


 
Кто б сомневался ©   (2011-12-05 22:47) [39]

Нашел уже. MainWindow.xaml.cs


 
DVM ©   (2011-12-05 22:49) [40]


> Кто б сомневался ©   (05.12.11 22:47) [39]

лучше Form1.cs посмотри, оно больше похоже на VCL


 
И. Павел ©   (2011-12-05 22:53) [41]


> Кто б сомневался ©   (05.12.11 22:44) [37]

В обработчике нажатия кнопки (той, которая изначально на форме) написал код для заполнения массива из 1000 кнопок. Присвоил им Top = i / 20 * 20 и Lwft = i % 20 * 50 (i - индекс кнопки в массиве). потом запустил таймер с интервалом в 50мс. В таймере смещал кнопки на 2 пикселя вправо, пока у первой кнопки не станет left > 300. Тогда шел влево до left = 0 и т.д. (через переменную, хранящую направление +1/-1)


 
И. Павел ©   (2011-12-05 22:54) [42]

Lwft -> Left


 
Rouse_ ©   (2011-12-05 23:39) [43]

Накидал на скорую руку на дельфе, помедленней конечно на порядок чем WPF, но вроде побыстрей этих ваших WinForms. (Еще раз просьба - у кого есть ХЕ2, сделайте аналог на FireMonkey для теста, плз)

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls;

type
 TForm1 = class(TForm)
   Panel1: TPanel;
   Button1: TButton;
   Timer1: TTimer;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   MoveToRight: Boolean;
   ButtonsOffset: ShortInt;
   Buttons: array [0..999] of TButton;
   function CalcButtonsOffset: Integer;
   procedure CreateThousandButtnos;
   procedure MoveButtons(Value: ShortInt);
   procedure ReleseButtons;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 CreateThousandButtnos;
end;

function TForm1.CalcButtonsOffset: Integer;
begin
 if MoveToRight then
   Dec(ButtonsOffset)
 else
   Inc(ButtonsOffset);
 if ButtonsOffset < 1 then
   MoveToRight := False;
 if ButtonsOffset > 16 then
   MoveToRight := True;
 Result := ButtonsOffset;
end;

procedure TForm1.CreateThousandButtnos;
var
 I: Integer;
begin
 for I := 0 to 999 do
 begin
   Buttons[I] := TButton.Create(nil);
   Buttons[I].Parent := Self;
   Buttons[I].Caption := IntToStr(I);
 end;
 Timer1.Enabled := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer1.Enabled := False;
 MoveToRight := False;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 ReleseButtons;
end;

procedure TForm1.MoveButtons(Value: ShortInt);
var
 I: Integer;
 D: THandle;
begin
 D := BeginDeferWindowPos(1000);
 try
   for I := 0 to 999 do
     D := DeferWindowPos(D, Buttons[I].Handle,
       0, (I * 75)  mod (20 * 75) + Value,
       I div 20 * 20 + Panel1.Height, 75, 20, SWP_NOZORDER or SWP_NOREDRAW);
 finally
   EndDeferWindowPos(D);
 end;
 RedrawWindow(Handle, nil, 0, RDW_INVALIDATE or RDW_ALLCHILDREN or RDW_UPDATENOW);
end;

procedure TForm1.ReleseButtons;
var
 I: Integer;
begin
 for I := 0 to 999 do
   Buttons[I].Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 MoveButtons(CalcButtonsOffset);
end;

end.


 
Rouse_ ©   (2011-12-05 23:44) [44]

зы: таймер на полтинник, алигн панели вверх, на панели Button1...


 
DVM ©   (2011-12-05 23:47) [45]


> Rouse_ ©   (05.12.11 23:39) [43]

А если вмеcто TButton взять TSpeedButton? Так оно более честно по сравнению с WPF.


 
DVM ©   (2011-12-05 23:48) [46]


> Rouse_ ©   (05.12.11 23:44) [44]
> зы: таймер на полтинник, алигн панели вверх, на панели Button1.
> ..
>
>

Дай DFM а лучше весь проект сделаю XE2 + FM


 
Rouse_ ©   (2011-12-05 23:53) [47]


> DVM ©   (05.12.11 23:47) [45]
>
>
> > Rouse_ ©   (05.12.11 23:39) [43]
>
> А если вмеcто TButton взять TSpeedButton?

Ща попробую...


 
Rouse_ ©   (2011-12-05 23:57) [48]

Не получится, этож график контрол. Хэндла нема, стало быть править положение через Buttons[I].SetBounds придется с дикими тормозами, проще сразу на канве как нужно и оч быстро всю эту байду нарисовать.

Вот DFM:

object Form1: TForm1
 Left = 0
 Top = 0
 Caption = "Form1"
 ClientHeight = 337
 ClientWidth = 635
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "Tahoma"
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 OnDestroy = FormDestroy
 PixelsPerInch = 96
 TextHeight = 13
 object Panel1: TPanel
   Left = 0
   Top = 0
   Width = 635
   Height = 41
   Align = alTop
   TabOrder = 0
   ExplicitLeft = 120
   ExplicitTop = 144
   ExplicitWidth = 185
   object Button1: TButton
     Left = 8
     Top = 8
     Width = 75
     Height = 25
     Caption = #1057#1090#1072#1088#1090
     TabOrder = 0
     OnClick = Button1Click
   end
 end
 object Timer1: TTimer
   Interval = 50
   OnTimer = Timer1Timer
   Left = 88
   Top = 8
 end
end


 
DVM ©   (2011-12-06 00:00) [49]

FM на создании тысячи кнопок стал нереально тормозить. Короче даже окно двигается с ними с трудом.


 
Rouse_ ©   (2011-12-06 00:01) [50]

Да и на создании тыщи обычных кнопок дельфя секунды три курит...


 
DVM ©   (2011-12-06 00:02) [51]


> Rouse_ ©   (06.12.11 00:01) [50]

У меня он минуту уже курит.


 
Rouse_ ©   (2011-12-06 00:03) [52]


> DVM ©   (06.12.11 00:02) [51]
>
>
> > Rouse_ ©   (06.12.11 00:01) [50]
>
> У меня он минуту уже курит.
>

Ну тогда интересно - отрисовывать то он их хоть быстро будет или не? :)


 
DVM ©   (2011-12-06 00:12) [53]


> Rouse_ ©   (06.12.11 00:03) [52]

Отрисовывает и двигает нормально, но очень медленно. Примерно шаг в 1 секунду.


 
DVM ©   (2011-12-06 00:25) [54]

http://narod.ru/disk/33450847001/Project2.zip.html

вот для FM. Экзешник правда здоровый 8 мег.


 
Rouse_ ©   (2011-12-06 00:29) [55]

Удалено модератором
Примечание: 404


 
DVM ©   (2011-12-06 00:31) [56]


> 404 выдает

вроде нормально уже


 
Rouse_ ©   (2011-12-06 00:35) [57]

Хм, скачал.
Быстрее работает чем в моей демке и WebForm.
Медленней чутка чем в WPF, но совсем чутка и однозначно быстрее чем остальные.


 
icelex ©   (2011-12-06 00:47) [58]


> Кто б сомневался ©   (05.12.11 18:58) [9]

> 5. Давайте чтобы решить спор - напишем 2 программы - VCL(WinForms)
> и WPF - в которых по форме будут быстро перемещаться несколько
> стандартных виз. компонентов. (либо 50 прогресс баров) Это
> уже делали на одном форуме кстати, года 4 назад.

я не спорил, я спросил
мне фигней заниматься некогда и письками с кем-нибудь другим меряйся :)


 
знайка   (2011-12-06 01:29) [59]

Прикольно во время отрисовки еще и порисайзить окно.


 
Кто б сомневался ©   (2011-12-06 05:25) [60]


> Да и на создании тыщи обычных кнопок дельфя секунды три
> курит...


Нужно поменять местами строчки

Buttons[I].Parent := Self;
Buttons[I].Caption := IntToStr(I);

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

WPF явно быстрее при передвижении кнопок, вот только разницы в тормозах нет что на виртуальной машине, что на реальной с GTS 450 - проц грузится по максимуму, а тормоза те же. Видяха явно не слабая. Видимо все таки подгружает проц, как и в WinControls. Возможно там используется по умолчанию двойная буферизация, с ней и со стандартными контролами Windows не должно быть тормозов.
Но в целом ощущения неповоротливости от .Net программ, главным образом от интерфейсов остается. Реакция пользователя > <задержка> > отклик интерфейса. Возможно это проблемы реализации, но что-то слишком часто они встречаются, причем в качественных продуктах.


 
DVM ©   (2011-12-06 10:15) [61]


> Rouse_ ©   (06.12.11 00:35) [57]

Я тоже попробовал на другой машине - весьма шустро работает. Первый раз пробовал на нетбуке, не шибко мощном, вероятно там с поддержкой OpenGL в драйверах видеокарты не очень.


 
icelex ©   (2011-12-06 11:14) [62]


> Но в целом ощущения неповоротливости от .Net программ, главным
> образом от интерфейсов остается.

"Серебро-то нашлось. А вот остаток неприятный таки остался." (С)


 
han_malign   (2011-12-06 15:57) [63]


> А если вмеcто TButton взять TSpeedButton? Так оно более честно по сравнению с WPF.

> Хэндла нема, стало быть править положение через Buttons[I].SetBounds придется с дикими тормозами

TControl
...
protected
   procedure UpdateBoundsRect(const R: TRect);
...

- ну а Invalidate уж - не мелочась - всему родителю...
Хотя там и так, кроме 2000 x InvalidateRect, особо тормозов не должно быть...


 
Кто б сомневался ©   (2011-12-06 17:37) [64]


> icelex ©   (06.12.11 11:14) [62]


Не совсем нашлось то что искалось.

GPU так и не использовалось вместо него CPU. Причем разницы что на эмулируемой видяхе, что на реальной с кнопками+формой нет.

Кстати
Требования к ресурсам выше на пустых активных формах с кнопкой (1072\5288 PrivateWS; 7792\21036 WS) выше у .net
3. Мелочь но все таки - Если ресайзить пустую форму обоих проектов (.Net и нативного) - форма .Net медленнее ресайзиться, при быстрой смене размера, видны черные прямоугольники, в VCL такого нет, и форма ресайзится плавнее (проверял на виртуалке).
Наверняка есть и другие ньюансы в плане производительности. Должно быть объяснение неповоротливости .net программ, врядли это эффекты конкретной реализации.


 
Rouse_ ©   (2011-12-06 18:53) [65]


> han_malign   (06.12.11 15:57) [63]

Угу, в таком варианте работает побыстрее даже WPF.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ExtCtrls, Buttons;

type
 TFriendlySpeedButton = class(TSpeedButton);

 TForm1 = class(TForm)
   Panel1: TPanel;
   Button1: TButton;
   Timer1: TTimer;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   MoveToRight: Boolean;
   ButtonsOffset: ShortInt;
   Buttons: array [0..999] of TFriendlySpeedButton;
   function CalcButtonsOffset: Integer;
   procedure CreateThousandButtnos;
   procedure MoveButtons(Value: ShortInt);
   procedure ReleseButtons;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 CreateThousandButtnos;
end;

function TForm1.CalcButtonsOffset: Integer;
begin
 if MoveToRight then
   Dec(ButtonsOffset)
 else
   Inc(ButtonsOffset);
 if ButtonsOffset < 1 then
   MoveToRight := False;
 if ButtonsOffset > 16 then
   MoveToRight := True;
 Result := ButtonsOffset;
end;

procedure TForm1.CreateThousandButtnos;
var
 I: Integer;
begin
 for I := 0 to 999 do
 begin
   Buttons[I] := TFriendlySpeedButton.Create(nil);
   Buttons[I].Caption := IntToStr(I);
   Buttons[I].Parent := Self;
 end;
 Timer1.Enabled := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Timer1.Enabled := False;
 MoveToRight := False;
 DoubleBuffered := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 ReleseButtons;
end;

procedure TForm1.MoveButtons(Value: ShortInt);
var
 I: Integer;
//  D: THandle;
 R: TRect;
begin
//  D := BeginDeferWindowPos(1000);
//  try
//    for I := 0 to 999 do
//      D := DeferWindowPos(D, Buttons[I].Handle,
//        0, (I * 75)  mod (20 * 75) + Value,
//        I div 20 * 20 + Panel1.Height, 75, 20, SWP_NOZORDER or SWP_NOREDRAW);
//  finally
//    EndDeferWindowPos(D);
//  end;
//  LockWindowUpdate(Handle);
   for I := 0 to 999 do
   begin
     R.Left := (I * 75)  mod (20 * 75) + Value;
     R.Top := I div 20 * 20 + Panel1.Height;
     R.Right := R.Left + 75;
     R.Bottom := R.Top + 20;
     Buttons[I].UpdateBoundsRect(R);
   end;
//  LockWindowUpdate(0);
//  RedrawWindow(Handle, nil, 0, RDW_INVALIDATE or RDW_ALLCHILDREN or RDW_UPDATENOW);
 Invalidate;
end;

procedure TForm1.ReleseButtons;
var
 I: Integer;
begin
 for I := 0 to 999 do
   Buttons[I].Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 MoveButtons(CalcButtonsOffset);
end;

end.



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2012.04.01;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.66 MB
Время: 0.004 c
3-1273743190
Роман
2010-05-13 13:33
2012.04.01
Подключение Delphi к базе Firebird


15-1321017183
Бездомный
2011-11-11 17:13
2012.04.01
Когда, интересно, появятся компьютеры, способные


2-1323774868
igorium
2011-12-13 15:14
2012.04.01
цвета вкладок в TabControl


15-1322773113
Германн
2011-12-02 00:58
2012.04.01
Список устройств в "Диспетчере оборудования"


1-1290433876
oren_yastreb
2010-11-22 16:51
2012.04.01
WinExecAndWait32





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский