Hardcoded thoughts… mostly in C# or php

C# i pliki pomocy

Jedno wiem na pewno - nie nawidzę pisać pomocy do aplikacji. Robienie zrzutów ekranowych z działającego programu to jeszcze pół biedy. Ale napisać samą instrukcję obsługi? Najlepiej taką, która jest zrozumiała dla początkujących i tych bardziej rozgarniętych nie obrazi. Ba, i coby po Polsku była. FUJ! Ostatni raz.

Przy okazji jednak mała sztuczka dot. odpalania plików pomocy z C#/VB, tak na przyszłość. Bo nie spodziewałem się, że jeste to tak proste:

C#:
  1. Windows.Forms.Help.ShowHelp(parent, "plik.chm");

:)

Inżynierka.Start();

Inżynierki pisanie czas zacząć ;) 1 i 2

brawa dla tłumaczy MS

Po przyjściu do pracy tradycyjny check-out CVSa oraz commit zmian, które zostały wprowadzone przez weekend. Okazało się że zmiany moje oraz towarzysza niedoli w obecnym projekcie są jakby niekompatybilne. Cóż, teoretycznie merge'owanie nie do końca się udało. Objawy? Dziwny błąd rzucany przez aplikację - "błąd odbicia". Niespecjalnie wiele mi to mówiło, nasuwało jednak pewne rozwiązanie. Odinstalowałem więc polska nakładkę na .neta. Angielski komunikat mówi jednak znacznie więcej - "There was an error reflecting type". I prawie wszystko jasne. Nasuwa się jednak pytanie - jak można było ten komunikat tak kretyńsko zlokalizować? Brawa dla tłumaczy MS.

Nowe właściwości C# 3.0

Oto niektóre nowe cechy C# 3.0:

Chociaż ten artykuł w pierwszej chwili jak żart potraktowałem... Co jednak żartem się nie okazało, jak zobaczyć możemy tu: link

Sama idea LINQ może i coś w sobie ma - link1 & link2

Natomiast ogólny przegląd właściwości C# 3.0 można znaleźć w oficjalnym dokumencie Microsoftu.

Z całości pewnie będzie można skorzystać w nowym Visual Studio.

Wszystko to ładne, fajne i wogóle, jednakże na pierwszy rzut oka to język jakby eweoluował w złą stronę - PHP i Python kojarzą się samoistnie...

sprawdzanie istnienia czcionki w C#

Nurtowało mnie dziś jak w sposób sprawdzić, czy podana czcionka istnieje w systemie. Teoretycznie można by to zrobić iterując po zainstalowanych czcionkach. Jednak w przypadku dość dużej ich ilości rozwiązanie to staje się mocno czasochłonne i całkowicie nie wydajne. Wysłane na grupę dyskusyjną zapytanie przyniosło banalnie proste, acz cholernie skuteczne rozwiązanie:

C#:
  1. using (System.Drawing.Font f = new System.Drawing.Font(name, 12))
  2. {
  3. return f.Name == name;
  4. }
  5. return false;

EMF w C#

Obiekty typu Image w .net posiadają metodę Save(), której to w parametrach można podać tak ścieżkę, jak i format pliku wynikowego. Ciekawie się robi dopiero przy próbie użycia ImageFormat.EMF - teoretycznie wspierany przez .net, jednak już sama dokumentacja MSDN twierdzi, że sorry, ale nie ma lekko. Zapisywanie do EMF nie jest bowiem w C# obsługiwane - przy próbie podania takiego formatu, plik wynikowy przyjmie domyślny format PNG. Istnieje jednak prosty sposób na operowanie na obiektach Graphics i wyrzucanie efektów pracy do pliku EMF. Jak? Wystarczy nie używać metody Save(), która zawodzi. Poniżej obejście problemu.

C#:
  1. Graphics graphics = Graphics.FromImage(new Bitmap(1, 1, PixelFormat.Format32bppArgb));
  2. IntPtr hdc = tempGraphics.GetHdc();
  3. Metafile mfile = new Metafile("obraz.emf", hdc);
  4. tempGraphics.ReleaseHdc();
  5. graphics.Dispose();
  6. graphics = Graphics.FromImage(mfile);

Od tego momentu rysowanie na obiekcie graphics powoduje automatyczne odwzorowywanie zmian w pliku emf. Ważne by obiekt mfile (typu Metafile) był utworzony z podaniem uchwytu - tylko wtedy toto poprawnie działa.

Wykresy na szybko w C#

Jako, że wczoraj wieczorem postanowiłem napisać małą aplikację, która w założeniu miała wizualizować statystykę opowiedzi w ankiecie, pojawił sę mały problem - jak? Samemu rysować wykresu mi się na prawdę nie chciało, z resztą oczywiście czasu nie było. Korzystanie z bindingów Office'a? E-e, bez sensu. Rozgryzanie Crystal Reports? Zbyt czasochłonne. Google.com? Czemu nie. Dość szybko pokierowało mnie do biblioteki ZedGraph. I powiem krótko - rewelacja. Biblioteka na prawdę dużo potrafi, jest malutka, no i, co najlepsze, puszczona na zasadach LGPL. Zatem wzorem z allegro - Polecam!!! ;)

Delegacje w C#

Zdziwiłem się ostatnio trochę, bo jakiekolwiek materiały o delegacjach ("typie" delegate) w C# albo ciężko znaleźć, albo są szczątkowe. W książkach raczej się tego tematu nie porusza - a jeśli już, to kompletnie niezrozumiale, wszelkie tutoriale w sieci o delegate raczej nie wspominają. A, jak się okazuje, delegacje mogą się okazać cudowną zabawką.
Czym zatem są delegacje? (more...)

C# links ver.01

Miałem dziś popracować trochę, ponadrabiać zaległości, w spokoju dodać kilka ficzerów do 2-3 projektów. Oczywiście praca nad żadnym z nich nie wiązała się ze specjalną przyjemnością, więc "niechcący" zaklikało mi się tu i ówdzie i nic nie zrobiło. Z tego mojego klikania wyszło jednak trochę dobrego. Z różnych wyklikanych dzis mniej-lub-bardziej ciekawych linków na bliższą uwagę zasługują przede wszystkim te:

  • #develop 2 (beta 1) - wreszcie publicznie dostępny. Z tego publicznie dostępnego OSowego IDE zdecydowanie może coś będzie. I chyba warto poświęcić trochę więcej czasu. Chociaż do VC# Express oczywiście się nie umywa. Ale jeśli ktoś bardzo MS nie lubi, polecam.
  • pinvoke - bardzo fajne repozytorium/wiki z bazą danych wywołań win32 lub innych nie-.netowych API i ich translacjami na postać użyteczną przy pisaniu C#. Dla mnie rewelacja. Zastanawiam się tylko, czemu to: [link: beep] mi nie chce działać... A przy korzystaniu z pinvoke.net bardzo przydatnym może okazać się małe rozszerzenie do VS2003: [link: Add-In]

VS2005 & VC# 2005 - marudzenie, Reflector

Od pewnego czasu na a.p.c.l.csharp wyraźnie daje się zauważyć tendencja plucia i klnięcia na VS2005 i, przede wszystkim, VC# 2005. Bo niby to to wolne, niby niefajne, itd itp. Ale i tak wszyscy korzystają, więc na cholerę to marudzenie? Chyba tylko dla samego trollowania grupy. Swoją drogą ja takich problemów u siebie nie zauważyłem - zarówno VS jak i VC# działają szybko i stabilnie, nie mam więc na co narzekać. Zresztą - sam komfort pracy w środowisku znacznie się zwiększył - polecam przetestowanie choćby po to, by przekonać się, jak wygląda współczesne środowisko RAD. Moim zdaniem bomba.

Mimo, że wiedziałem od dawna o istnieniu takiego narzędzia, jakoś nigdy skutecznie go nie szukałem. Po prostu wątpiłem w jego potęgę. Ostatnio jednak, przy okazji grupy .net na uczelni, temat został ponownie poruszony. Zaklikałem więc na googla, znalazłem zabawkę i ściągnąłem. I zaraz po uruchomieniu i przetestowaniu przyszły mi do głowy dwie myśli: "wow" i "o-o". Wow - bo zabawka jest świetna - można przekonwertować każdą aplikację napisaną w .net (1,1.1,2.0) ponownie na kod źródłowy, przeglądać biblioteki, ich klasy, zależności itd. Jest jednak druga strona medalu - jak w tym momencie pisać komercyjne aplikacje, gdy każdy może je w tym momencie rozłożyć na czynniki pierwsze i samemu skompilować? No nie fajnie. Zwłaszcza, że obfuscatory do tanich narzędzi nie należą i raczej sobie na takowe nie mogę obecnie pozwolić. Jednak wiele firm sobie jakoś z tym radzi, pozostaje więc tylko dowiedzieć się "jak"!

Next Page »