Kolor ramki edit'a bez ctl3d

0

Witam
Jak zmienic kolor obramowania edita ktorego wlasciwosc ctl3d wylaczylem (plaski).

0

Wrzucasz sobie w Timer i ustawiasz Interval na 1:

procedure TForm1.Timer1Timer(Sender: TObject);
var
  H: HDC;
begin
if Form1.Active then begin
  Canvas.Refresh;
  H:=GetDC(0);
  Canvas.Handle:=H;

  Canvas.Pen.Color:=clBlue;  // tu ustawiasz sobie swój kolor :)

  Canvas.MoveTo(Form1.Left+Edit1.Left+4, Form1.Top+Edit1.Top+30);
  CAnvas.LineTo(Form1.Left+Edit1.Left+4+Edit1.Width, Form1.Top+Edit1.Top+30);

  Canvas.MoveTo(Form1.Left+Edit1.Left+4, Form1.Top+Edit1.Top+30);
  Canvas.LineTo(Form1.Left+Edit1.Left+4, Form1.Top+Edit1.Top+30+Edit1.Height);

  Canvas.MoveTo(Form1.Left+Edit1.Left+4, Form1.Top+Edit1.Top+30+Edit1.Height-1);
  Canvas.LineTo(Form1.Left+Edit1.Left+4+Edit1.Width, Form1.Top+Edit1.Top+30+Edit1.Height-1);

  CAnvas.MoveTo(Form1.Left+Edit1.Left+4+Edit1.Width-1, Form1.Top+Edit1.Top+30);
  Canvas.LineTo(Form1.Left+Edit1.Left+4+Edit1.Width-1, Form1.Top+Edit1.Top+30+Edit1.Height-1);

  ReleaseDC(0, H);
end;
end;

Sposób może troszke "okrężny" ale działa :P :) ;)

0

Można łatwiej :)
Dajesz to np. w onCreate:

var
  C: TControlCanvas;
begin
  try
    C := TControlCanvas.Create;
    C.Control := Edit1;
    C.Pen.Color:= clGreen;
    C.Brush.Style:= bsClear;
    c.Rectangle(0,0, Edit1.Width, Edit1.Height);
  finally
    c.Free;
  end;
0

Dobre, dzieki.
Czy podczas OnResize formy, jesli chce zmienic Width dla Edit'a musze wykonac cala ta funkcje (TControlCanvas) ponownie?

1 użytkowników online, w tym zalogowanych: 0, gości: 1