Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Размеры и разрешения


Автор: linker 24.6.2003, 13:13
На форме есть несколько компонентов при разрешении 800*600 и при развороте на полный экран все размешено нормально, а стоит поменять разрешение 640*480 компоненты не помещаются на экране, а при 1024*768 наоборот слишком маленькии, так вот как сделать так чтобы дизайн формы оставался одним и темже при разных разрешениях.

Автор: eof 24.6.2003, 13:41
... свойство Align использовать, описывать пропорциональное изменение размеров контролов (может быть шрифтов) в событие OnResize формы, ну и стараться разрабатывать интерфейс такой чтобы он нормально смотрелся во всех разрешениях.
А с какими компонентами проблемы? Например для менюшек, командных панелей и т.п. есть специальные решения.

Автор: linker 24.6.2003, 14:17
В WebBrowser я вывожу станичку с gif'ом или сам gif, но он нарисован для 800*600(наверное для каждого разрешения предется рисовать отдельно). А так же DbGrid и несколько полей DBMemo.

Автор: dm9 24.6.2003, 15:40
baaa.gif Есть в FAQ! Кто бы мог подумать? tounge.gif

http://forum.vingrad.ru/index.php?act=ST&f=32&t=1954

Автор: altarasjuk 24.6.2003, 15:46
dm9, ты как всегда..... ;)
linker, Если я правильно понял, то тебе не сами компоненты надо, а html страницу ресайзить, а именно гиф? Так?

Автор: &-ray 24.6.2003, 23:21
А я понял так:
ему надо, чтобы при изменении разрешения экрана форма не меняла свои размеры относительно размера экрана. Я прав confused.gif
Если так, то наверно надо обрабатывать сообщение, посылаемое виндой в приложение, что сейчас будет изменено разрешение экрана и подстраиваться под новые размеры.
Хотя я не знаю, что это за сообщение, но интуитивно догадываюсь, что такое есть smile.gif
Другой вариант: в timer'е проверяй размеры экрана, если значения width и height поменялись, то соответственно изменяй свою форму.

Автор: altarasjuk 24.6.2003, 23:51
Ну ести так, то у формы, кстати, тоже есть anchors. Не знаю как это работает, просто не приходилось как-то, но вполне вероятно, что отрыботает как надо..... Хотя кто его знает confused.gif, но всё же проверить стоит... smile.gif

Автор: linker 25.6.2003, 11:45
Вообще в примере из FAQ все что надо получилось, а с gif'ом что-то не как.(придется рисовать под каждое разрешение)

Автор: altarasjuk 25.6.2003, 16:19
A что с гифом то не выходит? Oн отображается в имэйдже? Eсли да, то просто ресайзишь сам имейдж, и гиф собственно ресайзнется. (у этого имейджа должно быть установленно свойство Стрэч).

Автор: linker 25.6.2003, 17:55
Не, gif на WebBrowser лежит и хоть ты тресни ели он нарисован 800*640, то не ресайзнется он никак.

Автор: altarasjuk 25.6.2003, 18:06
если он на WebBrowser, то он запихнут и html, вот бери его и в html ресайзь... smile.gif

Автор: linker 17.7.2003, 23:27
Народ, слушайте столкнулся с проблемой во-первых в примере из FAQ компоненты будут изменять размеры только после смены разрешения экрана, а если переносить с одного компа на другой(с разными разрешениями) ничего не происходит.Прав был altarasjuk что можно менять свойство anchors у компонентов, вообщем когда я закончил свой проект и поставил у себя в разных отделах появилось очень много недочетов связаныхх с дизайном(шрифты, размеры компонент.....).У меня есть предложение может в FAQ тему создать по разработке дизайна приложения и описанием подводных камней с этим связанным или может кто ссылку кинет, что почитать можно по этому поводу.

Автор: altarasjuk 18.7.2003, 23:12
linker, лично я ещё не сталкивался со "станадартными" дизайнами, каждый раз всегда что-то новое, и при том кардинально.
Модераторам: Хоть это всё всегда действительно кардинально разное, но как ни крути, всё же это действительно тема. Я поддерживаю идею linker. Да и вообще было бы хорошо "типизировать" форум и соответствующий FAQ.

Автор: Pakshin A. S. 20.7.2003, 20:06
А ты меняй разрешение экрана при запуске программы на нужное тебе, напримет 800Х600.

Автор: altarasjuk 20.7.2003, 20:21
Pakshin A. S., смешно ха-ха-ха.... biggrin.gif Это называется не снимайте леса, пока обои не поклеили...... biggrin.gif . Мне бы не сильно понравилось, если бы какая-то прога начала менять у меня разрешение sad.gif

Автор: Pakshin A. S. 20.7.2003, 20:28
Вот исходник мини-программы, его можно немного переделать:
Код

unit Unit1;

interface

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

type
 PDmArray = ^TDmArray;
 TDmArray = array [0..0] of TDeviceMode;
 TForm1 = class(TForm)
   SpinEdit1: TSpinEdit;
   Button1: TButton;
   Memo1: TMemo;
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
 private
   lpDMArray: PDmArray;
   NumModes: integer;
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
MoreModes: boolean;
dm: TDeviceMode;
begin
Memo1.Lines.Cloar;
MoreModes:=true;
i:=0;
while MoreModes do
 begin
  MoreModes:=EnumDisplaySettings(nil, i, dm);
  Memo1.Lines.Add(' Mode ' + IntToStr(i) + ': ' + IntToStr(dm.dmBitsPerPel) + ' Bits Per Pixel ' + IntToStr(dm.dmPelsWidth) + ' x ' + IntToStr(dm.dmPelsHeight));
  inc(i);
 end;
NumModes:=i;
SpinEdit1.MaxValue:=NumModes;
GetMem(lpDmArray, SizeOf(TDeviceMode) * NumModes);
FillChar(lpDmArray^, SizeOf(TDeviceMode) * NumModes, #0);
{$IFOPT R+}
{$DEFINE CKRANGE}
{$R-}
{$EDNIF}
for i:=0 to (NumModes - 1) do
 EnumDisplaySettings(nil, i, lpDmArray[i]);
{$IFDEF CKRANGE}
{$UNDEF CKRANGE}
{$R+}
{$ENDIF}
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ReturnVal: LongInt;
begin
{$IFOPT R+}
{$DEFINE CKRANGE}
{$R-}
{$ENDIF}
ReturnVal:=ChangeDisplaySettings(lpDmArray[SpinEdit1.Value], CDS_UPDATEREGISTRY);
{$IFDEF CKRANGE}
{$UNDEF CKRANGE}
{$R+}
{$ENDIF}
with Memo1.Lines do
 case ReturnVal of
  DISP_CHANGE_SECCESSFUL: {};
  DISP_CHANGE_RESTART:        {};
  DISP_CHANGE_BADFLAGS:      {};
  DISP_CHANGE_FAILED:           {};
  DISP_CHANGE_BADMODE:       {};
  DISP_CHANGE_NUTUPDATED:  {};
 end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeMem(lpDmArray, SizeOf(TDeviceMode) * NumModes);
end;

end.

Автор: Pakshin A. S. 20.7.2003, 20:35
Зато весело было бы...

Автор: Pakshin A. S. 20.7.2003, 20:42
А если поставить форму без изменения размеров, т. е. что-то вроде BorderStyle=bsSingle или BorderStyle=bsToolWindow... должно работать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)