Sous Delphi 7, je souhaite tracer des lignes dans une Form, pardessus tous les divers controls existants .
Merci de m'indiquer la manière la plus simple de réaliser cela!
Sous Delphi 7, je souhaite tracer des lignes dans une Form, pardessus tous les divers controls existants .
Merci de m'indiquer la manière la plus simple de réaliser cela!
il y a de multiples façon d'y arriver...la plus simple dépendra du but recherché
exemples:
- ne pas utiliser de TWinControl sur la fiche
- placer une fenêtre transparente par dessus la fiche
- dessiner sur le DC de l'écran
- dessiner les contrôles enfants dans un bitmap, les rendre invisible et dessiner le bitmap sur la fiche
- ...
Il s'agit de tracer un cadre autour de l'objet visuel pointé dans la Form, de tracer des lignes d'alignement avec les autres objets, ceci via les événements OnMouseDow, OnMouseUp, OnMouseMove des objets présents dans la Form.
Un peu comme la fiche conception de Delphi.
Je recherche une solution simple et performante.
J'ai essayé avec des Panels et des Shapes mais j'ai des problèmes de couleur (Panel) et de visibilité (shape)
Pouvez vous m'expliquer grossièrement vos solutions (et m'indiquer celle qui vous paraît la plus appropriée) :
- placer une fenêtre transparente par dessus la fiche
- dessiner sur le DC de l'écran
- dessiner les contrôles enfants dans un bitmap, les rendre invisible et dessiner le bitmap sur la fiche
Rq :
- cela doit fonctionner avec tous types d'objets visuels (Palette d'outils Delphi)
- sous Windows Vista
Je ne sais pas comment Delphi gère cela, mais s'il est question de dessiner des lignes verticales ou horizontales, le plus simple semble en effet de placer des fenêtre par dessus la fiche...de la même façon que les "Hint"
ensuite il faut gérer sa position etc...
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.FormCreate(Sender: TObject); var cPanel: TForm; cPoint: TPoint; begin cPanel := TForm.CreateNew(Self); cPanel.BorderStyle := bsNone; cPanel.FormStyle := fsStayOnTop; cPanel.Color := clBlue; cPoint := Button1.ClientToScreen(Point(0, 0)); cPanel.SetBounds(cPoint.X, cPoint.Y, 2, 150); cPanel.Show; end;
J'ai besoin de continuer à accéder aux objets visuels via les événements propre à ceux-ci, donc je ne sais pas si la solution de placer des fenêtre par dessus la fiche est adéquate ?
Bonjour,
... ben si tu places une fenêtre de l'épaisseur d'une ligne (soit 1 ou deux pixels) par dessus tu peux accéder à tout le reste : Oui / Non ?J'ai besoin de continuer à accéder aux objets visuels via les événements propre à ceux-ci, donc je ne sais pas si la solution de placer des fenêtre par dessus la fiche est adéquate ?
A+.
Bonjour,
Gilbert disait :
Oui bonne idée, mais alors faudrait qu'entre en jeu la détection de Vista ou non, car ce coquin ajoute quelques pixels au niveau des bordures... ben si tu places une fenêtre de l'épaisseur d'une ligne (soit 1 ou deux pixels) par dessus tu peux accéder à tout le reste : Oui / Non ?
@+
En fait, la solution appliquée est réalisée avec des TPanel pour les lignes à tracer.
Ne pas oublier qu'il y a un Pb de couleur qui est résolu comme suit
et redéfinition de données de position et de dimensionnement lors de l'événement OnMouseMove
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 PanelLineLeft := TPanel.Create(Formxx); PanelLineLeft.Name := 'PanelLineLeft'; PanelLineLeft.Parent := Formxx; PanelLineLeft.Width := 1; PanelLineLeft.Height := 0; PanelLineLeft.ParentBackground := True; PanelLineLeft.ParentColor := True; PanelLineLeft.ParentBackground := False; PanelLineLeft.ParentColor := False; PanelLineLeft.Color := clBlue;
ne pas oublier "PanelLineLeft.BringToFront;" lors de l'ajout de nouveau controls dans la Form
En fait de fil en aiguille, pourquoi se compliquer la vie, puisqu'il existe encore du plus simple ?
Par exemple dans la JVCL existe le JvMovableBevel qui devrait être l'idéal en ce cas.
(Quoiqu'il possède la propriété "movable")
Il peut se décliner, sous une seule ligne, ou bien un cadre.
Ou encore un simple Bevel...
Si même une seule ligne te suffit, alors te reste la possibilité d'utiliser un compo "ligne" tout bête.
@+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager