Précédent   Forum des professionnels en informatique > Environnements de développement > Delphi > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, FAQ, sources et autres ressources pour la rubrique Delphi.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/11/2008, 18h27   #21
Rédacteur
 
Avatar de Pedro
 
Inscription : octobre 2003
Messages : 5 397
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 5 397
Points : 4 750
Points : 4 750
Citation:
Envoyé par HumanTool Voir le message
Bonjour,
il semblerait que j'eusse oublié une partie du code pour la faq pourriez la mettre à jour :
Euh... C'est à dire que l'on a plus de 800 QR dans cette FAQ donc ça serait sympa si tu nous disais où est ce que tu veux remplacer
__________________
Pedro
Aucune réponse aux sollicitations techniques par MP

Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

Les pages Source C'est bon. Mangez-en!
Le défi Delphi
Règles du forum - FAQ Delphi - Pensez au chtit

Le site de mon frangin
Pedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2008, 18h39   #22
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 758
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 758
Points : 6 779
Points : 6 779
Serait-ce ceci ? Comment coller sous OpenOffice ?
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/11/2008, 12h55   #23
Membre confirmé
 
Avatar de HumanTool
 
Homme Guillaume ROQUES
Chef de projet NTIC
Inscription : janvier 2006
Messages : 267
Détails du profil
Informations personnelles :
Nom : Homme Guillaume ROQUES
Âge : 33
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2006
Messages : 267
Points : 273
Points : 273
Oups
désolé j'avais édité mon message pour le spécifier mais ça n'a pas pris ....mauvaise excuse je sais mais bon c'est vrai !!

Cl@udius : Oui c'est ça

Encore désolé et merci
__________________
D'abord ils vous ignorent, ensuite ils se moquent de vous, puis ils vous combattent, enfin vous gagnez (Gandhi)
HumanTool est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2008, 18h35   #24
Membre Expert
 
Avatar de anapurna
 
Développeur informatique
Inscription : mai 2002
Messages : 1 581
Détails du profil
Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2002
Messages : 1 581
Points : 1 823
Points : 1 823
Par défaut [QR]Comment ajouter un boutton dans un TStringGrid ?

[QR]Comment ajouter un bouton dans un TStringGrid ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
 
//dans le formcreate 
  MaStringGrid.DoubleBuffered := True;
  MaStringGrid.ControlStyle := StringGrid2.ControlStyle + [csClickEvents];
 
...
 
// dans le ondrawcell du stringGrid
// la condition peut etre un numero de colonne ou de ligne 
   if  maCondition Then
     if (csClicked in (sender as TstringGrid).ControlState) Then
       DrawFrameControl((sender as TstringGrid).Canvas.Handle, Rect,DFC_BUTTON, DFCS_BUTTONPUSH or DFCS_PUSHED )
     else
       DrawFrameControl((sender as TstringGrid).Canvas.Handle, Rect, FC_BUTTON, DFCS_BUTTONPUSH )
voila vous avez un jolie bouton dans les cellules

@+ Phil
__________________
Citation:
Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
Blaise Pascal
PS : n'oubliez pas le tag
anapurna est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2008, 19h47   #25
Rédacteur
 
Avatar de Pedro
 
Inscription : octobre 2003
Messages : 5 397
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 5 397
Points : 4 750
Points : 4 750

Merci pour ta participation
__________________
Pedro
Aucune réponse aux sollicitations techniques par MP

Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

Les pages Source C'est bon. Mangez-en!
Le défi Delphi
Règles du forum - FAQ Delphi - Pensez au chtit

Le site de mon frangin
Pedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2008, 16h15   #26
Candidat au titre de Membre du Club
 
Inscription : octobre 2008
Messages : 35
Détails du profil
Informations personnelles :
Âge : 47

Informations forums :
Inscription : octobre 2008
Messages : 35
Points : 10
Points : 10
Par défaut Comment interagir avec le midi.

Sous Delphi 6

Je vous met déjà un petit programme inspiré par celui de Sub0:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Unit Unit1;
Interface
Uses Windows, Messages, SysUtils, Variants, Classes, Graphics,
     Controls, Forms, Dialogs, ExtCtrls, mmSystem, StdCtrls;
   {mmSystem vous permet d'avoir accès aux fonctions de contrôle midi}
{----------------------------------------------------------------}
Type
  TForm1 = Class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Procedure FormCreate(Sender: TObject);
    Procedure FormDestroy(Sender: TObject);
    Procedure Button1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    Procedure Button1MouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  End;
    const
   Hpc=$100; Hpdm=$10000;
 
Var Form1: TForm1;
  MidiOut: hMidiOut;
 
Implementation
{----------------------------------------------------------------}
{$R *.dfm}
 
 
{----------------------------------------------------------------}
Procedure TForm1.FormCreate(Sender: TObject);
Var Res: DWORD; msg: String;
Begin
  Res := midiOutOpen(@MidiOut, MIDI_MAPPER, Handle, 0, CALLBACK_WINDOW);
 
//La partie qui est çi-dessous peut être omise. Mais vous donneras des indications en cas d'erreur
  If Res <> 0 Then Begin
    Case Res Of
      MMSYSERR_BADDEVICEID: msg := 'Device invalide';
      MMSYSERR_ALLOCATED: msg := 'Erreur d''allocation mémoire';
      MMSYSERR_NOMEM: msg := 'Pas assez de mémoire';
      MIDIERR_NOMAP: msg := 'Midi mapper non trouvé';
      MIDIERR_NODEVICE: msg := 'Device non trouvé';
    Else msg := 'Erreur inconnue';
    End;
    MessageBox(Form1.Handle, pChar(msg), 'Error', MB_OK);
    Close;
  End;
//-------------------------------------------------------------------------------------------------
 
End;
 
 
{La procédure çi dessous vous permet d'arrêter tout événement midi à la sortie du programme}
{rien ne vous empêche de vous faire un petit boutton “Panic” dans le programme à partir de ça, au cas ou un noteOff n'aie pas été détécté}  
Procedure TForm1.FormDestroy(Sender: TObject);
Begin
  midiOutShortMsg(MidiOut, $00007BB0);
  midiOutClose(MidiOut);
End;
 
{----------------------------------------------------------------}
Procedure TForm1.Button1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 
Begin
  midiOutShortMsg(MidiOut, ($7F*Hpdm)+($25*Hpc)+($99));
End;
 
{----------------------------------------------------------------}
Procedure TForm1.Button1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Begin
  midiOutShortMsg(MidiOut, ($7F*Hpdm)+($25*Hpc)+($89));
   end;
 
{----------------------------------------------------------------}
End.
Petite explication:
midiOutShortMsg(MidiOut, 007F2599) vous permet de jouer un click de métronome sur le canal 10 au volume 127

midiOutShortMsg(MidiOut, 007F2589)
Le volume c'est 7F en hexadécimal
Le click c'est 25
99 Le premier neuf veut dire jouer la note, le deuxieme 9 sur le canal 10
(car les canaux vont de 0 à 9).
Dans la deuxième phrase 8 veut dire qu'on arrête la note sur le même canal.

Vous remarquerez que j'ai omis les premiers octets (00) qui sont de toutes façon inutilisé.

En ce qui concerne l'écriture
midiOutShortMsg(MidiOut, ($7F*Hpdm)+($25*Hpc)+($99));

Je vous explique. Celà permet de modifier les valeurs à l'intérieur de la phrase.

Si j'utilise la variable 'Note' par exemple pour pouvoir jouer une note sur le canal 1,
j'écrirai
midiOutShortMsg(MidiOut, ($7F*Hpdm)+(Note*Hpc)+($80));
ou 'Hpdm' et 'Hpc' sont des constantes.

J'aurais pu écrire,
midiOutShortMsg(MidiOut, ($7F*$10000)+(Note*$100)+($80)); !
Si vous voulez interagir sur cette commande, vous pourrez écrire par exemple,
midiOutShortMsg(MidiOut, (Volume*$10000)+(Note*$100)+(8*$10)+Canal));
ou Volume, Note et Canal sont des variables évidemment.

Attention avec les procédures Button1MouseDown et up. Si vous faîtes un copier coller des procédures et que vous rajoutez le bouton après, ça ne marche pas. Aucun son ne sort. Du moins pas chez moi !

Enfin un fichier PDF ou vous trouverez tous ce qu'il vous faut.

http://www.oktopus.hu/imgs/MANAGED/H...cification.pdf
ornitho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2008, 19h06   #27
Rédacteur
 
Avatar de Pedro
 
Inscription : octobre 2003
Messages : 5 397
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 5 397
Points : 4 750
Points : 4 750
Merci pour ta participation
__________________
Pedro
Aucune réponse aux sollicitations techniques par MP

Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

Les pages Source C'est bon. Mangez-en!
Le défi Delphi
Règles du forum - FAQ Delphi - Pensez au chtit

Le site de mon frangin
Pedro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2009, 11h19   #28
Aos
Membre habitué
 
Inscription : janvier 2006
Messages : 189
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 189
Points : 143
Points : 143
Par défaut Comment connaitre sur quel composant est la focalisation ?

Le composant TForm dispose de ActiveControl qui permet de savoir sur quel composant de la form est le focus.

Exemple :

Code :
1
2
3
 
// renvoie le nom du composant sur lequel il y a le focus.
ShowMessage(maForm.ActiveControl.name);
ça semble peut être "basique", mais j'ai pas mal cherché avant que l'on me présente cette astuce J'étais déjà à parcourir tout les composants et à tester si le focus était bien sur lui...
Aos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2009, 14h05   #29
Membre émérite
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 831
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : septembre 2009
Messages : 831
Points : 913
Points : 913
(QR) Delphi 2009, mettre une sélection multilignes en commentaire rapidement :
A l'aide de la souris ou du clavier, sélectionnez plusieurs ligne, ensuite appuyez sur CTRL+/
Ce raccourcis clavier permet de mettre la sélection en commentaire (ajout de // à chaque début de ligne).
Rappelez le raccourcis pour supprimer les commentaires.
Très utile.



(QR) Delphi 2009, générique, taille, type, nom du type des paramètres générique :

Avec Delphi 2009 et l'apparition des type générique (classe ou enregistrement) il faut bien sur pouvoir avoir des informations sur les types.

Delphi nous fournis donc quelques fonctions utiles par le biais de quelques unités :
Generics.Defaults, TypInfo, IntfInfo

Les fonctions :

SizeOf -> vous la connaissez surement, elle permet de récupérer la taille en octet d'un type, cette dernière est compatible avec les types générique.

TypeInfo -> permet de récupérer des informations sur le type (type entier, flottant, ordinal, enregistrement, classe, interface ...).

GetTypeData -> permet de récupérer des informations sur la donnée du type
(type byte, word, single, char, string, widechar ...)

GetTypeName -> permet de récupérer le nom du type (integer, byte, string ...)

Default -> mets la donnée à sa valeur nulle (zero, nil)


mise en place :

au moment de la déclaration de votre classe ou record générique vous pouvez imaginer cette déclaration :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
type
  TGenericPoint<T> = record
  public
    X, Y : T;
  public
    function _Size: integer; // renvois la taille du type T
    function _Info: pTypeInfo; // renvois les infos du type T
    function _Data: pTypeData; // renvois les infos de la données du type T
    function _Name: string; // renvois le nom du type T
    procedure _Zero; // mets à zéro X et Y peu importe le type de T
  end;
 
  TSmallPoint = TGenericPoint<SmallInt>;
  TPoint = TGenericPoint<Integer>; 
  TPointF = TGenericPoint<Single>;
  TBigPoint = TGenericPoint<Int64>;
  TBigPointF =  TGenericPoint<Double>;
voila pour l'interface, voyons l'implémentation :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
function TGenericPoint<T>._Name: string;
begin
  result := GetTypeName(TypeInfo(T));
end;
 
function TGenericPoint<T>._Size: integer;
begin
  result := SizeOf(T) shl 1;
end;
 
function TGenericPoint<T>._Info: pTypeInfo;
begin
  result := pTypeInfo(TypeInfo(T));
end;
 
function TGenericPoint<T>._Data: pTypeData;
begin
  result := pTypeData(GetTypeData(_Info));
end;
 
procedure TGenericPoint<T>._Zero;
begin
  X := Default(T);
  Y := Default(T);
end;



Voila pour le moment.
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/09/2009, 14h19   #30
Membre émérite
 
Avatar de Dr.Who
 
Inscription : septembre 2009
Messages : 831
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : septembre 2009
Messages : 831
Points : 913
Points : 913
(QR) Delphi 2007..2010 : facilitez la lecture des unités grâce à la directive $REGION

La direction $REGION introduite depuis Delphi 2007 (si pas d'erreur) permet de créer, comme son nom l'indique une region de code dans une unité. Facilitant ainsi la lecture, l'écriture de cette dernière.

très simple à utiliser :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
uses ...
 
{$REGION 'Fonctions Mathematiques'}
  {$REGION 'Sinus +aide'}{
    Sinus
 
      Donne la taille de vos sinus
 
    Parametres :
    Retour :
  }{$ENDREGION}
 
function Sinus(const Acthoum: TKlenex): TBeurk;
 
  {$REGION 'Cosinus +aide'}{
    Cosinus
 
      Donne la taille des sinus de votre colocataire, nécessite un colocataire.
 
    Parametres :
    Retour :
  }{$ENDREGION}
 
function Cosinus(const Coloc: TColoc; const Atchoum: TKlenex): TBeurk;
 
{$ENDREGION}
 
implementation
Et une fois que les regions seront repliées, nous verront dans l'IDE ceci :

replis des aides :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
uses ...
 
{$REGION 'Fonctions Mathematiques'}
 
  [Sinus +aide]
function Sinus(const Acthoum: TKlenex): TBeurk;
 
  [Cosinus +aide]   
function Cosinus(const Coloc: TColoc; const Atchoum: TKlenex): TBeurk;
 
{$ENDREGION}
 
implementation
replis de toutes les regions :

Code :
1
2
3
4
5
6
 
uses ...
 
[Fonctions mathematiques]
 
implementation
Genial non ?
Dr.Who est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h04.


 
 
 
 
Partenaires

Hébergement Web