Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

EXEMPLE D'EDITEUR DE FENÊTRE (CONTENANT DES COMPOSANTS) : INSERTION DE COMPOSANT PUISÉ DANS UNE PALETTE, ÉDITION DE LEUR PROPRIÉTÉS, POSITIONNEMENT ET DIMENSIONNEMENT


Information sur la source

Catégorie :Divers Classé sous : position, insertion, dimensionner, resize, runtime Niveau : Expert Date de création : 14/01/2006 Date de mise à jour : 19/01/2006 18:57:09 Vu / téléchargé: 3 369 / 610

Note :
Aucune note

Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

Description

ATTENTION : le code présenté ne pourra pas être utilisé tel quel, car je l'ai développé pour l'utiliser avec des composants que je ne souhaite pas publier pour l'instant.
Pour pouvoir l'utiliser, il faudra supprimer les références aux unités non publiées, et remplacer les types TCHAMPS et autres par vos Composants.
L'exécutable est joint au ZIP, pour vous permettre de tester le fonctionnement.
Pour accélerer mes tests, une fenêtre est ouverte avant la fenêtre principale de l'application.
Cette fenêtre correspont à la fenêtre obtenue par l'entrée de menu "Les Fichiers Naturels/Saisie", ainsi court-circuitée.
Dans cette fenêtre, le bouton "Editer la Fiche", ouvre la fenêtre qui nous interresse : "Conception", issue des UConception.PAS/DFM. Elle est une instance descendante de TEZFiche, descendant elle-même de TFORM.
Pour vos developpements personnels, elle peut être une TForm toute simple.
Grace à la présence d'un TToolBar, l'utilisateur peut sélectionner un composant.
Les Evènements OnClick, OnMouseDown, OnMouseMove, OnMouseUp, permettent l'insertion d'un composant du type sélectionné, le déplacement et le dimensionnement des composants existants.
2 composants particuliers posent problème. Ce sont tout deux des composants conteneurs, TChampTableau (composant perso) et TPageControl (ou plus exactement TPageControlEx = TPageControl + 3 propriétes "publiquées", défini dans UConception.Pas)
La contenance m'a posé de nombreux pb que j'ai du mal à résoudre.
Par exemple, pour une raison inconnue, Un TPageControl ne repond pas aux évènements OnMouse...
Donc impossible d'y déposer un composant (contrairement au TChampTableau !)
 

Conclusion

La liste des Beug est trop longue !!!
PS : L'executable du ZIP étant supprimé par CodeSource, voici un lien :
www.assemple.fr/EasyBase.exe (Corrigé le 15 janvier 2005)
Garanti par moi même et sur l'honneur sans virus (à ma connaissance) sans spyware, sans procédure mal intentionnée.
Diégo DELPY - SARL Assemple Informatique - RCS de Carpentras
 

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

15 janvier 2006 11:49:10 :
J'ai corrigé le lien vers l'executable
19 janvier 2006 18:57:09 :
Cette 2° publication est à stade de développement plus avancé. J'ai remplacé l'encadrement des composants sélectionnés dans OnPaint de la fenêtre de conception, par des composants dédiés, les TSelections, ce qui permet au travers de la propriété parent se dessinnent dans le parent du composant sélectionné. J'ai enjolivé les "Mains" qui apparraissent lors d'un dimensionnement ou d'un positionnement. J'ai augmenté le nombre "d'éditeur de propriétés" J'ai implémenté l'enregistrement et la lecture des composants ajoutés. NOTA : un beug affiche un message d'erreur lors de la fermeture de l'application.

Commentaires et avis

signaler à un administrateur
Commentaire de delphinait le 14/01/2006 13:27:02

Bonjour, assemple sa me parait  très intéressant  ton code, mais impossible de télécharger l’EXE à partir de ton adresse,  donc si il y a un autre moyen  pour avoir l’exécutable   merci  

signaler à un administrateur
Commentaire de cirec le 14/01/2006 14:15:42 administrateur CS

Salut,
je ne comprend pas bien l'intérêt de cette source.
On ne peut ni la compiler ("je l'ai développé pour l'utiliser avec des composants que je ne souhaite pas publier pour l'instant")
ni l'essayer (if faut télécharger l'exe);

à mon avis tu as réinventé la roue pour rien (et on peut même pas rouler avec)tu devrais regarder l'unité TypInfo de plus près. Elle comprend les routines nécessaires pour avoir acces aux propriétées des composants (même ceux qui n'existe pas encore :-) )

Cherche un peut sur DelphiFR et tu trouveras au moins une source qui traite le même sujet (où presque)

@+
Cirec

signaler à un administrateur
Commentaire de cirec le 14/01/2006 14:26:39 administrateur CS

pour un exemple c'est ici que ça se passe :
http://www.delphifr.com/codes/CREER-CODER-ET-SAUVEGARDER-DES-COMPOSANTS-DYNAMIQUEMENT-/35105.aspx

@+
Cirec

signaler à un administrateur
Commentaire de assemple le 14/01/2006 14:57:20

Merci pour 35105 que je vais examiner tout de suite

signaler à un administrateur
Commentaire de assemple le 14/01/2006 15:02:37

A TOUS
L'executable contenant des majuscules, le lien est FAUX !
Le bon lien c'est www.assemple.fr/EasyBase.exe

signaler à un administrateur
Commentaire de cirec le 14/01/2006 15:20:28 administrateur CS

L'executable demande un mot passe :-(

@+
Cirec

signaler à un administrateur
Commentaire de assemple le 14/01/2006 21:14:06

Désolé !
L'application EasyBase n'est pas le but en soit de sa publication, mais la fenêtre "Conception" issue de UConception.PAS/DFM.
Un détail non intéressant pour la publication, est à l'origine de ce mot de passe.
EasyBase est une application Multi-Utilisateurs.
Chez vous aucun utilisateur ayant été saisi, mais comme chez moi, l'utilisateur est le super utilisateur ou administrateur, dont le mot de passe est "seguret" (le village [en minuscules et sans accents] du siège social de ma SARL)
Pour m'éviter de me faire c... à taper le mot de passe à chaque lancement, sous Delphi, l'étape du mot de passse est sautée.
Du coup, je l'ai oublié, qu'il y avait un mot de passe.
Désolé à tous !

Décidemment, la publication a été baclée !

Toutes mes plates excuses !

J'ai la tête dans le guidon !!!

signaler à un administrateur
Commentaire de f0xi le 15/01/2006 01:02:47 administrateur CS

hem hem ...

bon alors ... heu ... je vais rejoindre la premiere remarque de Cirec mais d'une façon un peu plus virulente (mais sans vouloir etre agressif) je pense...

il faudrait, mon ami, revoir ta definition de l'esprit de partage des connaissances et de l'opensource et egalement de la compatibilitée et interroperabilitée des sources et programmes que tu diffuse...

si le but est uniquement de montrer quelque lignes de codes pour demontrer le principe de fonctionnement d'une methode particuliere, alors pas besoin de diffuser l'entieretée d'un code source  ...

si le but est de montrer comment faire ci ou ça, le mieux est d'en faire une version pure RTL et/ou VCL, sans composants exotique, en prenant en compte un large eventail de compatibilitée des versions de delphi (au moins de la 5 a la 9 minimum syndical).

si le but est de poster un code source inutillisable, inexploitable et pas commenté du tout cela ne sert a rien car personne ne s'y interresserat.

Desolé de reagir de la sorte mais la ça fait un peu trop "demmerdez vous avec ça" ... ce qui n'est pas vraiment dans l'esprit codes-sources.

donc il serait preferable pour tous :
- de désactiver les "protections" du sources.
- de remplacer tout les composants non-standard par leur equivalent Borland ou Freeware (Jedi par exemple et bien d'autre, trés connus de tous), si certains ne sont pas remplaçable, diffuser au moins les DCU de ces composants/unités.
- de commenter un minimum les divers elements important du programme afin de guider les autres developeurs plutot que de les laisser faire une introspection fastidieuse (qu'ils ne feront d'ailleurs pas) de ton code.
- eviter de balancer un mots de passe de session sur le net meme si cela ne parait pas important.


De ton guidon la tete tu doit sortir, au coté obscur l'impatience te menerat.
De minutie et de patience faire preuve tu dois, beaucoup a apprendre il te reste avant qu'un maitre Jedi tu sois.

signaler à un administrateur
Commentaire de f0xi le 15/01/2006 02:52:02 administrateur CS

ps : avant que l'on me fasse la remarque sur mon commentaire, je tiens a precisé qu'il n'y a rien d'agressif ou de mechant dedans ... disons que cela me deçois beaucoup de voir un si gros travail non seulement inutilisable (le rendant donc ininterressant) et ainsi baclé sur la diffusion par son auteur ... c'est cette deception qui parle donc.

je trouve cela bien dommage, de voir, comme on le vois que trop souvent sur DelphiFr malheureusement, une somme de travail consequante ainsi reduite a néant par un manque de "marketing", si je puis dire, de la part de son createur.

ne salopons pas notre boulot en voulant le poster trop vite!

signaler à un administrateur
Commentaire de f0xi le 15/01/2006 03:10:16 administrateur CS

et aussi : telecharger un EXE de 2.4Mo avec un serveur qui up a 10Ko/sec c'est pas top ... free abuse un peu ...

bon en tout cas avec UPX ton EXE passe de 2.4Mo a 788Ko.

signaler à un administrateur
Commentaire de Delphiprog le 15/01/2006 09:16:01 administrateur CS

Je rejoins l'avis de fOxi en ajoutant quelques réflexions.

1- Pour les débutants, c'est totalement inutilisable.

2- Pour les hobbyistes, s'ils n'ont vraiment rien d'autre à faire, qu'ils se penchent sur la question, s'ils ont vraiment du temps à tuer, et qu'ils nous fassent part de leurs découvertes. Ce serait sympa de leur part. D'avance on les en remercie.

3- Pour les experts, aucun intérêt non plus. Le temps passé à essayer de comprendre et de reconstituer des composants équivalents (je cite : "et remplacer les types TCHAMPS et autres par vos Composants", en clair : débrouillez-vous) est trop important et n'élèvera pas nécessairement le niveau des connaissances.

Publier une application complète, c'est bien et c'est louable.
Mais il est préférable d'exposer un problème complexe et d'expliquer la manière dont il a pu être résolu en l'isolant du contexte de ton application.
En l'occurence, le glisser-lâcher de composants est, dans ton cas, ce qui présentait le plus de difficultés et donc le plus d'intérêt pour la communauté.
Une petite application, illustrant ce principe, aurait suffi pour la démonstration et susciter notre curiosité au lieu de notre courroux.

Pour finir, de la part d'un professionnel :
1- divulguer un mot de passe sur le web
2- publier un code inutilisable
3- oser ajouter "La liste des Beug est trop longue !!!" ("Beug", néologisme ?)

On se demande si on a vraiment un pro en face de soi.

Assemple, ce n'est pas le premier code que tu publies et tu nous avais habitué à mieux que cela. Au lieu de cela, tu t'es précipité pour publier à tout prix, comme un débutant.
Il ne suffit pas de se déclarer professionnel, il faut aussi l'être. Sinon, c'est le discrédit assuré...
Allez, tu isoles la partie la plus intéressante de ton code,tu nous en fais profiter si tu veux et on oublie ce regrettable incident.

Ne prend surtout pas mal mes propos. Je suis sûr que tu comprendras que je les ai rédigés dans le seul but de te rendre service.

Que Delphi soit avec toi.

signaler à un administrateur
Commentaire de assemple le 15/01/2006 11:47:43

En effet vos commentaires sont justes, mais j'ai annoncé la couleur dès le début.

Easybase est une vraie application, ce n'est pas un exemple.
J'avais commenté l'exemple (qui m'avait beaucoup plu)du Code source "DRAG&DROP DE CONTROLES"
http://www.delphifr.com/code.aspx?ID=35211

Je suis parti de ce source en utilisant donc les fonctions et gestionnaires d'évènements STANDARDS de Drag & Drop
(OnDragOver, BeginDrag)
Comme j'ai eu besoin d'utiliser la multiselection, et que je savais le faire à ma façon, et pas avec les méthodes STANDARDS, j'ai abandonné les functions Drag and Drop pour faire à ma manière, assez originale pour mériter d'être publiée ici (en toute modestie)

J'aurais peut être pu ne publier que UConception.Pas/Dfm joint à un lien sur l'executable.
L'executable permet de voir fonctionner, tandis que UConception.Pas contient une multitudes d'astuces, de solutions originales, autour du thème "Edition d'une fenêtre contenant des composants"
Les voici énumérés :
- Le carré de dimensionnement très rustique (petit carré presque noir [Color := 1 // Donc il faut être en 32bits ])
- La selection de la classe utilisée pour créer un composant (dans EZFicheClick)
J'ai découvert la fonction GetClass(NomDeLaClasse) qui nécessite d'avoir au préalable appelé RegisterClasses (ou RegisterClasse)
J'ai découvert qu'il faut appeler succesivement 2 fois create (bizarre non ?)
Au lieu d'avoir une énumération comme :
                   Case NumBouton of
                     1 : C := TLabel.Create(Sender) ;
                     2 : C := THTMLLabel.Create(Sender) ;
                        ...
                    End ; // Case

J'ai quelque chose comme :
                    TypeInsere := GetClass(NomDuType) ;
                    C := TypeInsere.Create ;
                    TControl(C).Create(Self) ;
                    TControl(C).Parent := Sender ;

- La sélection de l'éditeur des propriétés (ControlDblClick)
- L'effet esthétique de la main saisissant le composant
- Le flux d'information entre le composant et son éditeur
Au lieu de gérer toutes les propriétes classe par classe, je parcours les composants Champs de l'editeur AD HOC, et cherche la propriété portant le même nom.
Nota : pour accéder à des sous propriétés, j'utilise le point. Par exemple "Font.Name". Dans ce cas, je cherche la propriété objet "Font", puis la propriété "Name" de cet objet.
             -----------------------------
Un Editeur de Fenêtre contenant des Composants ou pour l'appeler autrement, une interface de conception de Fenêtre, de quelques centaine de lignes, ça me semble pas mal.

NOTA pour ceux qui souhaiterais s'inspirer de UConception, les TChamp pourront être remplacé par TEdit dont le Hint sera utilisé pour le nom de la propriété (pour pouvoir mettre un point), je répondrais à toutes les questions

signaler à un administrateur
Commentaire de cirec le 15/01/2006 21:02:34 administrateur CS

Même avec le mot de passe ça plante

il décomprime des fichiers html mais rien de plus ensuite il plante :-(
@+
Cirec

signaler à un administrateur
Commentaire de assemple le 16/01/2006 10:23:18

A Cirec.
Il ne décomprime pas des fichiers HTML, mais les génère :
   AssignFile(T,'Les Projets - Saisie.html') ;
   Rewrite(T) ;
   Writeln(T,'<HTML> ....') ;
   ...
   Writeln(T,'.... </HTML>') :
   CloseFile(T) ;
Ce sont des fichiers d'aide, agrémenté de copie d'écran générées elles aussi au démarrrage de EasyBase. C'est ici que j'ai quelques plantages, mais pas chez moi.
Dans ce cas, <CTRL><ALT><Suppr>
et on relance.

signaler à un administrateur
Commentaire de WhiteHippo le 18/01/2006 20:18:23

"ATTENTION : le code présenté ne pourra pas être utilisé tel quel, car je l'ai développé pour l'utiliser avec des composants que je ne souhaite pas publier pour l'instant."

"La liste des Beug est trop longue !!!"

Tout ça ne donne pas vraiment envie de se pencher sur la source, et si on ajoute les commentaires, alors on n'a plus du tout envie !!!

Bref, tout cela ne semble décidément pas avoir grand intérêt, mis à part peut être de faire un peu de publicité pour votre SARL, quoique ... fournir un programme fortement buggé, c'est pas très pro pour une boite info... ;)

Cordialement.

signaler à un administrateur
Commentaire de assemple le 19/01/2006 18:37:37

Cette publication n'est pas déstinée à être utilisée telle quelle.
Elle contient, je le répète, des astuces pour modifier un TForm à l'execution, qui pourront inspirer des développements similaires.
Depuis la publication d'EasyBase sur ce site, j'y ai beaucoup travaillé, et la partie "Edition" est bien avancée.
www.assemple.fr/EasyBase.exe
Mot de passe Super-Utilisateur : seguret
Je vais mettre le ZIP à jour, car comme je l'ai dit le source est très modifié.
A noter l'utilisation de WriteComponentResFile
et ReadComponentResFile qui permettent respectivement d'écrire et de lire un fichier DFM !!!

signaler à un administrateur
Commentaire de WhiteHippo le 19/01/2006 19:56:56

La curiosité étant plus forte, j'ai quand même regardé le source et là je suis entièrement d'accord, cette publication n'est "Pas destinée à être utilisée telle quelle", pire je dirais même qu'elle n'est pas exploitable du tout, même pour une application similaire... Vu tout le code manquant, il sera plus facile et certainement plus rapide de repartir sur une base vide plutôt que d'essayer de recoller les bouts manquants.
Enfin, cela n'engage bien sur que mon modeste jugement.

Mais arrétons de tirer sur l'ambulance, quelques remarques constructives concernant le codage pur :

Faché avec les "if then else" ?
Ex 1 :
  If Valeur = StrOUI then Valeur := 'True' ;
  If Valeur = StrNON then Valeur := 'False' ;
  If Valeur = StrNeutre then Valeur := 'False' ;

Ex 2 :
  If C is TLabel then TLabel(C).OnClick := ControlClick ;
  If C is TLabel then TLabel(C).OnDblClick := ControlDblClick ;
  If C is TCurvedSpeedButton then TCurvedSpeedButton(C).OnClick := ControlClick ;
  If C is TCurvedSpeedButton then TCurvedSpeedButton(C).OnDblClick := ControlDblClick ;

Ne serait-il pas plus judicieux d'écrire :
Ex 1 :
  If ( Valeur = StrOUI ) then Valeur := 'True'
  else if ( Valeur = StrNON ) or ( Valeur = StrNeutre ) then Valeur := 'False' ;

Ex 2 :
  If ( C is TLabel ) then
  begin
    TLabel(C).OnClick    := ControlClick ;
    TLabel(C).OnDblClick := ControlDblClick ;
  end ;
  If ( C is TCurvedSpeedButton ) then
  begin
    TCurvedSpeedButton(C).OnClick    := ControlClick ;
    TCurvedSpeedButton(C).OnDblClick := ControlDblClick ;
  end ;

Je sais c'est PRESQUE la même chose, mais d'une part on économise des tests et d'autre part on gagne en clarté, facilitant au passage les modifications futures.

Moi la maintenance de code identique dans plusieurs modules, j'aime pas ça. Cela n'est pas nécessaire, et les risques d'erreurs lors de modifications sont multipliés.

Il serait donc, par exemple, beaucoup plus logique de créer une fiche "TFichePropChamp" dérivant de TEzFiche contenant le code identique des fiches TPropChampCompte, TPropChampCouleur, TPropChampEntier, TPropChampNumero,... qui deviendraient alors des fiches enfants de "TFichePropChamp". Idem pour la fiche TPropChampString avec un override en prime.

Cordialement.

P.S. Une mention spéciale pour ce superbe anglicisme "bouged"

signaler à un administrateur
Commentaire de assemple le 20/01/2006 16:02:07

Easybase est un peu brouillon car c'est un premier jet, prospectif. Si la disposition des "IF" semble illogique, inélégante, c'est qu'ils se sont ajoutés par couche, lorqu'il m'a fallut rajouter des attributions de gestionnaire d'évènement.
Mais quoi ?!
Personne ne trouve de choses intéressantes ?
Comme l'utilisation Set/GetObjectProperty, Set/GetPropertyValue,
Read/WriteComponentResFile ... ?

signaler à un administrateur
Commentaire de WhiteHippo le 20/01/2006 18:39:08

Faut pas le prendre mal, mais même si c'est un premier jet, cela ne devrait pas empecher une certaine rigueur. Privilégier la rapidité de développement et non la qualité se paye à un moment ou un autre (choix erronés de solutions, maintenance ardue, évolution impossible sans modification à coups de serpe, etc...) Même le processus le plus rapide de développement, l'XP(eXtreme Programming) impose des principes à respecter, et surtout de la rigueur.

Je suis tétu, ( soit! :-) en conséquence, j'insiste. Quel est l'intérêt de proposer un programme prospectif ? Déjà une seconde version et ce en moins de 4 jours ! Désolé mais pour ma part, je m'intéresse aux programmes finis qui pourront m'apporter quelquechose, et non aux essais de programmation, qui un jour iront vers une voie et plus tard vers la voie opposée, car la prospection ne sera pas partie du bon côté par manque d'analyse préalable. Qui voudrait d'ailleurs faire se reposer un programme  sur une [Easy]Base aussi chancelante ?

En conclusion, un petit programme fini, bien structuré proposant peu de fonctionnalités sera toujours plus intéréssant et instructif qu'un gros programme non complet (dont une partie des sources est manquante) proposant une multitude de fonctionnalités non exploitables une fois celle-ci sorties de leur contexte.

Cordialement.

signaler à un administrateur
Commentaire de assemple le 22/01/2006 15:12:02

Un petit programme fini et bien structuré comme celui dont je me suis inspiré au départ( "DRAG&DROP DE CONTROLES"
http://www.delphifr.com/code.aspx?ID=35211 )
mais dont j'ai dû abandonner le principe pour permettre la multiselection.
C'est en faisant qu'on découvre d'adéquation ou l'inadéquation d'une solution.
Par exemple, je ne connaissais pas Set/GetObjectProperty, Set/GetPropertyValue, qui me permette d'automatiser (dans ControlDblClick) la copie des propriétés d'un composant depuis ou vers un "editeur".
J'ai mis du temps à trouver, mais je subodorais qu'il fallait et que l'on pouvait éviter d'avoir à traiter chaque type de composant par une énumération longue et fastidieuse de suites d'instructions propres à chaque type de composant.
Est-ce que WhiteHippo connaissait Set/GetObjectProperty et Set/GetPropertyValue ?

signaler à un administrateur
Commentaire de WhiteHippo le 22/01/2006 23:42:45

C'est des procédures que l'on employe très souvent et largement lorsque l'on réalise des experts sous Delphi.

Mais cela permet également d'autres subtilités.

Voici, un programme fait en 2 coups de cuillères à pot pour manipuler un type énuméré à partir de chaines de caractères :

unit Unit2;

interface

uses
  Classes ;

type
  TypeAConvertir =
    ( mtInconnu
    , mtType1
    , mtType2
    ) ;

  TTypeAConvertir = class( TPersistent )
  private
    FType : TypeAConvertir ;
  public
    function EnChaine : string;
    procedure DeChaine ( s : string );
  published
    property ProprieteType : TypeAConvertir read FType Write FType ;
  end ;

implementation

uses
  Dialogs, TypInfo;


function TTypeAConvertir.EnChaine : string;
begin
  // Récupération de la valeur du type sous forme de chaine.
  if IsPublishedProp(self,'ProprieteType') then
  begin
    Result := GetPropValue( self,'ProprieteType',true);
  end ;
end ;

procedure TTypeAConvertir.DeChaine ( s : string );
begin
  // Forçage de la valeur du type à partir d'une chaine.
  if IsPublishedProp(self,'ProprieteType') then
  begin
    SetPropValue( self,'ProprieteType',s );
  end ;
end ;


var
  T : TTypeAConvertir ;

initialization
  T := TTypeAConvertir . Create ;
  T.ProprieteType := mtType1 ;  // Emploi classique
  ShowMessage( T.EnChaine );    
  T.DeChaine( 'mtType2' );  
  ShowMessage( T.EnChaine );
  T.DeChaine( 'mtInconnu' );  
  ShowMessage( T.EnChaine );

  T.Free ;
end.


Cordialement.

signaler à un administrateur
Commentaire de assemple le 23/01/2006 19:05:22

Grace à cet exemple, j'ai découvert la fonction IsPublishedProp, qui va me permettre d'appeler Set/GetPropertyValue (et aussi, je suppose, Set/GetObjectProperty) sans que ça plante si la propriété est inexistante.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Conserver la position de l'enregistrement dans un DBGrid [ par babylone ] boujour à tous,Y'a t-il une possibilité de conserver la position du curseur d'un DBgrid sur un enregistrement sélectionné. ???En fait une fenêtre appa insertion d'un composant custom sur une form en execution [ par vib ] Mon appli permet d'insérer des controles dynamiquement sur une form.J'ai créé un composant à partir de Timage.Lorsque je veux l'insérer sur la form, D Runtime error 217 [ par Jos ] Bonjour, Lorsque je tente d'inclure un composant treelist, dans mon application, j'ai des problèmes. En effet, par la suite, au application.termina Insertion d'un tableau dans un DBRichEdit [ par Adel ] Pour les besoins de la réalisation d'un mini traitement de texte je voudrai savoir s'il est possible d'insérer un tableau multicolonnes dans un DBRich Position souris dans un RichEdit [ par bassman64 ] Je voudrais savoir comment faut faire pour coller du text à la position du curseur de la souris !J'arrive à coller le text : ClipBoard.AsText;Mais pas Insertion d'images dans un RichEdit [ par Nebula ] salut à tous !je programme un client pour un chat (voir mon site pour plus de détails), et j'aurais besoin d'étendre les fonctionnalités du TRichEdit Changer position d'un objet [ par fabiin ] Salut,je voudrai changer la position d'un objetmais sans utiliser .Top ou .Leftavecune fonction genre SetWindowPos, mais poour les objets Merci @+Fabs Cherche fonction Delphi [ par costello ] Je cherche une fonction qui renvoie la position d'une chaine dans une autre, mais qui ne s'arrête pas à la premiere occurence !Pos( ) s'arrête dès qu' Position du curseur [ par Bruto ] Comment récupérer la position du curseur sur l'écran ? Attention, je ne demande pas la position du pointeur de la souris mais bien le curseur quand vo ignorer une erreur [ par lan0sic ] Bonjour,dans mon appli il y a un if qui test une position d'un tableau. Sauf que cette position n'existe pas tout le temps donc ca me fait tout plante


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,655 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.