Autor Beitrag
Cash
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Mo 17.03.03 19:23 
Hi@all

Ich möchte gern meiner Form eine bestimmte Caption geben, "Titel"
Dieser Titel soll genau in der Mitte der Formleiste angezeigt werden und nicht links. Kennt einer den dafür benötigten Code?

thx4all

_________________
Ein Sieger gewinnt etwas, ein 'Geschlagener' lernt eine Menge dazu :)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 17.03.03 19:31 
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure WMACTIVATE(var Msg: TMessage); Message WM_ACTIVATE;
//    procedure WMNCHITTEST(var Msg: TWMNChittest); Message WM_NCHITTEST;
//    procedure WMNCLBUTTONDOWN(var Msg: TMessage); Message WM_NCLBUTTONDOWN;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

var
  bHit: Boolean;

//procedure TForm1.WMNCHITTEST(var Msg: TWMNChittest);
//var
//  x,y: SmallInt;
//  dc: HDC;
//  rect: TRect;
//begin
//  DefaultHandler(Msg);
//  x := Msg.XPos-Left;
//  y := Msg.YPos-Top;
//  GetWindowRect(Handle, rect);
//  if (x <= width) and (x >= width-21)
//    and (y >= 0) and
//    (y <= GetSystemmetrics(SM_CYEDGE)+14) then
//  begin
//    bHit := TRUE;
//  end
//  else
//    bHit := FALSE;
//end;
//
//procedure TForm1.WMNCLBUTTONDOWN(var Msg: TMessage);
//begin
//  if bHit = TRUE then Close
//  else
//    inherited;
//end;

procedure TForm1.WMACTIVATE(var Msg: TMessage);
var
  rgn: HRGN;
  rect, btnrect: TRect;
  dc: HDC;
  szBuffer: array[0..255] of Char;
  bmp: TBITMAP;
  brush : HBRUSH;
begin
  if Msg.Msg = WM_ACTIVATE then
  begin
    dc := GetWindowDC(Handle);
    rect.Left := GetSystemmetrics(SM_CXEDGE);
    rect.Top := GetSystemmetrics(SM_CYEDGE);
    rect.Right := Form1.Width-GetSystemmetrics(SM_CYEDGE);
    rect.Bottom := Getsystemmetrics(SM_CYCAPTION)+GetSystemmetrics(SM_CYFRAME);
    try
//      bmp := TBITMAP.Create;
//      bmp.loadfromfile('.\MyButton.bmp');
//      btnrect.Left := Width-21;
//      btnrect.Top := rect.Top+1;
//      brush := CreateSolidBrush(RGB(255,0,0));
//      SelectObject(dc, brush);
//      Rectangle(dc, rect.Left, rect.Top, rect.Right, rect.Bottom);
//      StretchBlt(dc, btnrect.Left, btnrect.Top+2, bmp.Width, bmp.Height,
//        bmp.Canvas.Handle, 0, 0, bmp.Width, bmp.Height, SRCCOPY);
      lstrcpy(szBuffer, 'Meine Fenstercaption');
      SetBkMode(dc, TRANSPARENT);
      SetTextColor(dc, RGB(255,255,255));
      DrawText(dc, szBuffer, lstrlen(szBuffer), rect, DT_CENTER or DT_VCENTER);
    finally
//      bmp.Free;
    end;
      ReleaseDC(Handle, dc);
  end
  else
    Inherited;
  ReleaseDc(Handle, dc);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  PostMessage(Handle, WM_ACTIVATE, 0, 0);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
  SendMessage(handle, WM_ACTIVATE, 0 , 0);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  SendMessage(handle, WM_ACTIVATE, 0 , 0);
end;

Das, was du nicht brauchst, habe ich auskommentiert.
Cash Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Mo 17.03.03 19:50 
[Error] Unit1.pas(65): Statement expected but 'PROCEDURE' found

das zeigt mir Delphi an wenn ich es laufen lassen möchte. Markiert wird die Zeile bzw. die Procedure...
ausblenden Quelltext
1:
procedure TFrmWillkommen.WMACTIVATE(var Msg: TMessage);					


Wieso?

Des WEiteren mekert er mir folgendes an (rot markiert):

ausblenden Quelltext
1:
2:
3:
4:
5:
procedure 
FrmWillkommen.FormCreate(Sender: TObject);
begin
  PostMessage([color=red]handle[/color], WM_ACTIVATE, 0, 0);
end;


Und folgende Fehlermeldung:

[Error] mWillkommen.pas(107): Undeclared identifier: 'handle'

Hoffe einer weiß was damit anzufangen :)

_________________
Ein Sieger gewinnt etwas, ein 'Geschlagener' lernt eine Menge dazu :)
Cash Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40



BeitragVerfasst: Di 18.03.03 16:45 
GEHT ES DENN NICHT EINFACHER? DAS IST DOCH VIEL ZU VIEL CODE........es muss doch einfacher gehen....

_________________
Ein Sieger gewinnt etwas, ein 'Geschlagener' lernt eine Menge dazu :)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 18.03.03 16:51 
Was ist daran viel Code:
ausblenden volle Höhe Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
type 
  TForm1 = class(TForm) 
    procedure FormCreate(Sender: TObject); 
    procedure FormPaint(Sender: TObject); 
    procedure FormResize(Sender: TObject); 
  private 
    { Private-Deklarationen } 
    procedure WMACTIVATE(var Msg: TMessage); Message WM_ACTIVATE; 
  public 
    { Public-Deklarationen } 
  end; 

var 
  Form1: TForm1; 

implementation 

{$R *.DFM} 

procedure TForm1.WMACTIVATE(var Msg: TMessage); 
var 
  rgn: HRGN; 
  rect, btnrect: TRect; 
  dc: HDC; 
  szBuffer: array[0..255] of Char; 
begin 
  if Msg.Msg = WM_ACTIVATE then 
  begin 
    dc := GetWindowDC(Handle); 
    rect.Left := GetSystemmetrics(SM_CXEDGE); 
    rect.Top := GetSystemmetrics(SM_CYEDGE); 
    rect.Right := Form1.Width-GetSystemmetrics(SM_CYEDGE); 
    rect.Bottom := Getsystemmetrics(SM_CYCAPTION)+GetSystemmetrics(SM_CYFRAME); 
    lstrcpy(szBuffer, 'Meine Fenstercaption'); 
    SetBkMode(dc, TRANSPARENT); 
    SetTextColor(dc, RGB(255,255,255)); 
    DrawText(dc, szBuffer, lstrlen(szBuffer), rect, DT_CENTER or DT_VCENTER); 
    ReleaseDC(Handle, dc); 
  end 
  else 
    Inherited; 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
begin 
  PostMessage(Handle, WM_ACTIVATE, 0, 0); 
end; 

procedure TForm1.FormPaint(Sender: TObject); 
begin 
  SendMessage(handle, WM_ACTIVATE, 0 , 0); 
end; 

procedure TForm1.FormResize(Sender: TObject); 
begin 
  SendMessage(handle, WM_ACTIVATE, 0 , 0); 
end;

Du mußt es eben selber zeichnen und das geht heben nur so. Wenn dir das zu viel Code ist, dann laß es bleiben. Extravaganz hat eben seinen Preis.