Текущий архив: 2007.02.25;
Скачать: CL | DM;
ВнизПри изменении размеров формы пропадает панель Найти похожие ветки
← →
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;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.054 c