Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   CommandLinks und AeroWizards (https://www.delphipraxis.net/116842-commandlinks-und-aerowizards.html)

delphi_user14 7. Jul 2008 17:36

Re: CommandLinks und AeroWizards
 
Ich möchte das Ganze ja für Vista.

delphi_user14 8. Jul 2008 13:18

Re: CommandLinks und AeroWizards
 
Es funktioniert noch immer nicht.

Ich habe versucht TurboMartins Quellcode in eine Komponente zu packen.

Doch wenn ich die Komp aufs Formular schmeißen will heißt es: TCommandLink hat keine übergeordnete Komponente. (oder so)

Obwohl TButton (von der die Komp ausgeht) doch Parent gesetzt hat.

Hier der Code:

Delphi-Quellcode:
unit CommandLink;

interface

uses
  SysUtils, Classes, Controls, StdCtrls;

type
  TCommandLink = class(TButton)
  private
    { Private-Deklarationen }
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
  end;

procedure Register;

const
  BS_COMMANDLINK = $0000000E;

implementation

procedure TCommandLink.CreateParams(var Params: TCreateParams);
begin
  Params.Style := Params.Style or BS_COMMANDLINK;
end;

procedure Register;
begin
  RegisterComponents('Own', [TCommandLink]);
end;

end.
Das mit
Delphi-Quellcode:
SendMessage(Handle, BCM_SETNOTE, 0, strNote);
funktioniert ja nicht. (wParam ist nicht String)

TurboMartin 8. Jul 2008 17:12

Re: CommandLinks und AeroWizards
 
Hallo,
ich bin jetzt so weit, dass er auf dem Designer richtig gezeichnet wir. Ich werde mal weiterschauen und dir bescheidgeben und hier veröffentlichen.

Christian Seehase 8. Jul 2008 17:18

Re: CommandLinks und AeroWizards
 
Moin Delphi User,

Zitat:

Zitat von delphi_user14
Das mit
Delphi-Quellcode:
SendMessage(Handle, BCM_SETNOTE, 0, strNote);
funktioniert ja nicht. (wParam ist nicht String)

Nein, aber strNote ist ein Pointer auf einen String.
Da kann man sich mit einem Cast behelfen:

Delphi-Quellcode:
SendMessage(Handle,BCM_SETNOTE,0,lParam(PChar(strNote)));

TurboMartin 8. Jul 2008 18:36

Re: CommandLinks und AeroWizards
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich wollte jetzt mal ein kleines Beispiel zeigen. Einzigstes Problem ist zur Zeit noch, dass die Notiz nicht richtig angezeigt wir. Das werde ich aber auch noch hinbekommen.

delphi_user14 9. Jul 2008 15:10

Re: CommandLinks und AeroWizards
 
Hallo, TurboMartin!

Wie hast du es hinbekommen den Commandlink auf dem Designer zu zeigen?

TurboMartin 9. Jul 2008 15:30

Re: CommandLinks und AeroWizards
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich hab es jetzt fertig. Als Ziel habe ich mir mal gesetzt, auch die anderen Komponenten von der Seite für Delphi zu basteln.
Einzigstes, was hier nicht implementiert ist, sind die Windows-Standard-Icons(Info,Warnung,Error) anzeigen zu lassen, werde ich aber in der Ferigen Sammlung drinnen haben.
Delphi-Quellcode:
unit CommandLink;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Windows, Graphics, Messages;

type
  TCommandLink = class(TButton)
  private
    fNote: WideString;
    fShield: Boolean;
    fIcon: TIcon;
    procedure SetNote(Value: WideString);
    procedure SetShield(Value: Boolean);
    procedure SetIcon(Value: TIcon);
    procedure UpdateIcon(Sender: TObject);
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property Note: WideString read fNote write SetNote;
    property Shield: Boolean read fShield write SetShield default false;
    property Icon: TIcon read fIcon write SetIcon;
  end;

procedure Register;

const
  BS_COMMANDLINK = $0000000E;
  BCM_SETNOTE = $00001609;
  BCM_FIRST = $1600;
  BCM_SETSHIELD = BCM_FIRST + $000C;
  BM_SETIMAGE = $00F7;

implementation

constructor TCommandLink.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  fIcon := TIcon.Create;
  fIcon.OnChange := UpdateIcon;
end;

procedure TCommandLink.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style := Params.Style or BS_COMMANDLINK;
end;

procedure TCommandLink.SetNote(Value: WideString);
begin
  SendMessage(Handle, BCM_SETNOTE, 0, lParam(Pointer(Value)));
  fNote := Value;
end;

procedure TCommandLink.SetShield(Value: Boolean);
begin
  SendMessage(Handle, BCM_SETSHIELD, 0, lParam(Value));
  fShield := Value;
end;

procedure TCommandLink.SetIcon(Value: TIcon);
begin
  SendMessage(Handle, BM_SETIMAGE, 1, lParam(fIcon.Handle));
  fIcon.Assign(Value);
end;

procedure TCommandLink.UpdateIcon(Sender: TObject);
begin
  SendMessage(Handle, BM_SETIMAGE, 1, lParam(fIcon.Handle));
end;

procedure Register;
begin
  RegisterComponents('Vista', [TCommandLink]);
end;

end.
[edit]Kleine Demo noch angehangen[/edit]

delphi_user14 9. Jul 2008 15:33

Re: CommandLinks und AeroWizards
 
Danke, du bist mein Lebensretter!! :lol:

TurboMartin 9. Jul 2008 15:42

Re: CommandLinks und AeroWizards
 
Ggf. sollte ich was zur Funktion dazusagen:
Neu zum Vorgänger TButton sind die Eigenschaften Note, Shield und Icon.
  • Caption: Hier gibt man ganz normal den Titel ein, den der CommandLink haben soll
  • Note: Hier kann man eine kleine Notiz eingeben. Diese wird von Vista automatisch umgebrochen
  • Shield: Diese Eigenschaft ist dazu da, das Schildicon anzuzeigen. Dieses ersetzt das eigene Icon. Beim Ausschalten wird auf den normalen grünen Pfeil zurückgesetzt.
  • Icon: Hier kann man ein eigenes Icon auswählen welches geladen werden soll. Dieses kann in jeder beliebigen größe sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 Uhr.
Seite 2 von 2     12   

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