Entwickler-Ecke

Sonstiges (Delphi) - Bestimmte Form


babeuf - Mi 04.09.02 09:22
Titel: Bestimmte Form
Hallo ich hab ne Frage wie ich bei meinem Formblatt eine bestimmte Form hinbekomme. Ja, ich habe die FAQ gelesen, nur leider schaffe ich es trotzdem nicht meine gewünschte Form zu erzeugen. Das Formblatt soll folgendermaßen aussehen: oben gerade (die titelzeile soll komplett zu sehen sein), aber unten abgerundet.

Ich schätze mal, dass man bei diesen Code die Arrayzahlen verändern muss um meine Form hinzubekommen. Ich weiß aber eben nicht wie...



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.FormCreate(Sender: TObject); 
var 
  HR: HRgn; 
  p:array[0..3] of TPoint; 
begin 
  p[0]:=Point(Width div 2,1); 
  p[1]:=Point(1, Height div 2); 
  p[2]:=Point(Width div 2,Height); 
  p[3]:=Point(Width, Height div 2); 
  HR:= CreateEllipticRgn (0, 0, Width, Height); 
  SetWindowRgn(Handle, HR, True); 
end;


Danke im Voraus
babeuf


GPF - Mi 04.09.02 11:50

Folgender Codeschnipsel sollte genau das machen, das Du suchst:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var
  HR, Hr2: HRgn;
  p:array[0..3] of TPoint;
begin
  Hr2:=CreateRectRgn(0,0,width, Height div 2);
  p[0]:=Point(Width div 2,1);
  p[1]:=Point(1, Height div 2);
  p[2]:=Point(Width div 2,Height);
  p[3]:=Point(Width, Height div 2);
  HR:= CreateEllipticRgn (0, 0, Width, Height);
  CombineRgn(Hr, Hr, Hr2, RGN_OR);
  SetWindowRgn(Handle, HR, True);
  DeleteObject(Hr2);
end;


Du erstellst einfach den rechteckigen Bereich als zweite Region, die bleiben soll, und kombinierst (CombineRgn) beide Regionen per Oder-Operator.
Vergiß nicht über DeleteObject die zweite Region wieder frei zu geben.


SvenAbeln - Mi 04.09.02 12:15

genau dies wollte ich auch vorschlagen,
GPF ist mir nur zuvorgekommen :(


Ich habe aber auch noch eine Verbesserung :D

Das Array P wird hierfür nicht benötigt und du kannst es
hier wieder raus löschen.


babeuf - Mi 04.09.02 16:05
Titel: Danke
Vielen Dank , für die Antwort, es hat funktioniert. :)

Das Array wurde auch tatsächlich nicht benötigt.

babeuf