dubois77
Messages postés675Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention19 février 2019
-
30 janv. 2018 à 18:22
dubois77
Messages postés675Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention19 février 2019
-
6 févr. 2018 à 12:41
Bonjour,
J'essaie de faire une unité avec des fonctions et procédures qui fonctionnent parfaitement lorsqu'elles sont intégrées à une application, mais produisent une erreur si je les passe en unités.
Voici le code :
unit uCreaPanel;
//############################//
INTERFACE
//############################//
uses SysUtils,
StrUtils,
Classes,
controls,
graphics,
extctrls
;
/// ========================= BMulti Panels ===============================
procedure CreaPAN(NL,NC:integer; L,H:integer; X,Y:integer; c:Tcolor;
KNOM:string; papa:TWincontrol; PROC:TNotifyEvent);
procedure FreePAN(NL,NC:integer; KNOM:string);
procedure TextePAN(n:integer; T:string; KNOM:string);
procedure ColorPAN(n:integer; C:Tcolor; KNOM:string);
//procedure ClicBP(Sender: TObject);
//############################//
IMPLEMENTATION
//############################//
//##############################################################################
///*****************************************************************************
///*************************** MULTIPANEL **************************************
///*****************************************************************************
//##############################################################################
//--------------------------------------------------
procedure CreaPAN(NL,NC:integer; L,H:integer; X,Y:integer; c:Tcolor;
KNOM:string; papa:TWincontrol; PROC:TNotifyEvent);
var i,j,xx:Integer; z:string; bb:TPanel;
// panels créés : PAN1 à PANx avec x = NC*NL
begin
for j:=0 to NL-1 do
for i:=0 to NC-1 do
begin
xx := j*nC+i+1;
z := KNOM + IntToStr(xx);
bb := TPanel.Create(papa);
bb.Name := z;
bb.Left := i*L+X;
bb.top := j*H+Y;
bb.width := L;
bb.height := H;
bb.Color := c;
bb.BevelWidth := 1;
bb.caption := '';
bb.Parent := papa;
bb.visible := true;
bb.Tag := xx;
bb.Caption := inttostr(xx);
bb.BringToFront;
bb.OnClick := PROC;
end
end;
//----------------------------------------------------
procedure FreePAN(NL,NC:integer; KNOM:string);
var i:integer;
begin
for i:=0 to NL*NC-1 do Tpanel(findComponent(KNOM + inttostr(i))).Free
end;
//----------------------------------------------------
procedure TextePAN(n:integer; T:string; KNOM:string);
begin
Tpanel(tpanel.findComponent(KNOM + inttostr(n))).Caption := T
end;
//----------------------------------------------------
procedure ColorPAN(n:integer; C:Tcolor; KNOM:string);
begin
Tpanel(findComponent(KNOM + inttostr(n))).Color := C
end;
END;
Erreur à la compilation : "identificateur non déclaré : findComponent"
FindComponent appartient à priori à Tcomponent contenu lui même dans "Classes"
Bref je sêche !
merci
A voir également:
Delphi findcomponent
Findcomponent delphi - Meilleures réponses
Delphi find component by name - Meilleures réponses
korgis
Messages postés420Date d'inscriptionsamedi 17 mai 2003StatutMembreDernière intervention 6 mai 201917 30 janv. 2018 à 19:28
Salut,
sans trop rentrer dans le détail, pour la procedure FreePan, par exemple, je ferais :
procedure FreePAN(NL, NC: integer; KNOM: string; papa: TWincontrol);
var
i: integer;
begin
for i := 0 to NL * NC - 1 do
with papa do
Tpanel(FindComponent(KNOM + IntToStr(i))).Free;
end;
Faut pas oublier le "papa"...
dubois77
Messages postés675Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention19 février 201914 31 janv. 2018 à 07:54
Salut Korgis
J'étais sur que tu interviendrais, tu m'avait déjà aidé pour une histoire de mouse bouton il n'y a pas si longtemps
Je vais essayer cela et je te tiens aucourant
dubois77
Messages postés675Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention19 février 201914 31 janv. 2018 à 08:28
ça marche impec, mais cela me crée une erreur justement dans le fameux module panel cité précédemment
Peut être soumettrai-je ce pb plus tard !!
Merci, l'unité fonctionne
dubois77
Messages postés675Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention19 février 201914 5 févr. 2018 à 17:39
Salut Yanb, Salut Papyvore
Je n'ai encore testé que la version de Yannb : ça marche bien : tous les panels déposés sur la fiche deviennent des boutons ; par contre cela ne touche pas les panel créés dynamiquement par mon creaPanel.
Pour l'instant avec mon système je peux transformer une série de panels bien définis (ex: panels XXX1 à nXXX17) les autres panels restant de vrai panels.
Pour le frame, la mise en place semble être plus complexe à mettre en oeuvre rapidement sur une appli standard
Merci à tous les deux, j'ai de quoi passer les longues journées d'hiver qui restent !
dubois77
Messages postés675Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention19 février 201914 5 févr. 2018 à 17:46
Rectification : c'est la version de YanB : UnitPanel que j'ai testée et non celle de papyvore (inversion des noms dans le commentaire précédent)
(désolé, c'est surement l'age !!!)
Salut,
Oui normal que ça ne fonctionne pas avec tes panel créaient dynamiquement, car je l'ai mis pour l'exemple dans l'unité principal mais si tu met UnitPanel dans les uses de ton uCreaPanel ceci devrait se passer autrement ;)
@+
dubois77
Messages postés675Date d'inscriptionjeudi 17 avril 2008StatutMembreDernière intervention19 février 201914 6 févr. 2018 à 12:41
Je viens d'essayer, avec le UnitPanel seulement dans l'unit Creapanel, seuls les dynamiques fonctionnent,
Mais le unitPanel dans l'unit ET dans l'appli : çà marche nickel
Merci YanB
31 janv. 2018 à 07:54
J'étais sur que tu interviendrais, tu m'avait déjà aidé pour une histoire de mouse bouton il n'y a pas si longtemps
Je vais essayer cela et je te tiens aucourant
31 janv. 2018 à 08:28
Peut être soumettrai-je ce pb plus tard !!
Merci, l'unité fonctionne