AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Kontextsensitive Hilfe / biHelp-Button trotz Minimize-Button?
Thema durchsuchen
Ansicht
Themen-Optionen

Kontextsensitive Hilfe / biHelp-Button trotz Minimize-Button?

Ein Thema von Delphi-Laie · begonnen am 20. Dez 2015 · letzter Beitrag vom 20. Dez 2015
Antwort Antwort
hathor
(Gast)

n/a Beiträge
 
#1

AW: Kontextsensitive Hilfe / biHelp-Button trotz Minimize-Button?

  Alt 20. Dez 2015, 12:47
Dann mach es so:

Delphi-Quellcode:
...
  protected
    procedure WMNCLButtonDown(var Message: TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
  end;
...
implementation

{$R *.dfm}

procedure TForm1.WMNCLButtonDown(var Message: TWMNCLButtonDown);
begin
  if (Message.HitTest = HTCAPTION) then self.WindowState:= wsMinimized;
  if (Message.HitTest = HTCLOSE) then Application.Terminate;
  if (Message.HitTest = HTHELP) then
  begin ShowMessage('hello world'); message.Result := 0; end
  else inherited;
end;
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#2

AW: Kontextsensitive Hilfe / biHelp-Button trotz Minimize-Button?

  Alt 20. Dez 2015, 12:54
Das ist zwar nicht das erhoffte gleichzeitige Funktionieren des biMinimize- und biHelp-Buttons, aber danke für Antwort! Zumindest sind damit alle 3 Funktionen in der Titelleiste enthalten.

Geändert von Delphi-Laie (20. Dez 2015 um 12:59 Uhr)
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#3

AW: Kontextsensitive Hilfe / biHelp-Button trotz Minimize-Button?

  Alt 20. Dez 2015, 14:25
Man könnte es umschaltbar machen:
Delphi-Quellcode:
  protected
    procedure WMNCLButtonDown(var Message: TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
  end;

var
  Form1: TForm1;
  switched : Boolean;

implementation

{$R *.dfm}

procedure TForm1.WMNCLButtonDown(var Message: TWMNCLButtonDown);
begin
  if (Message.HitTest = HTCAPTION) then
  BEGIN
  if switched=TRUE then
  begin
    BorderIcons := [biSystemMenu,biMinimize,biHelp];
    BorderIcons := BorderIcons - [biMinimize];
    switched:=FALSE;
  end else
  begin
    BorderIcons := [biSystemMenu,biMinimize,biHelp];
    BorderIcons := BorderIcons - [biHelp];
    switched:=TRUE;
  end;
  END;
  if (Message.HitTest = HTCLOSE) then Application.Terminate;
  if (Message.HitTest = HTHELP) then
  begin ShowMessage('hello world'); message.Result := 0; end
  else inherited;
end;
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#4

AW: Kontextsensitive Hilfe / biHelp-Button trotz Minimize-Button?

  Alt 20. Dez 2015, 14:48
Man könnte es umschaltbar machen:
Hast du nicht gelesen, was ich geschrieben habe, oder bist du einfach nur stur?
Erstens ist [biSystemMenu,biMinimize,biHelp] - [biMinimize] sinnlos, da kannst du gleich [biSystemMenu,biHelp] schreiben.
Zweitens lass das Application.Terminate da weg, wenn schon dann Close, aber beides ist unnötig!


if switched=TRUE then Das ist übrigens schlechter Stil, man sollte Boolsche Werte niemals per "=" auf True prüfen, sonst kann man sich schwer zu findende Bugs einfangen!
Hintergrund: "False" ist definiert als = 0, "True" ist logischerweise "not False", d.h. <> 0. Als Konstante ist "True" jedoch als 1 definiert (jedenfalls für den Standardtyp "Boolean", für die Typen ByteBool, WordBool, LongBool ist es -1, das ignorieren wir mal; der Compiler konvertiert normalerweise automatisch richtig zwischen diesen Typen).

Für Anweisungen wie if Switched then erzeugt der Delphi-Compiler Code, der auf <> 0 prüft (korrekt für alle Boolschen Typen und Werte).
Für Anweisungen wie if Switched = True then erzeugt der Delphi-Compiler für den "Boolean"-Typ Code, der auf = 1 prüft und das kann Probleme geben!
Kleiner Test:
Delphi-Quellcode:
procedure BooleanTest;
var
  B: Boolean;
begin
  Byte(B) := 2;
  // B ist <> 0, d.h. entspricht logisch "True"... wird aber NICHT bei "B = True" erkannt!
  // prüft B = 1: SCHLECHT!
  if B = True then ShowMessage('B = True');
  // prüft B = 0: OK, aber schlechter Stil
  if B = False then ShowMessage('B = False');
  // prüft B <> 0: korrekt!
  if B then ShowMessage('B *is* True!');
  // prüft B = 0: korrekt!
  if not B then ShowMessage('B *is NOT* True!');
end;
Zugegeben, das Schreiben eines anderen Wertes als 0 oder 1 in einen Boolean-Typ per Typecast hier ist etwas gekünstelt, aber wenn man Third-Party-Code benutzt, der nicht in Delphi geschrieben wurde, kann das durchaus mal vorkommen.

Geändert von SMO (20. Dez 2015 um 15:34 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz