Намалювати сітку на формі
Привіт, знавці!
Хочу намалювати сітку на формі (панелі, ще чомусь нитка), ніби як в Делфі в дизайнера форми точки, але краще сітку. передбачається зробити з цієї форми / панелі / ще чого теж дизайнер і розтягувати по ньому компоненти (хотілося б просто спадкоємці TGraphicControl). Як і де потрібно малювати сітку, і (це правда вже інше питання), як зробити такий компонент, щоб його потім мишкою тягати?
Як і де потрібно малювати сітку
обробив Paint спадкоємця TGraphicControl, і не забудь св-во Align. (Пол години не більше)
як зробити такий компонент, щоб його потім мишкою тягати
будь-який спадкоємець від TControl.
як зробити такий компонент, щоб його потім мишкою тягати
будь-який спадкоємець від TControl.
що потрібно обробляти? яке повідомлення? і як?
общерекомендуемое mousedown, releasecapture, self.perform (чогось там) працювало на tbutton, але не на спадкоємця TGraphicControl
Dark Hunter (20.01.04 20:17) [2]
що потрібно обробляти? яке повідомлення? і як?
Механізм DragDrop чув про таке?
в продовження теми:
вийшла форма, на ній спадкоємець TCustomPanel з цієї сіткою, розміри панелі багато більше розмірів форми. З'явилися скроллбар, і це чудово.
Але: сітка малюється тільки на панелі покласти який-нить компонент, перестає отрісовиваться спочатку невидима частина сітки на цій панелі, тільки лівий верхній кут
800х600 (в моєму випадку такий дозвіл). В інших місцях звичайна сіра панель :(
як малювати сітку по всій панелі?
Перепиши для твоєї панелі подія OnPaint - де будеш малювати сітку (по всій панелі).
пишу в обробнику OnPaint:
Brush.Color: = FGridBackColor;
Brush.Style: = bsSolid;
Rectangle (Rect);
if FShowGrid then begin
Brush.Color: = FGridForeColor;
Brush.Style: = bsCross;
Rectangle (Rect);
end
сітка малюється повністю.
Варто на неї в цій спочатку видимій області покласти наприклад TLabel (він спадкоємець TGraphicControl), або мій компонент (теж від TGraphicControl) сітка малюється тільки на цій частині зліва вгорі, розміром з екран.
Розміри панелі залишаються такими, як і були (4000 * 3000).
Це глюк в віндовсі або у кого. )
соор за неросійське побудова речень
І де ж тут сітка - я бачу лише два Rectangle причому непол.
мої думки:
перша заливка суцільна, кольором фону FGridBackColor (захищений член класу моєї панелі);
друга, за умови, що потрібно малювати сітку - заливка патерном bsCross кольором FGridForeColor (аналогічно до);
енд;
поясни свій погляд на ситуацію, будь ласка
Я не знаю що у тебе але я ось пробував створити компонент
Uses
Windows, Messages, SysUtils, Classes, Controls, ExtCtrls, Graphics;
Procedure GrPanel.Paint;
Begin
Inherited Paint;
With Canvas Do
Begin
Brush.Style: = bsSolid;
Brush.Color: = clBtnFace;
FillRect (ClientRect);
Brush.Style: = bsCross;
Brush.Color: = clRed;
Rectangle (ClientRect);
End;
End;
Procedure Register;
Begin
RegisterComponents ( "Standard", [GrPanel]);
End;
Поставив його нема на форму а в ScrollBox і додав на панель кнопку, лейбл - при прокручуванні все нормально сітка видна по всій панелі.