Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Button.Down auch für normale TButtons? (https://www.delphipraxis.net/79468-button-down-auch-fuer-normale-tbuttons.html)

Schaedel 23. Okt 2006 10:41


Button.Down auch für normale TButtons?
 
Hallo!

Ich hab in der Schule(lang ist es her) mal einen Button so erzogen das er nach dem Klick unten geblieben ist.(Quasi Button.down).
Ich würde einen Speedbutton nehmen aber ich benötige Tabstops und den hat der Speedbutton nicht.

Jemand eine Idee?
Ich benutze Delphi5 Enterprise

Die Suche hab ich bereits bemüht aber nicht wirklich was gefunden.

Danke !

uligerhardt 23. Okt 2006 12:07

Re: Button.Down auch für normale TButtons?
 
Du kannst eine Checkbox nehmen und sie wie einen normalen Button aussehen lassen.
  • Quick and dirty:
    Delphi-Quellcode:
    procedure TForm2.FormCreate(Sender: TObject);
    var
      style: DWORD;
    begin
      style := GetWindowLong(CheckBox2.Handle, GWL_STYLE);
      SetWindowLong(CheckBox2.Handle, GWL_STYLE, style or BS_PUSHLIKE);
    end;
  • Etwas sauberer: Leite eine Komponente von TCheckbox ab und jubele ihr das BS_PUSHLIKE im CreateParams unter.
HTH, Uli.

Bernhard Geyer 23. Okt 2006 12:12

Re: Button.Down auch für normale TButtons?
 
Oder such dir eine Komponentensammlung die entsprechende Button-Komponenten bereitstellt (wie z.B. das ElPack)

Tyrael Y. 23. Okt 2006 12:20

Re: Button.Down auch für normale TButtons?
 
Moin,

da hast du eine "Komponente" :D
...ich habe die mal vor paar Monaten eher spasseshalber gemacht
...ist von TPanel abgeleitet


Delphi-Quellcode:
unit CustomPanelButton;

interface

uses
  SysUtils, Classes, Controls, ExtCtrls, Messages, ActnList;

type TButtonType =(btNone, btButton, btRadio);

type
  TCustomPanelButton = class(TPanel)
  private
    { Private declarations }
    FClicked: Boolean;
    FButtonType: TButtonType;

    procedure SetClicked(const Value: Boolean);
    procedure SetButtonType(const Value: TButtonType);
  protected
    { Protected declarations }
    procedure Click(); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy(); override;
  published
    { Published declarations }
    property Clicked: Boolean read FClicked write SetClicked;
    property ButtonType: TButtonType read FButtonType write SetButtonType;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Standard', [TCustomPanelButton]);
end;

{ TCustomPanelButton }

constructor TCustomPanelButton.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FButtonType := btNone;
  FClicked := False;

  self.Width := 75;
  self.Height := 25;
  self.Caption := 'Button';
end;

destructor TCustomPanelButton.Destroy;
begin
  inherited;
end;

procedure TCustomPanelButton.Click;
begin
  if FButtonType = btRadio then
  begin
    FClicked := BevelOuter = bvLowered;
    if FClicked then
      BevelOuter := bvRaised
    else
      BevelOuter := bvLowered;
  end;
end;

procedure TCustomPanelButton.MouseDown(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  if FButtonType = btButton then
    BevelOuter := bvLowered;
end;

procedure TCustomPanelButton.MouseUp(Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  inherited;
  if FButtonType = btButton then
    BevelOuter := bvRaised;
end;

procedure TCustomPanelButton.SetButtonType(const Value: TButtonType);
begin
  FButtonType := Value;
  if FButtonType = btButton then
    BevelOuter := bvRaised;
end;

procedure TCustomPanelButton.SetClicked(const Value: Boolean);
begin
  FClicked := Value;
  if FClicked and (FButtonType = btRadio) then
    BevelOuter := bvLowered
  else
    BevelOuter := bvRaised;
end;



end.

Schaedel 23. Okt 2006 12:34

Re: Button.Down auch für normale TButtons?
 
Erstmal danke für die Antworten...
aber das ist alles mehr oder weniger von hinten durch die Brust ins Auge ;)

Ich versuchs mal mit den Handeln anders hinzubekommen ...

Luckie 23. Okt 2006 12:37

Re: Button.Down auch für normale TButtons?
 
Nein, ist es nicht. Unter Windows sind Schaltflächen, Checkboxen und Optionsfelder alles Schaltflächen - nur mit unterschiedlichen Stilen.

sakura 23. Okt 2006 12:37

Re: Button.Down auch für normale TButtons?
 
Zitat:

Zitat von Schaedel
Erstmal danke für die Antworten...
aber das ist alles mehr oder weniger von hinten durch die Brust ins Auge ;)

Nun ja, für die Checkbox ist es eine Standardfunktionalität der WinAPI, welche lediglich nie von der VCL direkt angeboten wurde.

...:cat:...

Schaedel 23. Okt 2006 12:42

Re: Button.Down auch für normale TButtons?
 
ok ok .. Schande über mein Haupt ;)

Und nochmals Danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:29 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz