Autor Beitrag
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 10.10.06 17:32 
Hallo Leute!

Ich habe immer wieder versucht, in Programmen den ?-Button in der Titelleiste zu benutzen, aber mit wenig zufriedenstellendem Ergebnis, vor allem, weil das Programm nicht "weiss", das der Cursor jetzt crHelp ist. Nun habe ich das hier gefunden; das ist es, was ich brauche:
www.delphi-forum.de/...button+++titelleiste
Ich habe das nun so gemacht:
ausblenden Delphi-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:
procedure TForm1.WMSYSCOMMAND(var Msg: TMessage);
begin
  { WM_SYSCOMMAND abfangen }
  if Msg.Msg = WM_SYSCOMMAND then
  begin
    { wParam prüfen }
    case Msg.wParam of
      { war da doch jemand neugierig :) }
      SC_CONTEXTHELP:
      begin
       Screen.Cursor := crHelp;
      end;
    else
      { alle anderen Fälle weiterreichen an die standard Fensterprozedur }
      Inherited;
    end;
  end;
end;

procedure TForm1.FormClick(Sender: TObject);
begin
 if Screen.Cursor = crHelp then
 begin
  Screen.Cursor := crDefault;
  //.. tu sonstwas
 end;
end;

Klappt auch, aber wie bekomme ich den ?-Button wieder in den nicht-gedrückten Zustand zurück? Ansonsten ist der Code genau das, was ich brauche!

//Edit: Der Trick ist, die Titelleiste (oder den Rahmen) neu zeichnen zu lassen. Das geht zB., wenn man ein weiteres Formular öffnet. Soweit ok, denn dieses Formular könnte ja den Hilfetext enthalten. Aber wenn ich nun möchte, dass man beim Drücken der Esc-Taste abbricht (Screen.Cursor := crDefault), wie bringe ich es hin, dass der ?-Button im nicht-gedrückten Zustand dargestellt wird?

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
galagher Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2562
Erhaltene Danke: 46

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Di 07.11.06 19:57 
Hallo!
Habe eine Lösung gefunden:
ausblenden volle Höhe Delphi-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:
{Dieser Code stammt von Luckie vom Delphi-Forum; SC_CLOSE wurde auskommentiert}
{Siehe unter: www.delphi-forum.de/...button+++titelleiste}
type
{...}
  private
    { Private-Deklarationen }
    procedure SYSCOMMAND(var Msg: TMessage); Message WM_SYSCOMMAND;
{...}

var
  IsbiHelp: Boolean;
procedure TForm1.SYSCOMMAND(var Msg: TMessage);
begin
  IsbiHelp := False;

  {WM_SYSCOMMAND abfangen}
  if Msg.Msg = WM_SYSCOMMAND then
  begin
    {wParam prüfen}
    case Msg.wParam of
      SC_CONTEXTHELP:
      begin
       IsbiHelp := True;
       DefWindowProc(Handle, WM_SYSCOMMAND, SC_CONTEXTHELP, 0);
      end;
//    SC_CLOSE: Close;
    else
      {Alle anderen Fälle weiterreichen an die Standard-Fensterprozedur}
      Inherited;
    end;
  end;
end;

{Dann kann man den ?-Button nutzen ...}
procedure TForm1.Panel1Click(Sender: TObject);
begin
 if IsbiHelp then
 begin
  IsbiHelp := False;
  Panel1.Caption := 'Das ist der Hilfetext!';
 end;
end;

{... oder ungenutzt deaktivieren}
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 if IsbiHelp then if Key = VK_ESCAPE then IsbiHelp := False;
end;

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!