Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.01;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.67 MB
Время: 0.008 c
1-1290434672
DeadAlice
2010-11-22 17:04
2012.04.01
Печать на POS-принтер с определением состояния процесса


15-1322315078
Правильный$Вася
2011-11-26 17:44
2012.04.01
Долгая установка Win7


15-1322725585
Pazitron_Brain
2011-12-01 11:46
2012.04.01
Как в Делфи написать паскалевскую программу?


15-1323157523
Pit
2011-12-06 11:45
2012.04.01
Delphi 7, приложение падает, если включена оптимизация


15-1322845352
paxpet
2011-12-02 21:02
2012.04.01
Можно ли увеличить размер шрифта в интерфесе delphi