Ostatnio troszkę się męczyłem z uzyskaniem efektu aplikacji działającej w tle. Pisałem program, który miał działać w tle, a jedyną informacją o jego działaniu miała być ikonka w zasobniku systemowym (of kors z podpiętym menu).
Zamierzony efekt udało się osiągnąć dopiero po zabawie z przezroczystością.
W związku z tym, że było to główne okno, Hide() w ogóle nie dawał się uruchomić w konstruktorze czy po załadowaniu (event Load). W sieci znalazłem próbę rozwiązania (po wypowiedziach sądzę, że działającą), która jednak w przypadku mojego projektu nie działa.
Po przeprowadzeniu wielu prób, doszedłem do tego, że ustawienie właściwości Opacity dla formy na 0% (lub 0.0d) powoduję, że jest ona ukryta przed użytkownikiem. Ukryta, tzn. znika całkowicie (łącznie z utratą focusu) z przestrzeni roboczej. Oczywiście nadal w tle jest aktywna.
Blog studenta dziennego IV roku informatyki na Wydziale Elektrycznym Politechniki Poznańskiej. Zawiera przede wszystkim spostrzeżenia dotyczące ogólnie rozumianego IT.
wtorek, 19 kwietnia 2011
czwartek, 24 marca 2011
Pobieranie adresu IP i nazwy hosta w sieci
Taki krótki szybki wpis po kilku minutach nudy na zajęciach, czyli rzecz o zamianie IP -> nazwa hosta -> IP
string text = "212.77.100.101"; //jeśli chcemy uzyskać nazwę hosta
//string text = "www.wp.pl"; //jeśli chcemy pobrać IP
IPAddress tmp = null;
if (IPAddress.TryParse(text, out tmp))
{
Console.WriteLine(Dns.GetHostEntry(tmp).HostName.ToString()); //pobierz nazwę hosta
}
else
{
Console.WriteLine(Dns.GetHostEntry(text).AddressList[0].ToString()); //pobierz pierwszy adres nazwy hosta
}
sobota, 19 marca 2011
Zmiana zawartości rekordu podczas UPDATEa w Transact-SQL
Nie tak dawno miałem pewne problemy, jak zmienić zawartość pola rekordu w tabeli, podczas jego aktualizacji. Pola, które nie jest aktualizowane.
Chodziło o to, aby w czasie zmiany pola BITowego z wartości 0 na 1, pole typu DateTime, zmieniało swoją zawartość, na datę wykonania tej zmiany.
Pomoc otrzymałem na stackoverflow.com - swoją drogą dziwne, że nie wpadłem na tak oczywiste rozwiązanie:
Rozwiązanie wykorzystuje tabele Inserted i Deleted występujące w T-Sql.
Chodziło o to, aby w czasie zmiany pola BITowego z wartości 0 na 1, pole typu DateTime, zmieniało swoją zawartość, na datę wykonania tej zmiany.
Pomoc otrzymałem na stackoverflow.com - swoją drogą dziwne, że nie wpadłem na tak oczywiste rozwiązanie:
create trigger tr_U_YourTable
on YourTable
for Update
as
begin
if update(true_false)
update yt
set date = getdate()
from Inserted i
inner join Deleted d
on i.ID = d.ID
inner join YourTable yt
on i.ID = yt.ID
where coalesce(i.true_false,0) <> coalesce(d.true_false,0)
end
Autorem rozwiązania jest Joe Stefanelli.Rozwiązanie wykorzystuje tabele Inserted i Deleted występujące w T-Sql.
piątek, 18 marca 2011
Zmiana UUID dysku VirtualBox
Dzisiaj, w celu przygotowania się do zajęć, musiałem postawić 6 razy maszynę wirtualną. Pierwszą próbą była zmiana już wcześniej posiadanego dysku vboxa na współdzielony (shared):
Niestety, podpięcie później tego dysku do 6 maszyn, i uruchomienie go, poskutkowało zburzeniem konsystencji danych na nim (co za tym idzie, linux wywalał się na starcie).
Potrzebna była więc bardziej toporna metoda - skopiowanie dysku. Aby zaoszczędzić miejsce, użyłem obrazu in.vdi, który miał dynamicznie ustawiany rozmiar pliku-obrazu.
Skopiowałem go 6 razy dla każdej maszyny...
Aby ta dość długa, bo około półgodzinna praca procesora i dysku nie poszła na marne, wykorzystałem więc wbudowaną komendę do nadawania obrazom dysków nowych numerów UUID:
Oczywiście podziałało ;)
//najpierw przerobienie obrazu na "stały" rozmiar VBoxManage clonehd in.vdi out.vdi --variant Fixed //potem ustawienie out.vdi w tryb shareable VBoxManage modifyhd out.vdi --type shareable
Niestety, podpięcie później tego dysku do 6 maszyn, i uruchomienie go, poskutkowało zburzeniem konsystencji danych na nim (co za tym idzie, linux wywalał się na starcie).
Potrzebna była więc bardziej toporna metoda - skopiowanie dysku. Aby zaoszczędzić miejsce, użyłem obrazu in.vdi, który miał dynamicznie ustawiany rozmiar pliku-obrazu.
Skopiowałem go 6 razy dla każdej maszyny...
VBoxManage clonehd in.vdi outn.vdipo czym próbując podpiąć kolejną (pierwszą) kopię, zostałem poinformowany, że dysk o takim UUID już jest podpięty do innej maszyny i nie można go dodać.
Aby ta dość długa, bo około półgodzinna praca procesora i dysku nie poszła na marne, wykorzystałem więc wbudowaną komendę do nadawania obrazom dysków nowych numerów UUID:
VBoxManage internalcommands sethduuid outn.vdi
Oczywiście podziałało ;)
sobota, 5 marca 2011
Zmiana kodowania znaków w C#
Ostatnio pracując nad zleconym projektem musiałem zmieniać kodowanie string'a, i otrzymywać zapis bajtowy string'a, który następnie przekazywałem jako parametr metody.
Do zmiany kodowania użyć można Encoder'a któregoś kodowania z kolekcji System.Text. Przykład takiego użycia:
Polecam zapoznać się z kolekcją klas System.Text.Encoding i metodami dostępnymi dla różnych kodowań
Do zmiany kodowania użyć można Encoder'a któregoś kodowania z kolekcji System.Text. Przykład takiego użycia:
System.Text.ASCIIEncoding encoding = new ASCIIEncoding();Kodowanie takie można następnie wykorzystać do otrzymania tablicy bajtowej, będącej reprezentacją zapisu string'a w danym kodowaniu. Dla przykładu powyżej:
byte[] napis_w_ascii = encoding.GetBytes("napiś");Polecam zapoznać się z kolekcją klas System.Text.Encoding i metodami dostępnymi dla różnych kodowań
środa, 23 lutego 2011
Własna dystrybucja Linuxa
Może ten wpis nie wniesie zbyt wiele na tego bloga, jednak chętnie podzielę się z wami tą informacją.
Dla osób chcących stworzyć własną, spersonalizowaną dystrybucję linuxa, Novell udostępnił narzędzie Suse Studio. Za pomocą tego serwisu można bardzo łatwo wykreować własne distro oparte na jednej z lepszych (sam z niej korzystam) dystrybucji openSuse.
Wystarczy po zalogowaniu skorzystać z "kreatora", który bardzo ładnie prowadzi przez poszczególne kroki, pozostawiając jednak użytkownikowi swobodę w modyfikacji składu dystrybucji.
Jak na początek wystarczy ;)
Dla osób chcących stworzyć własną, spersonalizowaną dystrybucję linuxa, Novell udostępnił narzędzie Suse Studio. Za pomocą tego serwisu można bardzo łatwo wykreować własne distro oparte na jednej z lepszych (sam z niej korzystam) dystrybucji openSuse.
Wystarczy po zalogowaniu skorzystać z "kreatora", który bardzo ładnie prowadzi przez poszczególne kroki, pozostawiając jednak użytkownikowi swobodę w modyfikacji składu dystrybucji.
Jak na początek wystarczy ;)
czwartek, 27 stycznia 2011
Sprawdzanie roli użytkownika w SQL Server + C#
W tworzonym przeze mnie projekcie bazodanowym, z wykorzystaniem MS SQL Server 2005 i C#, potrzebowałem sprawdzania, do jakiej grupy użytkowników należy logujący się do bazy danych użytkownik.
Wykorzystując procedurę (serwerową) SQL Servera sp_helpuser z parametrem (nazwą użytkownika) otrzymałem kilka informacji, w tym tą, która mnie interesuje - grupa do której należy użytkownik.
Nazwa grupy do której należy użytkownik zawiera się w polu [GroupName].
Cała metoda, zapisana w C# wygląda tak:
Wykorzystując procedurę (serwerową) SQL Servera sp_helpuser z parametrem (nazwą użytkownika) otrzymałem kilka informacji, w tym tą, która mnie interesuje - grupa do której należy użytkownik.
Nazwa grupy do której należy użytkownik zawiera się w polu [GroupName].
Cała metoda, zapisana w C# wygląda tak:
private void sprawdz_role()
{
SqlDataReader rdr = null;
SqlParameter username = new SqlParameter("@name_in_db", this.user);
SqlCommand cmd = new SqlCommand("sp_helpuser", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(username);
rdr = cmd.ExecuteReader();
while (rdr.Read())
{
this.rola = rdr["GroupName"].ToString();
}
MessageBox.Show("Polaczono jako " + rola);
}
Subskrybuj:
Posty (Atom)