Editeur de format d'édition

2

Réponses

  • Philippe49Philippe49 Membre
    15:58 modifié #32
    Ben si c'est possible, mais il faut accepter alors que les ordonnées se lisent de haut en bas, et non pas de bas en haut !

    Et si on veut faire cela, c'est tout simple, on fait répondre YES à  la vue lorsqu'on lui demande si elle suit cette logique ! Où est le problème ? Où est la question ?

    -(BOOL) isFlipped  {
        return YES;
    }

    Il faut alors bien faire attention lorsqu'on prend les coordonnées via un event de les lire dans cette vue par une méthode convert convenable.




  • Philippe49Philippe49 Membre
    15:58 modifié #33
    Quand à  centrer une view dans une scrollview, cela marche avec scrollToPoint.

    ci-joint un mini-projet d'essai
  • wiskywisky Membre
    15:58 modifié #34
    Merci ! C'est parfais comme ça !!! <3 <br />
    J'ai une NSSplitView qui redimenssionne ma NSScroolView comment faire pour savoir quand cette dernière est redimensionné ?
  • CéroceCéroce Membre, Modérateur
    15:58 modifié #35
    Comme le montre ton programme, utiliser scrollToPoint: fonctionne bien en statique. D'ailleurs c'est une aberration, comment peut-on déplacer l'ascenseur quand il n'y a pas d'ascenseur ?

    Cependant, j'ai fait un autre essai. Il s'agit d'une vue:

    <br /><br />- (void)drawRect:(NSRect)rect {<br />&nbsp; &nbsp; [[NSColor colorWithCalibratedRed:1.0 green:0.0 blue:0.0 alpha:1.0] set];<br />	NSRectFill([self bounds]);<br />}<br /><br /><br />- (void)setFrame:(NSRect)frameRect<br />{	<br />	<br />	[super setFrame:frameRect];<br />	<br />	NSClipView* clipView = (NSClipView*)[self superview];<br />	[clipView scrollToPoint:NSMakePoint(40,40)];	<br />}<br />
    


    Ce que j'essaie de  faire est de centre la vue en dynamique, c'est à  dire, quand on redimensionne la fenêtre et la scrollview se trouvant dedans. Et là , ça ne marche absolument pas.

    J'ai trouvé ça sur CocoaDev:
    http://www.cocoadev.com/index.pl?CenteringInsideNSScrollView

    Bref, ce n'est pas aussi simple...
  • wiskywisky Membre
    15:58 modifié #36
    Merci pour la source, c'est en effet pas si simple que ça ! J'abandonne le centrage car c'est un confort et l'implémentation est possible plus tard ;)

    Le garde par contre le fait d'avoir l'origine en haut et à  gauche car c'est ce que je cherche pour mes objets. <3 <br />Comme c'est un Progiciel à  diffusion très très limité cela importe peux que l'affichage soit centré ;)

    Je vais me mettre à  écrire mes objets pour arriver à  les créer, editer, supprimer avec la palette des propriétés et je verrais un peu plus tard pour la modification à  la souris. Si j'arrive à  faire ça et que je lit et écrit les formats de fichiers correctement, j'aurais déjà  réécrit tout le logiciel RB actuel ! J'aurais gagné en vitesse d'exécution (mon but).  :kicking:
  • Philippe49Philippe49 Membre
    février 2009 modifié #37
    dans 1234250887:

    J'ai une NSSplitView qui redimenssionne ma NSScroolView comment faire pour savoir quand cette dernière est redimensionné ?

    La split view envoie deux messages à  son delegate , le premier juste avant le redimensionnement, le second juste après :

    - (void)splitViewWillResizeSubviews:(NSNotification *)aNotification
    - (void)splitViewDidResizeSubviews:(NSNotification *)aNotification

    Donc on choisit un delegate pour la split view (connexion dans IB par exemple) et il s'occupe de faire les changements nécessaires.
  • Philippe49Philippe49 Membre
    15:58 modifié #38
    dans 1234250966:

    Comme le montre ton programme, utiliser scrollToPoint: fonctionne bien en statique. D'ailleurs c'est une aberration, comment peut-on déplacer l'ascenseur quand il n'y a pas d'ascenseur ?

    scrollToPoint: ne fait que changer l'origine du rect "bounds" du clipview, en quelque sorte cela déplace en translation la zone où on regarde cette clipview, et donc son contenu.


    dans 1234250966:

    Ce que j'essaie de  faire est de centre la vue en dynamique, c'est à  dire, quand on redimensionne la fenêtre et la scrollview se trouvant dedans. Et là , ça ne marche absolument pas.

    Si on veux faire bouger la fenêtre, le split view et les ascenseurs et que tout se repositionne automatiquement, c'est sûr qu'il faut prendre un papier et un crayon pour faire les formules adéquates, ce que personnellement je ne ferais pas !
    Par contre, je ne vois pas pourquoi un scrollToPoint: bien calculé ne marcherait pas ? peut-être est-ce l'oubli de setNeedsDisplay: dans le setFrame ?
  • wiskywisky Membre
    février 2009 modifié #39
    Me revoilà  ! J'ai un problème sur l'affichage des objets.

    Voici ma fonction "drawRect" qui appel toutes les fonctions draw :
    - (void)drawRect:(NSRect)rect {<br />&nbsp; &nbsp; // Drawing code here.<br />	<br />	[NSGraphicsContext saveGraphicsState];<br />	<br />	<br />	NSAffineTransform* xform = [NSAffineTransform transform];<br />	[xform scaleXBy:_zoom yBy:_zoom];	<br />	// Apply the changes<br />	[xform concat];<br />	<br />	int max=[_listObject count]-1;<br />	int i;<br />	for(i=max;i=0;i--){<br />		[[_listObject objectAtIndex:i] draw];<br />	<br />	}<br />	<br />	[NSGraphicsContext restoreGraphicsState];<br />	<br />	NSRect tect1 = NSMakeRect(1, 1, [self frame].size.width-2, [self frame].size.height-2);<br />	NSBezierPath * bp3 = [NSBezierPath bezierPathWithRect:tect1];<br />	<br />	[[NSColor redColor] set];<br />	[bp3 stroke];<br />	<br />	<br />	[self setNeedsDisplay:YES];<br />}
    


    Et voici la fonction "draw" de mon objet trait :
    - (void)draw {<br />&nbsp; &nbsp; // Drawing code here.<br />	NSBezierPath * bp = [NSBezierPath bezierPath];<br />	[_color set];<br />	[bp setLineWidth:(float)_width];<br />	[bp moveToPoint:_sizeAndPosition.origin];<br />	if(_sizeAndPosition.size.width&gt;_sizeAndPosition.size.height){ //largeur supérieur à  la longeur: ligne horizontale<br />		[bp lineToPoint:NSMakePoint(_sizeAndPosition.size.width+_sizeAndPosition.origin.x, _sizeAndPosition.origin.y)];<br />	}else{ //ligne vertivale<br />		[bp lineToPoint:NSMakePoint(_sizeAndPosition.origin.x, _sizeAndPosition.size.height+_sizeAndPosition.origin.y)];<br />	}<br />	[bp stroke];<br />}
    

    L'objet trait hérite de NSObject.


    Le problème c'est que rien ne s'affiche :-\\ Il est où le problème ?
  • wiskywisky Membre
    15:58 modifié #40
    Trouver ! La boucle for qui n'est pas bonne  !!
  • Philippe49Philippe49 Membre
    15:58 modifié #41
    1) [self setNeedsDisplay:YES];
    a pour effet de provoquer une exécution (entre autres ) de drawRect. En toute logique, ton programme devrait tourner indéfiniment. Supprimes-le.

    [NSGraphicsContext saveGraphicsState];
    Ne sert à  rien dans un drawRect:
    A supprimer comme le restore associé.

    La fonction draw
    Ce n'est pas le rôle d'un NSObject de faire le dessin à  l'écran.
    Définit plutôt un objet NSBezierPath * bezierPath dans ta classe et fais une boucle
    <br />&nbsp; for(id object in _listObject){<br />&nbsp; &nbsp; NSBezierPath * bezierPath=[object bezierPath]; <br />&nbsp; &nbsp; [bezierPath stroke];<br />&nbsp; }<br />
    


    }

  • wiskywisky Membre
    15:58 modifié #42
    dans 1234274335:

    [NSGraphicsContext saveGraphicsState];
    Ne sert à  rien dans un drawRect:
    A supprimer comme le restore associé.

    Si j'en ai besoin car je fait une modification affine sur le context avant d'appeler les draw (c'est le zoom). Je le restaure pour dessiner en dernier le bord de ma NSView !
  • Philippe49Philippe49 Membre
    15:58 modifié #43
    Je crois que tu compliques
    - (void)drawRect:(NSRect)rect {<br />	NSRect littleRect=NSMakeRect(0.,0.,20.,20.);<br />	[[NSColor whiteColor] set];<br />	NSRectFill(littleRect);<br />	<br />	NSAffineTransform * xform = [NSAffineTransform transform];<br />	 // Draw item 1<br />	[xform translateXBy:50.0 yBy:50.0];<br />	[xform concat];<br />	[[NSColor blueColor] set];<br />	NSRectFill(littleRect);<br /><br />	[[NSAffineTransform transform] set];	<br />	[xform translateXBy:150.0 yBy:20.0];<br />	[xform concat];<br />	[[NSColor redColor] set];<br />	NSRectFill(littleRect);<br />}<br />
    


  • wiskywisky Membre
    15:58 modifié #44
    J'ai testé ta solution avec des NSBezierPath et ça ne marche pas !

    J'ai un autre problème !
    Lorsque je récupère la position de la souris lors du "mouseDown", je corrige les coordonnées pour ma vue en faisant :
    NSPoint p = [self convertPoint:[theEvent locationInWindow] toView:nil]
    

    Mais le problème c'est que la valeur de X n'est pas juste. Elle est donnée par rapport à  la fenêtre et non par rapport à  le vue. Comment faire ?
  • Philippe49Philippe49 Membre
    15:58 modifié #45
    dans 1234285631:

    J'ai testé ta solution avec des NSBezierPath et ça ne marche pas !

    Ben si :
    - (void)drawRect:(NSRect)rect {
    NSRect littleRect=NSMakeRect(0.,0.,20.,20.);
    NSBezierPath * bezierPath=[NSBezierPath bezierPathWithOvalInRect:littleRect];

    [[NSColor whiteColor] set];
    // NSRectFill(littleRect);
    [bezierPath fill];

    NSAffineTransform * xform = [NSAffineTransform transform];
    // Draw item 1
    [xform translateXBy:50.0 yBy:50.0];
    [xform concat];
    [[NSColor blueColor] set];
    // NSRectFill(littleRect);
    [bezierPath fill];

    [[NSAffineTransform transform] set];
    [xform translateXBy:150.0 yBy:20.0];
    [xform concat];
    [[NSColor redColor] set];
    // NSRectFill(littleRect);
    [bezierPath fill];
    }

  • Philippe49Philippe49 Membre
    février 2009 modifié #46
    dans 1234285631:

    NSPoint p = [self convertPoint:[theEvent locationInWindow] toView:nil]



    convertPoint:fromView:
    Converts a point from the coordinate system of a given view to that of the receiver.

    - (NSPoint)convertPoint:(NSPoint)aPoint fromView:(NSView *)aView

    Parameters
    aPoint
    A point specifying a location in the coordinate system of aView.

    Essaie :
    NSPoint pointInSelfCoordinates =[self convertPoint:[theEvent locationInWindow] fromView:nil]
  • wiskywisky Membre
    15:58 modifié #47
    Voilà  une petite vidéo de l'utilisation du logiciel que j'ai réalisé. La mise en place de la sélection d'un objet avec la souris et sont déplacement à  été fait en quelques lignes de code. Là  je vois encore une fois la simplicité et l'optimisation de COCOA.

    La vidéo : rtsp://extranet.sygeste.com/video_exemple_PMC.mp4
    Attention c'est en streaming et de relativement bonne qualité. à‰tant données que la connexion du serveur n'est pas très élevé veuillez être patient et attendre le chargement de la vidéo ;)
  • Philippe49Philippe49 Membre
    15:58 modifié #48
    Cocoa Pro 
  • wiskywisky Membre
    15:58 modifié #49
    Nouveau problème !!
    Comment faire pour dessiner le texte ? J'ai vu qu'il est possible de dessiner du texte dans un contexte graphique avec NSString. Mais comment faire pour la détection de l'appartenance d'un point à  un NSString ?
    Est t'il possible d'avoir un rectangle NSBezierPath transparent juste pour la gestion de la détection d'appartenance d'un point?
  • Philippe49Philippe49 Membre
    15:58 modifié #51
    - (NSRect)boundingRectWithSize:(NSSize)size options:(NSStringDrawingOptions)options
    pour être plus précis
  • wiskywisky Membre
    15:58 modifié #52
    Comment faire pour que le rectangle (NSBezierPath) qu'il ne soit pas visible ?
  • Philippe49Philippe49 Membre
    15:58 modifié #53
    Il n'a pas besoin d'être dessiné. Comment fais-tu actuellement pour détecter le dessin concerné par le clic de souris ?

    Il est temps de réfléchir pour faire une base solide/robuste à  tout ce que tu pourras ajouter par la suite.
    • Le Model
    • La Vue
    • Le Contrôleur
    Actuellement, il me semble que c'est le Model qui est encore flou.
  • wiskywisky Membre
    15:58 modifié #54
    C'est juste qu'actuellement je pensait que seul les NSBezierPath dessiné réponde à  containsPoint. C'est débile comme idée !!!

    Le Model est bien construit car j'ai une class "générique" qui gère la position et autre éléments commun de tout type d'objet. Ensuite je sous-classe pour apporté les spécificités de chaque objet.
  • Philippe49Philippe49 Membre
    15:58 modifié #55
    Tu as aussi NSRectContainsPoint, mais si tu fais ton rectangle par un BezierPath , évidemment containsPoint: de NSBezierPath va marcher aussi.

    containsPoint:
    Returns a Boolean value indicating whether the receiver contains the specified point.

    - (BOOL)containsPoint:(NSPoint)aPoint

    Parameters
    aPoint
    The point to test against the path, specified in the path object's coordinate system.
    Return Value
    YES if the path's enclosed area contains the specified point; otherwise, NO.

    cependant attention à  la définition de  "enclosed Area" qui n'est pas clair lorsque les arcs/lignes se recoupent.
  • Philippe49Philippe49 Membre
    15:58 modifié #56
    dans 1234359992:

    cependant attention à  la définition de  "enclosed Area" qui n'est pas clair lorsque les arcs/lignes se recoupent.


    Voir Winding Rules
  • Philippe49Philippe49 Membre
    15:58 modifié #57
    dans 1234359525:

    Le Model est bien construit car j'ai une class "générique" qui gère la position et autre éléments commun de tout type d'objet. Ensuite je sous-classe pour apporté les spécificités de chaque objet.


  • wiskywisky Membre
    15:58 modifié #58
    Merci pour ces précisions. Mais j'ai que des rectangles et lignes (horizontale ou verticale) comme géométrie de base. J'ai pas de diagonale, courbe, rond, etc...


    Deux questions idiotes :

    La première comment mettre un texte en gras et italic ?
    Actuellement, j'arrive à  souligné, changer la police, la taille mais pas à  mettre en gras ou italic. Le Fait d'ajouter "-Bold" au nom de la police fait planter l'application. J'ai vu NSBoldMaskFont mais je sais pas à  quoi ça correspond !!!

    La deuxième questions est : comment faire pour avoir la même chose que le sélecteur de vue de la fenêtre des propriétés de IB (cf pj) ?
    C'est la ToolBarre ou un NSSegmentedButton ?
  • Philippe49Philippe49 Membre
    15:58 modifié #59
    dans 1234360582:

    La première comment mettre un texte en gras et italic ?
    Actuellement, j'arrive à  souligné, changer la police, la taille mais pas à  mettre en gras ou italic. Le Fait d'ajouter "-Bold" au nom de la police fait planter l'application. J'ai vu NSBoldMaskFont mais je sais pas à  quoi ça correspond !!!


    Ci-joint une appli (non encore terminée, je suis sur autre chose) qui te donne une liste exhaustive des attributs graphiques
  • Philippe49Philippe49 Membre
    15:58 modifié #60
    dans 1234360582:

    Merci pour ces précisions. Mais j'ai que des rectangles et lignes (horizontale ou verticale) comme géométrie de base. J'ai pas de diagonale, courbe, rond, etc...

    Mais cela viendra ..

    dans 1234360582:

    La première comment mettre un texte en gras et italic ?
    Actuellement, j'arrive à  souligné, changer la police, la taille mais pas à  mettre en gras ou italic. Le Fait d'ajouter "-Bold" au nom de la police fait planter l'application. J'ai vu NSBoldMaskFont mais je sais pas à  quoi ça correspond !!!


    NSShadow * shadow=[NSShadow new]; <br />	[shadow setShadowBlurRadius:7.0];<br />	[shadow setShadowColor:[NSColor yellowColor]];<br />	[shadow setShadowOffset:NSMakeSize(10.0,-20.0)];<br />	NSDictionary * attr=[NSDictionary dictionaryWithObjectsAndKeys:<br />				[NSColor orangeColor],NSBackgroundColorAttributeName,											 <br />				shadow,NSShadowAttributeName,<br />				[NSFont fontWithName:@&quot;Arial-Black&quot; size:24],NSFontAttributeName,<br />				[NSColor blueColor], NSForegroundColorAttributeName,<br />				[NSColor redColor],NSStrikethroughColorAttributeName,<br />				[NSNumber numberWithFloat:0.8],NSObliquenessAttributeName,<br />				[NSNumber numberWithFloat:1.5],NSKernAttributeName,<br />				[NSNumber numberWithFloat:-2.],NSStrokeWidthAttributeName,<br />				[NSNumber numberWithFloat:2.],NSUnderlineStyleAttributeName,<br />				[NSColor grayColor],NSUnderlineColorAttributeName,											 <br />				nil];<br />	[shadow release];	<br />	NSMutableAttributedString * s=[[NSMutableAttributedString alloc] initWithString:@&quot;COUCOU&quot; attributes:attr];	<br />	self.attributedString=s;<br />	[s release];
    


    dans 1234360582:

    La deuxième questions est : comment faire pour avoir la même chose que le sélecteur de vue de la fenêtre des propriétés de IB (cf pj) ?
    C'est la ToolBarre ou un NSSegmentedButton ?

    Là  je ne comprends pas la question
  • Philippe49Philippe49 Membre
    15:58 modifié #61
    Ah oui, tu demandes pour mettre une NSToolBar à  ton appli. Dans IB tu glisse-déposes un objet de ce type. Tu cliques dessus et tu paramètres les images ajoutées.

    Chaps a posé une question sur ce sujet il y a 2-3 semaines, le débat avait été très précis.
Connectez-vous ou Inscrivez-vous pour répondre.