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

Вниз

При изменении размеров формы пропадает панель   Найти похожие ветки 

 
Light-blr   (2007-02-07 17:41) [0]

Здравствуйте.
У меня на форме панель с положением AlBottom и Image на всём остальном пространстве (ширина по Form.ClientWidth, высота как Form.ClientHeight-Panel.Height, положение AlTop). Размеры формы могут изменяться, на OnResize я поставила просто изменение высоты Image (ширина Image и панели изменяется автоматически, а высота панели не меняется).
Так вот, если раздвигать форму стрелочками, то всё отлично. А если раздвигать кнопкой (которая в верхнем правом углу), а потом сдвигать обратно (той же кнопкой), то панель становится не видна (остаётся как бы на том же месте, что в развёрнутом состоянии, но это уже за пределами формы). А если после этого начать снова двигать размеры формы стрелочками, она появляется.
Кто-нибудь может сказать, в чём здесь дело? Как заставить панель появиться там где надо, при том что ClientHeight, как ему и положено, изменяется вовремя, высота панели вообще не меняется, а кнопок прокрутки на форме не появляется?


 
RASkov   (2007-02-07 18:13) [1]

Panel.Align:=alBottom;
Image.Align:=alClient;


 
RASkov   (2007-02-07 18:14) [2]

И не надо ничего на OnResize


 
Light-blr   (2007-02-07 18:25) [3]

Если делать AlClient, то Image оказывается под панелью, а мне надо чтобы они стыковались (в перспективе хочу ещё полосу прокрутки сделать). И это всё равно не решает поставленную проблему...


 
Light-blr   (2007-02-07 18:28) [4]

Проверила, исправляюсь, под панелью Image не оказывается, но вот под полосой прокрутки - да.


 
RASkov   (2007-02-07 18:50) [5]

> [4] Light-blr   (07.02.07 18:28)


> в перспективе хочу ещё полосу прокрутки сделать)

Что такое "полоса прокрутки"? И что она прокручивает?


 
Light-blr   (2007-02-07 19:06) [6]

Полоса прокрутки, которая ScrollBar.
Будет прокручивать Image (если влезла не вся картинка - можно будет прокрутить). Я долго пыталась найти собственную прокрутку у Image, но не нашла... А она есть? Тогда мне больше ничего не надо :)


 
Германн ©   (2007-02-07 19:24) [7]


> Я долго пыталась найти собственную прокрутку у Image, но
> не нашла... А она есть? Тогда мне больше ничего не надо
> :)

Есть ScrollBox


 
RASkov   (2007-02-07 21:03) [8]

> [6] Light-blr   (07.02.07 19:06)

Вот форма:
object Form1: TForm1
 Left = 192
 Top = 114
 Width = 870
 Height = 640
 Caption = "Form1"
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = "MS Sans Serif"
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object Image1: TImage
   Left = 0
   Top = 0
   Width = 845
   Height = 548
   Align = alClient
 end
 object Panel1: TPanel
   Left = 0
   Top = 565
   Width = 862
   Height = 41
   Align = alBottom
   Caption = "Panel1"
   TabOrder = 0
 end
 object ScrollBar1: TScrollBar
   Left = 0
   Top = 548
   Width = 862
   Height = 17
   Align = alBottom
   PageSize = 0
   TabOrder = 1
 end
 object ScrollBar2: TScrollBar
   Left = 845
   Top = 0
   Width = 17
   Height = 548
   Align = alRight
   Kind = sbVertical
   PageSize = 0
   TabOrder = 2
 end
end

А прокрутку придумала?


 
Light-blr   (2007-02-07 21:37) [9]

ScrollBox меня не удовлетворяет, к сожалению (первым делом его пыталась использовать). Дело в том, что в Image загружаются картинки, а на форме после этого рисуются квадратики (MoveTo-LineTo). Они видны над картинкой, что мне и надо. А в ScrollBox-е нет Canvas (как и на панели). Или я просто не знаю, как его там найти.
Поэтому мне нужен ScrollBar, сама все события реализую. Так, как мне надо.

Панель действительно перестала пропадать, когда я поставила в Image alClient. Только так и не поняла, почему это так.


 
Германн ©   (2007-02-08 01:31) [10]


> Light-blr   (07.02.07 21:37) [9]
>
> ScrollBox меня не удовлетворяет, к сожалению (первым делом
> его пыталась использовать). Дело в том, что в Image загружаются
> картинки, а на форме после этого рисуются квадратики (MoveTo-
> LineTo). Они видны над картинкой, что мне и надо. А в ScrollBox-
> е нет Canvas (как и на панели). Или я просто не знаю, как
> его там найти.

А, имхо, не там ищешь! И не там рисуешь и не так рисуешь!
Может сможешь изложить тут не проблему, а саму задачу?
Моя 5-я точка чует, что эту задачу нужно решать через другие органы :)


 
RASkov   (2007-02-08 07:07) [11]

> А в ScrollBox-е нет Canvas (как и на панели).

Держи канву для панели и для скролбокса:
type
 TMyPanel = class(TPanel)
 public
   property Canvas;
 end;
 TPanel = class(TMyPanel);

 TForm1 = class(TForm)
   ScrollBox1: TScrollBox;
   Panel1: TPanel;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Cnvs: TControlCanvas;
begin
 Panel1.Canvas.Ellipse(10, 10, 30, 30);
 Cnvs:=TControlCanvas.Create;
 Cnvs.Control:=ScrollBox1;
 Cnvs.Brush:=Brush;
 Cnvs.Rectangle(10, 10, 30, 30);
 Cnvs.Free;
end;


 
MsGuns ©   (2007-02-08 09:21) [12]

Если элементы интерфейса плохо графически выравниваются друг относительно друга, следует использовать доп. групповые контейнеры (панели, групбоксы), кторые уже прекрасно умеюют выравниваться друг относительно друга ;)


 
TRUNK ©   (2007-02-08 10:31) [13]


> Light-blr   (07.02.07 21:37) [9]
> А в ScrollBox-е нет Canvas

Поставь Image на ScrollBox, и установи свойство Image.Align=alClient.


 
Light-blr   (2007-02-08 15:12) [14]

Германн
В самом общем виде: есть картинка, из которой надо сделать схему (типа как картины для вышивки). Для этого на картинку должна наложиться сетка, которую пользователь может сам закрашивать. Когда в Image загружена картинка, на ней нельзя рисовать (выскакивает ошибка, что нельзя использовать Canvas). Если поверх положить другой Image, то он мне затрёт картинку, потому что когда обращаешься к его канве, он первым делом заливает её фоновым цветом, а на этом цвете уже рисует.
Поэтому единственный вариант, который я нашла - рисовать по форме, на которой лежит Image. Спасибо товарищу RASkovу за канву для скроллбокса, одной проблемой станет меньше.


 
RASkov   (2007-02-08 20:27) [15]

> Когда в Image загружена картинка, на ней нельзя рисовать
> (выскакивает ошибка, что нельзя использовать Canvas).

Ну это потому, что картинка форматом отличная от BitMap

> Поэтому единственный вариант, который я нашла - рисовать
> по форме, на которой лежит Image.

Преобразуй Picture в Image к BitMap"у и рисуй на нем...

> он первым делом заливает её фоновым цветом, а на этом цвете
> уже рисует.

Style:=bsClear;

procedure TForm1.Button2Click(Sender: TObject);
var N, J: Integer;
BMP: TBitMap;
begin
 BMP:=TBitMap.Create;
 try
 BMP.Assign(Image1.Picture.Graphic);
 Image1.Picture.Assign(BMP);
 Image1.Canvas.Brush.Style:=bsClear;
 for N:= 0 to Image1.Width do
  for J:= 0 to Image1.Height do begin
   if (N mod 10=0) and (J mod 10=0) then begin
    if CheckBoxFill.Checked then Image1.Canvas.Brush.Color:=Image1.Canvas.Pixels[N+5, J+5];
    Image1.Canvas.Rectangle(N, J, N+9, J+9);
    end;
  end;
 finally BMP.Free; end;
end;


 
RASkov   (2007-02-08 20:29) [16]

> > он первым делом заливает её фоновым цветом, а на этом
> цвете
> > уже рисует.
>
> Style:=bsClear;

Image1.Canvas.Brush.Style:=bsClear;



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

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

Наверх





Память: 0.49 MB
Время: 0.041 c
2-1170556818
Riply
2007-02-04 05:40
2007.02.25
Обращение к свойству класса после вызова Destroy.


2-1170512601
metex
2007-02-03 17:23
2007.02.25
Out of memory. Как с этим бороться?


15-1170440145
_uw_
2007-02-02 21:15
2007.02.25
О Картинках


15-1170307163
Elen
2007-02-01 08:19
2007.02.25
Как избавиться от внезапного включения компа


2-1170405465
wrtyu
2007-02-02 11:37
2007.02.25
Как выполнить http-скрипт?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский