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

 Delphi Discussion :

[D7] Solidariser un panel dans un RichEdit


Sujet :

Delphi

  1. #21
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 483
    Points : 2 734
    Points
    2 734
    Billets dans le blog
    10
    Par défaut
    Voici une version plus proche de Delphi 7
    Class Helper et Record Helper (tostring) retirés
    Fichiers attachés Fichiers attachés

  2. #22
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Re ALWEBER

    Citation Envoyé par ALWEBER Voir le message
    Voici une version plus proche de Delphi 7
    Class Helper et Record Helper (tostring) retirés
    Ah oui j'aime bien aussi l'indicateur qui passe du vert au rouge si hors zone !

    Bon... j'ai pas encore tout regardé et répondu à tout le monde.

    Mais une chose est désormais certaine : comment vais-je trancher et choisir ?

    Hein ? ah oui j'ai une idée : celle de dispatcher aléatoirement une de vos méthodes

    Merci, c'est super

    Mais pour du Delphi 7, j'ai modifié en source et en uses

  3. #23
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par wheel Voir le message
    Donc c'est une zone réservée au admin que les autres ne devront pas s y mettent ..

    Dans ce cas il est possible de connaitre le début de cette zone en pixel via EM_POSFROMCHAR appliqué sur la première caractère dans le Richbox ce qui permettra ensuite de calculer la distance entre les lignes actuellement visibles .. à noter que les caractères qui ne sont pas visible en haut du controle donnent des valeurs négatives !

    Ce code affiche en rouge la mage a gauche a partir de position 500 px donc vous pouvez le modifier selon ton besoin,

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    var
     OldProc:TWndMethod;
     
    procedure TForm1.FormCreate(Sender: TObject);
    var
      R: TRect;
    begin
       R := RichEdit1.ClientRect;
       inc(R.Left,10); // largeur de la marge
       RichEdit1.Perform(EM_SETRECT, 0, Longint(@R));
       OldProc:=RichEdit1.WindowProc;
       RichEdit1.WindowProc:=NewWinProc;
    end;
     
    procedure TForm1.NewWinProc(var Mag: TMessage);
    var
       Line,cPos,First,Last,TopPos:integer;
       R:TRect;
       Pt:TPoint;
    begin
        OldProc(Mag);
        if (Mag.Msg <> WM_PAINT)
           or(Richedit1.Perform(EM_GETRECT, 0, integer(@R)) <> 0 )then
           Exit;
        cPos  := Richedit1.Perform( EM_CHARFROMPOS, 0, integer(@R.BottomRight));
        First := Richedit1.Perform( EM_GETFIRSTVISIBLELINE, 0, 0);// première ligne visible
        Last  := Richedit1.Perform( EM_LINEFROMCHAR, cPos, 0);// dernière ligne visible
        with TCanvas.Create do
        try
           Handle:=GetDc( RichEdit1.Handle);
           Brush.Color:=clSilver;
           Brush.Style:=bsSolid;
           FillRect(Rect(0, 0,R.Left-1,R.Bottom));
           if RichEdit1.Perform(EM_POSFROMCHAR, integer(@Pt), 0)=-1 then
              Exit;
           TopPos:=Pt.Y;
           for Line := First to Last do
           begin
             cPos := RichEdit1.Perform(EM_LINEINDEX, Line, 0);
             Pt.Y:=0;
             if RichEdit1.Perform(EM_POSFROMCHAR, integer(@Pt), cPos)=-1 then
               break;
            if (Pt.Y-TopPos) > 500 then
             begin
               Brush.Color:=clRed;
               Rectangle(Rect(0,Pt.Y,R.Left-2 ,R.Bottom));
               break;
             end;
           end;
        finally
           Free;
        end;
    end;
    Wheel

    Bin dis-dons !

    Une belle verticale rouge si dépassement en zone réservée

    Là c'est trop bien pour vous tous, je suis heureux de tous ces jolis cadeaux

    Oui, je vais être bon pour ajouter avec le RichEdit, une procédure lançant aléatoirement un de vos méthodes, car choisir c'est renoncer et là je ne souhaite à rien renoncer car tout est top !

    Merci Wheel

    PS : me reste encore à répondre à ShaiLeTroll je crois, faut que j'oublie personne

  4. #24
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Question bête !
    Pourquoi pas deux Mémo fusionné à l'impression ensuite ?
    Quel est le moyen d'impression ? Direct la zone client du Memo dessinée sur le Printer.Canvas ? Quick ou RaveReport ?
    De même pour le stockage, cela permettra de mieux séparer les données selon l'utilisateur
    Comment as-tu prévu d'empêcher l'utilisateur non autorisé à déborder sur la zone ?
    Comment as-tu prévu d'empêcher l'utilisateur lambda de voir le contenu saisi par l'administrateur ?

    Sinon c'est sympa, pour indiquer des erreurs dans un script, je pense reprendre ce concept pour un programme dont j'ai la charge de migrer.
    ShaiLeTroll

    Bon alors voilà en gros le CdC :

    Pourquoi pas deux Mémo fusionné à l'impression ensuite ?
    Au début j'y avais songé, mais au final, ça compliquait plutôt la sauce. La suite éclaire cet aspect.

    Quel est le moyen d'impression ? Direct la zone client du Memo dessinée sur le Printer.Canvas ? Quick ou RaveReport ?
    Le printage passe par un banal BeginDoc. L'alimentation des données peut provenir via un INI/JSon, mais avec possibilité de passer en auto/mano aussi du cloud.

    De même pour le stockage, cela permettra de mieux séparer les données selon l'utilisateur
    La projet est complexe en cela que les données peuvent être séparées ou non suivant divers cas de figures...

    Comment as-tu prévu d'empêcher l'utilisateur non autorisé à déborder sur la zone ?
    Là aussi, pas trop au sens binaire, mais plutôt quantique en cela qu'en certains cas, l'user suivant son degré d'expertise, peut aussi bien déborder en zone admin. Pour cette raison que je ne souhaitais pas de butée binaire en zone rouge.

    Comment as-tu prévu d'empêcher l'utilisateur lambda de voir le contenu saisi par l'administrateur ?
    Ainsi qu'expliqué juste ci-dessus, le cloisonnement n'est pas forcément de mise.

    @+ et merci

    DS7

  5. #25
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Citation Envoyé par Cirec Voir le message
    oui effectivement !
    j'avais pas vu que mélangeais JvRichEdit et RichEdit

    la modif est pour le RichEdit de la VCL

    donc j'ai fait un zip avec le RichEdit de la VCL en y adaptant le code de ALWEBER
    ce qui implique l'ajout de l’évènement OnClick

    Pièce jointe 594896

    cette fois j'ai testé avec D7 avant

    Cordialement,

    @+
    Re Cirec,

    Oui j'étais passé par un JvRichEdit en pensant trouver un OnClick

    Je viens de lancer ta mouture et idem

    Je suis comblé en tous sens

    Au plaisir

    DS7

    Edit : suis comme un canard heureux de couver son oeuf, mais là j'ai ai une brouette

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Comment insérer de l'unicode dans un Richedit ?
    Par DanaKil dans le forum C++Builder
    Réponses: 6
    Dernier message: 30/03/2004, 01h43
  2. Deplacer un curseur dans un RichEdit sous visual c
    Par tweek dans le forum Windows
    Réponses: 7
    Dernier message: 14/01/2004, 01h29
  3. problème de police dans un richedit
    Par chtiot dans le forum Composants VCL
    Réponses: 4
    Dernier message: 28/10/2003, 10h48
  4. Smiley (image dans un RichEdit)
    Par Waxayaz dans le forum Composants VCL
    Réponses: 3
    Dernier message: 06/02/2003, 15h32
  5. Coloration syntaxique ASM dans un RichEdit
    Par Crick dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2002, 02h53

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