Včera večer než jsem šel spát jsem narazil na zajímavý problém – měl jsem tento kód(nijak jsem ho neupravoval, je z knihy Mistrovství ve WPF):
//----------------------------------------------------
// PrintaBunchaButtons.cs (c) 2006 by Charles Petzold
//----------------------------------------------------
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace Petzold.PrintaBunchaButtons
{
public class PrintaBunchaButtons : Window
{
[STAThread]
public static void Main()
{
Application app = new Application();
app.Run(new PrintaBunchaButtons());
}
public PrintaBunchaButtons()
{
Title = "Tisk spousty tlacitek";
SizeToContent = SizeToContent.WidthAndHeight;
ResizeMode = ResizeMode.CanMinimize;
// Vytvori tlacitko 'Tisk'.
Button btn = new Button();
btn.FontSize = 24;
btn.Content = "Tisk ...";
btn.Padding = new Thickness(12);
btn.Margin = new Thickness(96);
btn.Click += PrintOnClick;
Content = btn;
}
void PrintOnClick(object sender, RoutedEventArgs args)
{
PrintDialog dlg = new PrintDialog();
if ((bool)dlg.ShowDialog().GetValueOrDefault())
{
// Vytvori panel Grid.
Grid grid = new Grid();
// Definuje pet radku a sloupcu s automatickou velikosti.
for (int i = 0; i < 5; i++)
{
ColumnDefinition coldef = new ColumnDefinition();
coldef.Width = GridLength.Auto;
grid.ColumnDefinitions.Add(coldef);
RowDefinition rowdef = new RowDefinition();
rowdef.Height = GridLength.Auto;
grid.RowDefinitions.Add(rowdef);
}
// Nastavi pro panel Grid gradientni stetec.
grid.Background =
new LinearGradientBrush(Colors.Gray, Colors.White,
new Point(0, 0), new Point(1, 1));
// Kazdy program potrebuje trochu nahodnosti.
Random rand = new Random();
// Umisti na panel Grid 25 tlacitek.
for (int i = 0; i < 25; i++)
{
Button btn = new Button();
btn.FontSize = 12 + rand.Next(8);
btn.Content = "Tlacitko c. " + (i + 1);
btn.HorizontalAlignment = HorizontalAlignment.Center;
btn.VerticalAlignment = VerticalAlignment.Center;
btn.Margin = new Thickness(6);
grid.Children.Add(btn);
Grid.SetRow(btn, i % 5);
Grid.SetColumn(btn, i / 5);
}
// Nastavi velikost panelu Grid.
grid.Measure(new Size(Double.PositiveInfinity,
Double.PositiveInfinity));
Size sizeGrid = grid.DesiredSize;
// Urci bod pro vystredeni panelu Grid na strance.
Point ptGrid =
new Point((dlg.PrintableAreaWidth - sizeGrid.Width) / 2,
(dlg.PrintableAreaHeight - sizeGrid.Height) / 2);
// Rozlozeni je hotovo.
grid.Arrange(new Rect(ptGrid, sizeGrid));
// Nyni se vytiskne.
dlg.PrintVisual(grid, Title);
}
}
}
}
Problém byl tento, spustil jsem program, dal tisk a vyjela mi jen prázdná stránka. Šel jsem tedy na mamčin PC s Windows Vista v VC# 2010 a spustil program tam. Stránka už nevyjela z tiskárny prázdná, ale potištěná tak jak by měla být(vlevo je výstup z mamčiného PC, vpravo z mého):
Tímto jsem zjistil že něco je v mém PC, resp. Windows. Prvně jsem chtěl nainstalovat Visual Studio Express 2013 Preview for Windows Desktop(dále jen “Preview”) ale chvilku po instalaci jsem se rozhodl, že zkusím raději to v čistém Windowsu. Za 1) byl tuto noc velmi pomalý net tady a za 2) v mém účtu trval úklid instalace Preview celou věčnost. Měl jsem jednu 120GB partition, na které bylo pár dat, tak jsem je přesunul jinde a tuto partiton rozdělil na 3x40GB.
Už jsem jednou přišel o celou partiton, možná proto že na ní bylo mnoho souborů, tak jsem se rozhodl, že na zdrojové kódy budu mít jiné partition. Zkopíroval jsem si do PC obsah instalačky W7 abych si ověřil zda to není poškrábané – nebylo. Tak jsem nabootoval do DVD ale W7 jsem si stejně nenainstaloval, protože jsem měl dynamický svazek. Ten disk jsem rozdělil pomocí toho nástroje který je ve Windows 8 a nabízel mi pouze “Simple volume”, v discích se moc neorientuji a nevím co to je dynamický svazek.
Tak jsem to vzdal a chtěl jsem přeinstalovat .NET FW 4.5. Ale to taky nešlo, z důvodu že .net 4.5 je již součástí Windows 8. Po tomto zjištění jsem ten PC vypl a šel spát. Ráno mě napadlo že možná to nebude tak pomalé když si založím nový účet. Tak jsem to tak taky udělal, a skutečně, instalace trvala asi jen 45minut. Na tom dřívějším účtu by trvala možná i 2h. Otevřel jsem ten projekt(potěšilo mě že VS2012 i 2013 mají stejné formáty projektů a řešení, neboť to nechtělo žádnou konverzi), zkompiloval, spustil a dal tisk.
Tiskárna se ale ani nehnula. Nepodařilo se mi nic vytisknout ani z notepadu, zvláštní ale je že zkušební stránka se mi vytiskla normálně. Odhlásil jsem se z tohoto účtu a šel na ten původní. Zde jsem zkusil tisk ve Preview, ale bylo to stejné jako ve verzi 2012 – projela jen prázdná stránka. Tak já už fakt nevím co s tím. Ty přechozí 2 programy na tisk v této knížce mi fungovali, o to to je právě všechno ještě tajemnější.
Právě na tuto kapitolu o tisku jsem se strašně moc těšil, protože jsem ještě nikdy programátorsky nic netiskl a teď toto :/.
PS: Teď jsem zkusil další program a ani ten nedopadl nijak úžasně na mém PC, srovnejte sami(nahoře je špatný výstup z mého PC, dole správný z mamčiného):
Myslím že už to nemá cenu zkoušet dál to opravit, pouze si ty programy spustím a vytisknu co mají(a to už jsem udělal, všechno vytisklo špatně), ale rád bych se na to podíval až vyjde Windows 8.1, pokud budou i nějaké úpravy v .NETu – nejlépe nová verze(klidně i minor). Nadpis je trochu zavádějící, protože všechny tisknutelné prvky jsou typu Visual – a to i ty jednoduché elipsy, které mi ještě vytisknout šli.

