begin process at 2010 02 10 08:01:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > FORM TOP MOST (CHANGE LORS DU RUNTIME)

FORM TOP MOST (CHANGE LORS DU RUNTIME)


 Information sur la source

Note :
Aucune note
Catégorie :API Classé sous :mostontop, topmost, bar, taskbar Niveau :Initié Date de création :24/05/2007 Date de mise à jour :25/05/2007 09:26:54 Vu / téléchargé :3 645 / 238

Auteur : Loda

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Form avec un "system menu" supplémentaire: "Most On Top".

Lorsque actif: la forme a un bouton dans la bar des tâches (taskbar) et reste au dessus des autres applications.

Lorsque inactif: retourne dans son état précédent: pas de bouton dans la bar des tâches et ancien form style.

Source

  • unit odaMostOnTopForm;
  • // author : Loda
  • // date : 20070524
  • // Descr : Form with a system menu item "most on top". can change at runtime.
  • interface
  • uses
  • Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  • Dialogs, StdCtrls;
  • type
  • TfrmMostOnTop = class(TForm)
  • private
  • fMostOnTop : Boolean;
  • fOldParent : TWinControl;
  • fOldFormStyle : TFormStyle;
  • FmiMostOnTopCaption: string;
  • procedure SetMostOnTop(const Value: Boolean);
  • procedure SetmiMostOnTopCaption(const Value: string);
  • procedure CreateMostOnTopSysMenu;
  • procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
  • protected
  • procedure CreateParams(var Params: TCreateParams); override;
  • public
  • // Operation System Most on Top (with task bar button)
  • // side effect : change (and restore) form style
  • property MostOnTop : Boolean read fMostOnTop write SetMostOnTop;
  • // caption of system menu item. (check when MostOnTop = true)
  • property miMostOnTopCaption : string read FmiMostOnTopCaption write SetmiMostOnTopCaption;
  • constructor CreateMostOnTop(AOwner: TComponent; aMostOnTop : Boolean = true);
  • constructor Create(AOwner: TComponent);override;
  • end;
  • const
  • SC_invMostOnTop = WM_USER + 5;
  • // example of use:
  • // (create a form and display it.)
  • var
  • frmMostOnTop : TfrmMostOnTop;
  • implementation
  • {$R *.dfm}
  • { TfrmMostOnTop }
  • constructor TfrmMostOnTop.CreateMostOnTop(AOwner: TComponent ; aMostOnTop : Boolean);
  • begin
  • fMostOnTop := aMostOnTop; // will be apply in CreateParam
  • Create(AOwner);
  • end;
  • constructor TfrmMostOnTop.Create(AOwner: TComponent);
  • begin
  • inherited Create(AOwner);
  • fOldFormStyle := FormStyle;
  • FmiMostOnTopCaption := 'Most on Top';
  • CreateMostOnTopSysMenu;
  • end;
  • procedure TfrmMostOnTop.CreateParams(var Params: TCreateParams);
  • begin
  • inherited;
  • {DOC:
  • for a OS Most on Top form:
  • Form style MUST be fsStayOnTop
  • ParentWindows MUST be Desktop
  • ExStyle MUST be TOPMost}
  • if fMostOnTop then begin
  • Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW or WS_EX_TOPMOST;
  • Params.WndParent := GetDesktopWindow;
  • end;
  • end;
  • procedure TfrmMostOnTop.WMSysCommand(var Msg: TWMSysCommand);
  • begin
  • if Msg.CmdType = SC_invMostOnTop then begin
  • MostOnTop := not fMostOnTop;
  • end else
  • inherited;
  • end;
  • procedure TfrmMostOnTop.CreateMostOnTopSysMenu;
  • var
  • SysMenu : HMenu;
  • begin
  • // reset it (prevent multiple add (when change caption))
  • SysMenu := GetSystemMenu(Handle, true) ;
  • // Get system menu
  • SysMenu := GetSystemMenu(Handle, false) ;
  • {add our menu}
  • if fMostOnTop then
  • InsertMenu(SysMenu,SC_CLOSE,MF_STRING or MF_Checked or MF_BYCOMMAND,SC_invMostOnTop,pchar(FmiMostOnTopCaption))
  • else
  • InsertMenu(SysMenu,SC_CLOSE,MF_STRING or MF_BYCOMMAND,SC_invMostOnTop,pchar(FmiMostOnTopCaption));
  • {Add a seperator bar}
  • InsertMenu(SysMenu,SC_CLOSE,MF_SEPARATOR or MF_BYCOMMAND,0,'');
  • // see SetMenuItemBitmaps to change check mark
  • end;
  • procedure TfrmMostOnTop.SetMostOnTop(const Value: Boolean);
  • begin
  • if value = fMostOnTop then exit;
  • fMostOnTop := Value;
  • if value then begin
  • fOldParent := Parent;
  • Parent := nil;
  • fOldFormStyle := FormStyle;
  • FormStyle := fsStayOnTop;
  • end else begin
  • Parent := fOldParent;
  • formStyle := fOldFormStyle;
  • end;
  • DestroyHandle;
  • HandleNeeded; // Apply the Most On Top (call CreateParam)
  • UpdateControlState; //refresh the form
  • // recreate the system menu, cause destryhandle&friends reset it.
  • CreateMostOnTopSysMenu;
  • end;
  • procedure TfrmMostOnTop.SetmiMostOnTopCaption(const Value: string);
  • begin
  • if value = FmiMostOnTopCaption then exit;
  • FmiMostOnTopCaption := Value;
  • CreateMostOnTopSysMenu;
  • end;
  • end.
unit odaMostOnTopForm;

// author : Loda
// date   : 20070524
// Descr  : Form with a system menu item "most on top". can change at runtime.

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TfrmMostOnTop = class(TForm)
  private
    fMostOnTop : Boolean;
    fOldParent : TWinControl;
    fOldFormStyle : TFormStyle;
    FmiMostOnTopCaption: string;
    procedure SetMostOnTop(const Value: Boolean);
    procedure SetmiMostOnTopCaption(const Value: string);
    procedure CreateMostOnTopSysMenu;

    procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;

  protected
    procedure CreateParams(var Params: TCreateParams); override;

  public
    // Operation System Most on Top (with task bar button)
    // side effect : change (and restore) form style
    property MostOnTop : Boolean read fMostOnTop write SetMostOnTop;
    // caption of system menu item. (check when MostOnTop = true)
    property miMostOnTopCaption : string read FmiMostOnTopCaption write SetmiMostOnTopCaption;

    constructor CreateMostOnTop(AOwner: TComponent; aMostOnTop : Boolean = true);
    constructor Create(AOwner: TComponent);override;
  end;


const
  SC_invMostOnTop = WM_USER + 5;

 // example of use:
 // (create a form and display it.)
 var
   frmMostOnTop : TfrmMostOnTop;

implementation

{$R *.dfm}

{ TfrmMostOnTop }

constructor TfrmMostOnTop.CreateMostOnTop(AOwner: TComponent ; aMostOnTop : Boolean);
begin
  fMostOnTop := aMostOnTop; // will be apply in CreateParam
  Create(AOwner);
end;

constructor TfrmMostOnTop.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  fOldFormStyle := FormStyle;
  FmiMostOnTopCaption := 'Most on Top';
  CreateMostOnTopSysMenu;
end;

procedure TfrmMostOnTop.CreateParams(var Params: TCreateParams);
begin
  inherited;
{DOC:
for a OS Most on Top form:
Form style MUST be fsStayOnTop
ParentWindows MUST be Desktop
ExStyle MUST be TOPMost}
  if fMostOnTop then begin
    Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW or WS_EX_TOPMOST;
    Params.WndParent := GetDesktopWindow;
  end;
end;

procedure TfrmMostOnTop.WMSysCommand(var Msg: TWMSysCommand);
begin
 if Msg.CmdType = SC_invMostOnTop then begin
   MostOnTop := not fMostOnTop;
 end else
   inherited;
end;
procedure TfrmMostOnTop.CreateMostOnTopSysMenu;
var
  SysMenu : HMenu;
begin

  // reset it (prevent multiple add (when change caption))
  SysMenu := GetSystemMenu(Handle, true) ;
  // Get system menu
  SysMenu := GetSystemMenu(Handle, false) ;

  {add our menu}
  if fMostOnTop then
    InsertMenu(SysMenu,SC_CLOSE,MF_STRING or MF_Checked or MF_BYCOMMAND,SC_invMostOnTop,pchar(FmiMostOnTopCaption))
  else
    InsertMenu(SysMenu,SC_CLOSE,MF_STRING or MF_BYCOMMAND,SC_invMostOnTop,pchar(FmiMostOnTopCaption));

  {Add a seperator bar}
  InsertMenu(SysMenu,SC_CLOSE,MF_SEPARATOR or MF_BYCOMMAND,0,'');

  // see SetMenuItemBitmaps to change check mark
end;

procedure TfrmMostOnTop.SetMostOnTop(const Value: Boolean);
begin
  if value = fMostOnTop then exit;

  fMostOnTop := Value;

  if value then begin

    fOldParent := Parent;
    Parent := nil;

    fOldFormStyle := FormStyle;
    FormStyle := fsStayOnTop;

  end else begin

    Parent := fOldParent;

    formStyle := fOldFormStyle;

  end;

  DestroyHandle;
  HandleNeeded; // Apply the Most On Top  (call CreateParam)

  UpdateControlState; //refresh the form

  // recreate the system menu, cause destryhandle&friends reset it.
  CreateMostOnTopSysMenu;

end;

procedure TfrmMostOnTop.SetmiMostOnTopCaption(const Value: string);
begin
  if value = FmiMostOnTopCaption then exit;
  FmiMostOnTopCaption := Value;
  CreateMostOnTopSysMenu;
end;

end.

 Conclusion

j'ai crée cette source parceque je n'arrivais pas à changer, lors du RunTime, le WS_EX_TOPMOST sans avoir des effets secondaires.

le système utiliser pour la caption peut (devrait) être changé pour qqch de meilleur (une const ? ). à voir selon vos besoins.

notez que le "vrai" nom de ce genre de système est "top-most". (merci F0xi pour la précision). Je laisse MostOnTop plus par (mauvaises) habitude qu'autre choses.

Pour un exemple: crée une instance de la form et afficher là. Regardez dans le menu de la fenêtre (system menu).

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

25 mai 2007 09:26:54 :
ajoute le zip. ajoute la var.

 Sources du même auteur

Source avec Zip Source avec une capture [DEMO] TMEMO BEVEL / BORDER
Source avec Zip Source avec une capture [DEMO] TCHART : TRACER UNE COURBE AVEC PLUSIEURS FONCTIONS
Source avec Zip LIRE / ÉCRIRE UN XML DEPUIS UNE UNITÉ

 Sources de la même categorie

Source avec Zip NEXTGENS -> UNITÉS DE TYPES ÉVOLUÉS NOUVELLE GÉNÉRATION (DE... par f0xi
Source avec Zip Source avec une capture AUTO-COMPLÉTION D'UN CONTRÔLE DE SAISIE par Bacterius
Source avec Zip CARDS GAME SDK 1.0.0.0 par f0xi
Source avec Zip Source avec une capture TRAYICON - VOTRE ICONE DANS LA BARRE DES TACHES par Bacterius
Source avec Zip Source avec une capture WINHIDER _ CACHER UN PROGRAMME DE L'ÉCRAN ET DE LA BARRE DE ... par soldier8514

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture PROGRESSBAR AVEC VSPEED par game50

Commentaires et avis

Commentaire de japee le 24/05/2007 16:12:41 administrateur CS

Salut,

Ça a l'air bigrement intéressant. Mais...

Loda, s'il te plait, pour les gens pressés et/ou paresseux, tu pourrais pas nous coller tout ça dans un zip ?
(avec une petite mise en situation, mais là, je sens que j'abuse...)

Commentaire de f0xi le 25/05/2007 04:32:09 administrateur CS

attention a la traduction :

most on top =/= Topmost

TopMost = le plus au-dessus

most on top = (ne veux pas dire grand chose en fait)

Commentaire de Loda le 25/05/2007 09:14:20

@japee:

ouai, pas de blem. (en fait j'avais PAS mis de zip car c'est petit et un copier coller me semblais plus simple. mais pourquoi pas les deux!)

@Foxi:
c'est juste. j'avais jamais fait gaffe.

comme d'ab, des commentaires intéressants. :)

correction dans 5min ....

A+


Commentaire de f0xi le 27/05/2007 03:24:29 administrateur CS

^^ , try again : Topmost en un seul mot ... corrige aussi dans le code ;)

je chipotte hein ...

et quand tu as un code court qui mets en oeuvre un simple tout petit bout de code, fait plutot un snip sur codyx :)

Commentaire de Loda le 28/05/2007 09:11:09

@F0xi: j'avais pensé au snip, mais, ça me semblais juste assez grand pour poser une source. La prochaine fois je ferrais un snip ;-)

bon la prochaine fois, je me rappelais:
- le zip de toute façon.
- plutôt un snip qu'une source en cas de doute.

A+

Commentaire de intik le 12/09/2007 00:53:35

Pour les débutant un peut comme moi... pour mettre une fenetre pour chaque form dans la "barre des taches"

Voila le code a rajouter dans chaque form...

___________________________

  private
    { Déclarations privées }

  protected
    procedure CreateParams(var Params: TCreateParams); override;

  public
    { Déclarations publiques }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
  Params.WndParent := GetDesktopWindow;
end;
______________________________

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Icone dans un TStatus bar ! [ par MAsterC ] Je ne comprend pas !!!!Et sa ne marche pas !!tu peux tu me faire un exemple s'te plaît !merciMAsterC progress bar [ par snakefinger ] salut comment faire pour k1 progress bar suit un scan de fichiers.merci d'avance et.A+. CS-Bar [ par koko ] Bon d'abord je ne sais pas ou je dois mettre ceci...alors, je n'arrive pas à installé la CS-Bar... il me dit que certain de mes fichiers sont perimés tps restant ds une progress bar [ par lnicos ] ba voilà le titre est clair ;-p, yep je cherche un truc afin de prévenir les utilisateurs du temps restants dans la copie de fichier. Pour le moment j Smtp + Progress Bar + Bytes Total + Bytes Sent. [ par DeZNiUS ] J'ai un problème : quand j'envoi des gros fichiers avec mon programme que je fait avec le composant NMSMTP, mon programme affiche dans la status bar ' progressBar + TWebBrowser [ par Fredelphi ] Bonjour,Est-il possible de faire un progress bar avec un TWebBrowser ?En fait, je charge une page avec get(url), mais parfois c'est assez long...donc Images dans une gauge ou progress bar [ par magicvinni ] Bonjour, Je cherche à mettre une image sur une gauge ou une progress bar (je ne vois pas trop la différence entre les 2). Je suis allé voir chez to IE Bar et CS ... [ par zehunter ] quelqu'un c'est-il en quel langage la CS IEBAR 2.1 a ete code? et si il existe un semblant de source ou de doc du comment fait ton pareil?ca serais co Comment colorée cette bar du menu [ par skiso ] Comment colorée cette bar du menu (s'elle qui support le menu) avec XPmenugéneralement : en xp elle en blank en 2000, 98 elle en agir sur la scroll bar d'un webbrowser [ par popiggy ] Bonjour,Je voudrais savoir comment on fait pour controler la navigation (haut-bas) sur un webbrowser, car par défaut il place un ascenseur à droite ma


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales