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

Вниз

Изменить цвет пикселя на контроле   Найти похожие ветки 

 
SetPixel_on_Control   (2014-10-06 16:19) [0]

Есть желание изменить цвет одного - двух пикселей, например, на TPanel или TMemo (не целиком TPanel.Color или TMemo.Color, а именно несколько пикселей на них). Насколько это реально и достаточно не сложно?
Спасибо.


 
SetPixel_on_Control   (2014-10-06 16:29) [1]

PS
Располагая только их координатами на форме ...


 
megavoid ©   (2014-10-06 16:37) [2]

Form1.Canvas.Pixels[10, 10] := clRed;


 
junglecat ©   (2014-10-06 16:48) [3]

в мемо так просто не получится


 
SetPixel_on_Control   (2014-10-06 18:06) [4]

> junglecat ©   (06.10.14 16:48) [3]

Да и на "голой" форме, не говоря о контролах, пока не получилось


 
SetPixel_on_Control   (2014-10-06 18:08) [5]

Как мне показалось, здесь нужно SetPixel. Не знаю, что назначить HDC?


 
junglecat ©   (2014-10-06 19:00) [6]

SetPixel будет виден до первой перерисовки контролом себя


 
DQ   (2014-10-06 22:31) [7]

Перекрыть ON_PAINT этих контролов. Судя по вопросу - будет сложно. =)


 
Andy BitOff ©   (2014-10-07 00:36) [8]

Не все так просто с ВинКонтролами. Я бы даже сказал, что очень не просто.

На разбирайся, если есть особой желание. Это не решение твоей задачи, это помощь для возможного ее решения.

uses ...
 GDIPAPI,
 GDIPOBJ,
 GDIPUTIL;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Panel1: TPanel;
   RadioButton1: TRadioButton;
   Edit1: TEdit;
   ListBox1: TListBox;
   StaticText1: TStaticText;
   Memo1: TMemo;
...

procedure TForm1.ControlPaint(Sender: TWinControl);
var
 a, r, g, b: byte;
 x, y, width, height, sizePixel, widthInBytes: Integer;
 DC: HDC;
 InnerImage: TGPBitmap;
 GPGraph: TGPGraphics;
 ImageBA: pByteArray;
 BitmapData: TBitmapData;
//  ImageFormatPNG: TGUID;
begin

 InnerImage := TGPBitmap.Create(Sender.ClientWidth, Sender.ClientHeight);
 GPGraph := TGPGraphics.Create(InnerImage);

 try
   DC := GPGraph.GetHDC();      // отрисовываем сам контрол
   try
     Sender.PaintTo(DC, 0, 0);
   finally
     GPGraph.ReleaseHDC(DC);
     GPGraph.Free;
   end;

   width := Floor(InnerImage.getWidth);      // работаем с данными изображения
   height := Floor(InnerImage.GetHeight);
   sizePixel := 4;
   widthInBytes := width * sizePixel;
   InnerImage.LockBits(MakeRect(0, 0, width, height), ImageLockModeRead or ImageLockModeWrite, PixelFormat32bppARGB, BitmapData);
   try
     for y := 0 to height - 1 do begin
       ImageBA := Pointer(Integer(BitmapData.Scan0) + widthInBytes * y);
       x := 0;
       while x < widthInBytes do begin
         a := ImageBA[x + 3];
         r := ImageBA[x + 2];
         g := ImageBA[x + 1];
         b := ImageBA[x];

         if y mod 2 = 0 then begin  // через строчку
           r := 255;                // Красненький :)
           g := 0;
           b := 0;
         end;

         ImageBA[x + 3] := a;
         ImageBA[x + 2] := r;
         ImageBA[x + 1] := g;
         ImageBA[x] := b;

         Inc(x, sizePixel);
       end;
     end;
   finally
     InnerImage.UnlockBits(BitmapData);
   end;

//    GetEncoderClsid("image/png", ImageFormatPNG);  // Save в файл для теста
//    InnerImage.Save("image.png", ImageFormatPNG);

   DC := GetDc(Sender.Handle);       // выводим
   try
     GPGraph := TGPGraphics.Create(DC);
     GPGraph.DrawImage(InnerImage, 0, 0, Sender.ClientWidth, Sender.ClientHeight);
   finally
     ReleaseDC(0, DC);
   end;
 finally
   GPGraph.Free;
   InnerImage.Free;
 end;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
 ControlPaint(Button1);
 ControlPaint(Panel1);
 ControlPaint(RadioButton1);
 ControlPaint(Edit1);
 ControlPaint(ListBox1);
 ControlPaint(StaticText1);
 ControlPaint(Memo1);
end;


 
ВладОшин ©   (2014-10-09 21:42) [9]

Глупый вопрос - зачем?
Хочешь юзера с ума свести?  Вдруг подумает, что пиксель на мониторе выбит :)


 
Alarm ©   (2014-10-10 14:37) [10]

Ну почему свести с ума, возможно прогеру хочется каким-то (малозаметным) образом выделить соответствующий баттон или мемо. Всяко разные могут быть причины :)



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

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

Наверх





Память: 0.47 MB
Время: 0.036 c
2-1411153202
ser
2014-09-19 23:00
2016.05.08
запись в ini файл


15-1440451804
Юрий
2015-08-25 00:30
2016.05.08
С днем рождения ! 25 августа 2015 вторник


2-1412597981
SetPixel_on_Control
2014-10-06 16:19
2016.05.08
Изменить цвет пикселя на контроле


15-1440500315
Masterucs
2015-08-25 13:58
2016.05.08
Как понять, что приложение запустили в виде сервиса?


15-1440322751
megavoid
2015-08-23 12:39
2016.05.08
Нужна ли грамотность в работе программиста?





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