SER[G]ANT Опубликовано 10 июня, 2010 Поделиться Опубликовано 10 июня, 2010 Знаю как поменять цвет у определенного пикселяvar PColor:TColor;R,G,B:byte;beginPColor:=Form1.Canvas.Pixels[1,1];R:=GetRValue(PColor);G:=GetGValue(PColor);B:=GetBValue(PColor);Form1.Canvas.Pixels[5,5]:=RGB(R+30,G+30,;А как поменять цвет остальных пикселей на форме, находящихся на одинаковом расстоянии друг от друга ? <<--- Не понятное сморозил ;PВообщем, пытаюсь сделать что-то вроде точек, как в компиляторе на форме. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 11 июня, 2010 Поделиться Опубликовано 11 июня, 2010 Можно взять такой вариант.unit _Paint;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm2 = class(TForm) procedure FormPaint(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form2: TForm2; limitX: integer; limitY: integer; _Canvas: TCanvas; _Color: TColor;implementation{$R *.dfm}procedure TForm2.FormCreate(Sender: TObject);begin limitX:=10; limitY:=10; _Canvas:=Form2.Canvas; _Color:=0;end;procedure TForm2.FormPaint(Sender: TObject);var aWidth: integer; aHeigth: integer; i,j:integer;begin aWidth:=Form2.ClientWidth div limitX; aHeigth:=Form2.ClientHeight div limitY; for i:=0 to aWidth do for j:=0 to aHeigth do _Canvas.Pixels[i*limitX,j*limitY]:=_color;end;end.Правда есть и более производительный вариант с так называемой "подложкой" - картинокой. Подложка должна рисоваться внутри TForm2.FormPaint на самой Form2а изменяться внутри TForm2.OnResize. Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 11 июня, 2010 Автор Поделиться Опубликовано 11 июня, 2010 сделал при помощи 2 варианта, спс. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 11 июня, 2010 Поделиться Опубликовано 11 июня, 2010 Лучше бы привёл решение. Мне интересно было бы глянуть.Да и пользы будет больше: нашёл тему и нашёл ответ, а не узнал что кто-то нашёл ответ. Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 11 июня, 2010 Автор Поделиться Опубликовано 11 июня, 2010 http://www.delphisources.ru/pages/faq/base/fill_form_background2.html Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 11 июня, 2010 Поделиться Опубликовано 11 июня, 2010 Так тоже можно (?)var x,y: Integer;beginfor y := 0 to Form1.Heightdo for x := 0 to Form1.Width do if (y mod 5 = 0) and (x mod 5 = 0) then Form1.Canvas.Pixels[x,y] := clBlack;end;procedure TForm1.FormPaint(Sender: TObject); Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 12 июня, 2010 Поделиться Опубликовано 12 июня, 2010 http://www.delphisources.ru/pages/faq/base/fill_form_background2.htmlСпасибо SER[G]ANT.Кстати чтобы тебя цитировать приходиться убирать скобки SER[G]ANT Так тоже можно (?)var x,y: Integer;beginfor y := 0 to Form1.Heightdo for x := 0 to Form1.Width do if (y mod 5 = 0) and (x mod 5 = 0) then Form1.Canvas.Pixels[x,y] := clBlack;end;procedure TForm1.FormPaint(Sender: TObject);Form1.Height и Form1.Width это не клиентская область поэтому будут некоторые смещения у сетки.Когда в цикле делаешь do for x := 0 to Form1.Width, то возможно (я точно не помню) это будет сказываться на производительности, т.к. каждый раз будет расчитываться путь до значения "with" через смещение от "Form1." Этот цикл сравнения if (y mod 5 = 0) and (x mod 5 = 0), тоже влияется на производительность. Но я только предполагаю, надо лесть в отлдаку и сравнивать производительность. Ссылка на комментарий Поделиться на другие сайты Поделиться
live_4_ever Опубликовано 12 июня, 2010 Поделиться Опубликовано 12 июня, 2010 Тогда можно ClientHeight, ClientWidth.Тогда часть будет использована формы. А так, вся высота и вся ширина.Так получается. Быстрее практически не будет...Но сравнить можно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения