Delphi-PRAXiS

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 15:48


CommandLinks und AeroWizards
 
Hallo!

Ich weiß, dass ich heute schon ein ähnliches Thema gepostet habe, aber ich fürchte, dass ich es falsch angegangen bin.

Also:

Ich möchte AeroWizards und CommandLinks erstellen.

Ich bräuchte die Definitionen von BS_COMMANDLINK und von PSH_AEROWIZARD. Ich habe gegooglet und habe PSH_AEROWIZARD = $00004000 gefunden. Stimmt das?

Ich habe auch keine Ahnung mit welcher Procedure ich das realisieren soll.

Danke im Vorraus!

TurboMartin 7. Jul 2008 16:27

Re: CommandLinks und AeroWizards
 
BS_COMMANDLINK ist 0x0000000E
BCM_SETNOTE ist 0x00001609
PSH_AEROWIZARD ist wie du gesagt hast.

delphi_user14 7. Jul 2008 16:29

Re: CommandLinks und AeroWizards
 
Mit welcher Procedure soll ich den Style ändern?

TurboMartin 7. Jul 2008 16:31

Re: CommandLinks und AeroWizards
 
Scau mal hier.

delphi_user14 7. Jul 2008 16:34

Re: CommandLinks und AeroWizards
 
Wie geht das unter Delphi?

Ich kann Programmiersprachen nicht gut übersetzen :oops:

DGL-luke 7. Jul 2008 16:44

Re: CommandLinks und AeroWizards
 
Schau dir doch mal Daniels Videos an: http://www.delphipraxis.net/videos

Da sollte auch was zu den Vista-Sachen dabeisein.

DP-Maintenance 7. Jul 2008 16:49

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Windows 9x / ME / 2000 / XP / 2003 / Vista" nach "Sonstige Fragen zu Delphi" verschoben.

TurboMartin 7. Jul 2008 17:16

Re: CommandLinks und AeroWizards
 
Probier mal folgendes:
Delphi-Quellcode:
const
  BS_COMMANDLINK = 0x0000000E;
  BCM_SETNOTE = 0x00001609

TCommandLink = class (TButton)
public
  procedure SetNote(strNote: String);
protected
  procedure CreateParams(var Params: TCreateParams); override;
end;

procedure TCommandLink.SetNote(Note: String);
begin
  SendMessage(Handle, BCM_SETNOTE, 0, strNote);
end;

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

delphi_user14 7. Jul 2008 17:31

Re: CommandLinks und AeroWizards
 
Es gibt nur ein Problem.

SendMessage ist so aufgebaut:

{
hWnd
Cardinal

Msg
Cardinal

lParam
Integer

wParam
Integer --Hier sollte ich einen String eingeben :shock:
}

Daniel 7. Jul 2008 17:34

Re: CommandLinks und AeroWizards
 
Nur der Vollständigkeit halber: Wenn Du Dich für den Weg mit den Messages entscheidest, dann klappt das nur unter Vista.

Wenn Du diese Controls auch in früheren Windows-Versionen verfügbar haben möchtest, dann brauchst Du welche, die sich selbst zeichnen und somit die Controls von Vista imitieren. Ich bin gerade ein wenig überrascht, dass es da bei Torry scheinbar noch keine Flut an CommandLink-Buttons gibt.

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 03:32 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