Dans mon outils de partitions (http://www.developpez.net/forums/d14...-fichier-midi/), je cherche à créer un aperçu avant impression.
Chaque page A4, correspond à un TImage.
Je dessine chaque partition dans une bitmap. Puis, j'agrandis le TImage courant de la hauteur de la dernière bitmap, et je dessine celle-ci au bas du TImage.
Ca fonctionne bien, mais vers la cinquième page (environ : c'est aléatoire), lors de la quatrième ou cinquième bitmap, j'ai une erreur sur l'agrandissement du TImage courant.
Je ne comprend pas pourquoi, puisque j'ai pu sans problème agrandir les TImage précédents (et même bien au-delà).Le projet a provoqué une classe d'exception EOutOfResources avec le message 'Espace insuffisant pour traiter cette commande.'
J'ai regardé le gestionnaire de tâches, mais ça grimpe juste de 220 Mo avant de planter. Je suis loin d'avoir utilisé toute la mémoire disponible.
Pour info, la procédure AjouterImage :
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
55
56
57
58
59
60
61 const HAUTEUR_MAX = 4000; var nHauteur, i, nNbPages: Integer; BitmapImpression: TBitmap; Image: TImage; begin ... nHauteur := 0; nNbPages := 1; FormApercuAvantImpression._ListeImages.Clear; FormApercuAvantImpression.AjouterImage; Image := (FormApercuAvantImpression._ListeImages[0] as TImage); Image.Height := 0; // Parcours des onglets. for i:=0 to Pred(PageControl.PageCount) do begin BitmapImpression := TBitmap.Create; try // Génération impression. (PageControl.Pages[i] as TOngletMusique).GenerationImpression(BitmapImpression); // Si hauteur maximum dépassée. if(nHauteur + BitmapImpression.Height) > HAUTEUR_MAX then begin FormApercuAvantImpression.AjouterImage; Image := (FormApercuAvantImpression._ListeImages[FormApercuAvantImpression._ListeImages.Count - 1] as TImage); Image.Height := 0; nHauteur := 0; Inc(nNbPages); end; // Ajout de la partition générée sur l'image. Image.Height := Image.Height + BitmapImpression.Height; Image.Width := BitmapImpression.Width; try Image.Picture.Bitmap.Height := Image.Height; // <<< ERREUR ICI vers le cinquième tour. Image.Picture.Bitmap.Width := Image.Width; // Image.Canvas.Draw(0, nHauteur, BitmapImpression); Image.Picture.Bitmap.Canvas.Draw(0, nHauteur, BitmapImpression); except Break; end; finally BitmapImpression.Free; end; nHauteur := Image.Height; ... end; ... // Aperçu avant impression. FormApercuAvantImpression.ShowModal; ...Qu'est ce que je n'ai pas compris dans l'utilisation du TImage ?
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 procedure TFormApercuAvantImpression.AjouterImage; const MARGE = 10; var Image: TImage; begin Image := TImage.Create(Self); Image.Parent := ScrollBox; Image.Left := 0; if _ListeImages.Count = 0 then Image.Top := 0 else Image.Top := (_ListeImages[_ListeImages.Count - 1] as TImage).Top + (_ListeImages[_ListeImages.Count - 1] as TImage).Height + MARGE; Image.Height := 673; Image.Width := 3500; _ListeImages.Add(Image); ...
![]()
Partager