IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

[SynEdit][HighLighter] Detection d'attributs


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Points : 23
    Points
    23
    Par défaut [SynEdit][HighLighter] Detection d'attributs
    Bonjour a tous ....


    ben voila, je m'adresse a un public averti puisque ca traite des composants SynEdit et plus particulièrement de leur utilisation.

    ma question est relativement simple :
    Comment est il possible de détecter l'attribut d'highlighter actif sur le texte courant ??? ... comment ca :shock: ... vous me comprenez pas....


    j'explik par l'exemple :
    j'ai un texte par exemple comme suis :
    Function(Par1:= xy(1,5),
    varX:= 7,
    toto1:= 'hh,gh,', ghj := fg[g,h,k]);
    et je voudrais savoir comment récupérer l'attribut courant du HighLighter ... dans ce cas, je voudrait que le curseur placé sur la virgule grossie me retourne "StringAttri" .... puisqu'il s'agit d'une chaine de caractère...

    j'espère que je me suis fais comprendre. :

    d'avance de vos réponses.

    @++

  2. #2
    Membre expérimenté

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Points : 1 594
    Points
    1 594
    Par défaut
    Voici une petite routine que j'utilise pour une boite de personalisation des attributs par l'utilisateur. Bien que pas très propre, cette méthode est employée dans l'un des exemples du Synedit, et il semble qu'il n'y en ai pas d'utre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    procedure TConfigForm.DemoSynEditClick(Sender: TObject);
    var
      AToken: string;
      AAttri: TSynHighlighterAttributes;
    begin
      if DemoSynEdit.CaretY = 13 then
      begin
        StylesListBox.ItemIndex := 7;
        StylesListBoxClick(Sender);    
        Exit;
      end;
      with EditorForm.SynHighlighter do
      begin
        DemoSynEdit.GetHighlighterAttriAtRowCol(DemoSynEdit.CaretXY, AToken, AAttri);
        if AAttri = CommentAttribute then
          StylesListBox.ItemIndex := 0;
        if AAttri = KeywordAttribute then
          StylesListBox.ItemIndex := 1;
        if AAttri = DirecAttri then
          StylesListBox.ItemIndex := 2;
        if AAttri = IdentifierAttribute then
          StylesListBox.ItemIndex := 3;
        if AAttri = NumberAttri then
          StylesListBox.ItemIndex := 4;
        if AAttri = SpaceAttri then
          StylesListBox.ItemIndex := 5;
        if AAttri = StringAttri then
          StylesListBox.ItemIndex := 6;
        if AAttri = SymbolAttri then
          StylesListBox.ItemIndex := 7;
      end;
      StylesListBoxClick(Sender);
    end;
    Bon dev

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    yop yop

    je viens de me remettre sur ce probleme....... et je suis passé , en me disant dans le doute, on sait jamais ....

    ... j'ai pas encore testé ton code meme si j'en suis a quelque chose de pas loin mais ca me plait a voir

    Merci de la réponse

    m'en vais tester ca ....

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 29
    Points : 23
    Points
    23
    Par défaut
    Smortex >> oh toi tu sais ........ je te ferai bien la bise tu sais !!!

    bokou, je m'en sortais plus a tout retourner dans tous les sens...

    pour info, ma détection je la fais dans le KeyPress de mon SynMemo puisque c'est à l'appui de la touche que je voulais détecter le type d'attributs courant a cet instant

    aussi ca donne "tout bétement" ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.SynMemo1KeyPress(Sender: TObject; var Key: Char);
    var
       TmpToken: string;
       TmpAttri: TSynHighlighterAttributes;
    begin
      SynMemo1.GetHighlighterAttriAtRowCol(SynMemo1.CaretXY,TmpToken, TmpAttri);
      if (TmpAttri = SynMemo1.Highlighter.CommentAttribute) or (TmpAttri = SynMemo1.Highlighter.StringAttribute)
      then exit
      else begin
             ...
             if (Key =',') and (TmpAttri = SynMemo1.Highlighter.SymbolAttribute)
                then .... ;
             end;
    end;

    voila pour l'exemple, et merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XPath]:detecter l'absence d'un attribut
    Par 19dev86 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 14/04/2010, 18h59
  2. SimpleXML, detection d'un attribut
    Par Magnat dans le forum Langage
    Réponses: 4
    Dernier message: 26/03/2009, 18h32
  3. detection de lignes
    Par the.cable.guy dans le forum Algorithmes et structures de données
    Réponses: 29
    Dernier message: 10/10/2002, 11h15
  4. Detection arret de windows
    Par philippe30 dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 21/09/2002, 18h41
  5. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo