MaciejZbrzezny
Reputacja
770
Głosów ogółem

- 46

- 2
- Prawdziwe imię
- Maciej
- Członek od
- 7 miesięcy, 3 tygodnie
- Ostatnio widziany
- 2 miesiące, 1 tydzień temu
- Witryna
- http://maciej-p...
- Miejscowość
- Polska
- Wiek
- 30
O mnie
Tworzę oprogramowanie wykorzystujące platformę .NET(głównie C#) i OPC. Zapraszam do odwiedzenia mojego bloga http://maciej-progtech.blogspot.com/.
Pytania: 14
-
2010-01-18 00:53:35
Jaki system "continues integration" dla projektu w .NET?
Jaki wybrać system typu "continues integration" dla projektu w .NET? Chodzi mi o zapewnienie automatycznych buildów, t
-
2010-02-02 23:19:47
Jak odczytać informacje o CPU (w C#)?
Witam, Potrzebowałbym odczytać informacje na temat procesora zainstalowanego w komputerze: ilość rdzeni typ częstotliw
-
2010-02-16 12:37:14
Jak wygenerować XPS z C#?
Witam, w jaki sposób można wygenerować plik w formacie XPS (Microsoftowy odpowiednik PDF) z poziomu kodu w C#? Trzeba m
-
2010-02-02 15:33:36
Jak z linii poleceń zrobić build projektu typu setup w...
Witam, W Visual Studio (np. 2008) jest możliwość utworzenia projektu typu "setup" (czyli stworzenie instalki). Chciałby
-
2010-02-02 20:50:58
Jak zautomatyzować przekazywanie inwormacji z bloga do...
Witam, Jak zautomatyzować przekazywanie informacji z bloga do Twitter'a? Chodzi mi o sytuacje, kiedy mam bloga na plat
-
2010-02-03 15:29:07
Jak precyzyjnie zmierzyć czas z poziomu .NET (C#)?
Witam, Potrzebuję jak najbardziej precyzyjnie (z rozdzielczością mikrosekund) zmierzyć czas w systemie Windows. Potrzeb
-
2010-02-14 17:09:07
Detekcja x86/x64 na platformie .NET?
Aplikacja oparta o .NET 3.5 jest kompilowana najczęściej na platformę neutralną (wszystko jedno czy jest to x86, czy x64
-
2010-02-05 01:13:35
Ile trwa Sleep(1ms)?
Witam, Ile trwa "System.Threading.Thread.Sleep(1);"? Ostatnio przeprowadziłem test w którym chciałem sprawdzić możliwo
-
2010-01-28 22:45:33
C#: zmiana wartości atrybutu klasy, funkcji, właściwości...
Jak zmienić (w c#, .NET) wartość atrybutu klasy, funkcji, właściwości podczas działania aplikacji z poziomu kodu program
-
2010-01-26 09:17:34
Jak z pliku Excel do Oracle?
Witam, Jak w prosty sposób przenieść zawartość pliku Excel do bazy danych Oracle? Załóżmy że zawartość pliku Excel je
Odpowiedzi: 44
-
2010-02-27 09:25:25 C# - bazy danych
Cześć,
Zajrzyj tutaj: http://www.microsoft.com/poland/developer/net/programowanie/dostepdobaz.mspx (są tutaj podstawy i jakieś proste przykłady)
Ogólnie w porównaniu do PHP, .NET (i c#) daje duuużo wieksze możliwości, począwszy od możliwości wykonywania kwerend i ręcznego analizowania wyniku (jak w PHP). Jest też możliwość wykorzystania DataSet'ów, które mogą mieć adaptery do bazy danych (nie jest konieczna nawet znać SQL), przyjrzyj się technologi o nazwie ADO.NET, ostatecznie w skomplikowanych przypadkach (np. gdy nasze oporgramowanie ma obsługiwać wiele baz danych) można wykorzystać jakiś ORM. W analizowaniu danych pomaga jeszcze Linq(Language Integrated Query).
pzdr,
Maciek
-
2010-02-02 18:53:25 View State w ASP.NET
Witam,
w ASP.NET jest automat do szyfrowania ViewState
trzeba w web.config ustawić :
<configuration> <system.web> <machineKey validation="3DES" /> </system.web> </configuration>a na stronie: <%@Page ViewStateEncryptionMode="Always" %>
więcej tutaj: http://msdn.microsoft.com/en-us/library/aa479501.aspx
Pozdrawiam,
Maciek
-
2010-01-29 08:21:40 1 program 2 języki
Witam,
Według mnie jest co najmniej kilka sposobow:
- można np. napisać biblioteke (DLL) w C a pózniej wykorzystać Platform Invocation Services by wykonywać funkcje z poziomu C#
- można napisać DLL w C i zarejestrować jako obiekt COM i dostawać się z C# przez COM, przykład tutaj;
- można napisać aplikacje typu klient server i np. server w C , a klient w C#
- inne możliwości
Pozdrawiam, Maciek
-
2010-01-27 14:21:48 Publikowanie projektu na serwerze produkcyjnym
Witam,
Według mnie powinieneś wspomóc się następującymi elementami:
- Wykorzystanie barches i tagów w repozytorium, w pewnym uproszczeniu może to być realizowane następująco: podstawowy kod trzymamy w katalogu trunk (katalog główny) i w pewnych wybranych miejscach robimy na jego podstawie tag (czyli katalog w repozytorium z kopią kodu którą chcemy uważać za pewną wersję) tagi można robić przy pomocy prostego "svn copy". Oczywiście to pewne uproszczenie w przypadku bardziej skomplikowanych projektów może zainstnieć potrzeba tworzenia dodatkowych odgałęzień (branch) w celu pracy nad pewną funkcjonalnościa, która docelowo powinna wrócić do trunk'a.
- Przydałoby się też oprogramowanie do śledzenia problemów w oprogramowaniu i zarządzania jego wersjami (np. BugNet lub Mantis), tam definiujemy różne wersje, przypisujemy zadania. W efekcie mamy kontrolę co zostało zrobione w danej wersji. Subversion można też zintegrować z takim oporgramowaniem.
- Kolejnym krokiem może jeszcze być automatyczne wrzucanie kodu serwisu na serwer po stworzniu taga (czyli działającej kompletnej wersji), można to zrobić jako tzw. "post commit hook" który jest dostępny w subversion - czyli skrypt który wykona się po wykonaniu commit. Oczywiście ma to sens tylko w przypadku gdy nie potrzeba kodu dodatkowo buildować (np. w ASP.NET trzeba), w takim przypadku trzeba jeszcze wykorzystać system typu "continues integration"
Mam nadzieję że to trochę pomogło.
Pozdrawiam,
Maciek
-
2010-02-02 22:40:42 Czy warto przesiadać się na 7 ???
Ja jak najbardziej polecam. testuję Win 7 od kiedy stała się dostępna publicznie wersja RC i mam jak najlepsze wrażenia. Interfejs nowego systemu (zwłaszcza superbar czy gesty przy przeciąganiu okien) są na prawdę wygodne i kiedy wracam do WinXP na innym komputerze to już mi pewne ograniczenia przeszkadzają. Oczywiście są też pewne gorsze strony, komputer powinien być wyposażony w przynajmniej 2 GB ramu, aby pracowało się wygodniej, podsystem graficzny jest pod Win 7 bardziej obciążony (nawet przy wyłączonym areo glass), co widać przy oglądaniu materiałów video. Jeżeli chodzi o inne sprawy to kwestia przyzwyczajenia...
Pozdrawiam,
Maciek
-
2010-02-14 18:50:38 Tworzenie eventów dla obiektu GDI
Witam,
Można to zrobić poprzez odziedziczenie po kontrolce (której nadamy kształt taki jak chcemy), czyli np. na głównej formie (oknie) dodajemy obiekty klasy EllipseShape:
EllipseShape ellipseA = new EllipseShape(); ellipseA.Width = ellipseA.Height = 100; ellipseA.Top = ellipseA.Left = 30; ellipseA.BackColor = Color.Red; this.Controls.Add(ellipseA);dodajemy eventy:
ellipseA.MouseDown += new MouseEventHandler(Ellipse_MouseDown); ellipseA.MouseUp += new MouseEventHandler(Ellipse_MouseUp); ellipseA.MouseMove += new MouseEventHandler(Ellipse_MouseMove);a klasa ElipseShape moze miec nastepijacy wyglad:
public class EllipseShape : System.Windows.Forms.Control { private GraphicsPath path = null; private void RefreshPath() {.
path = new GraphicsPath(); path.AddEllipse(this.ClientRectangle); this.Region = new Region(path); } protected override void OnResize(System.EventArgs e) { base.OnResize(e); RefreshPath(); this.Invalidate(); } protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) { base.OnPaint(e); if (path != null) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; e.Graphics.FillPath(new SolidBrush(this.BackColor), path); e.Graphics.DrawPath(new Pen(this.ForeColor, 4), path); } } }(Przykład zaczerpnięty z ksiązki: "C# Księga przykładów" , wydawnictwa Microsoft Press).
W ten sposób można przechwytywać i obsługiwać wszystkie zdarzenia klasy Control.
Pozdrawiam,
Maciek
http://maciej-progtech.blogspot.com/
UPDATE (po pytaniach w komentarzu):
Oczywiście override można usunąć, ale wtedy trzeba jawnie dodać handler odpowiedniego zdarzenia, np. :
public EllipseShape() { this.Resize += new EventHandler(EllipseShape_Resize); } void EllipseShape_Resize(object sender, EventArgs e) { RefreshPath(); this.Invalidate(); }Zdarzenia Resize i Paint są zdarzeniami kontrolki, po której dziedziczymy i wywoływane są:
-
2010-01-25 18:18:26 Wzorce projektowe- od czego zacząć
ja przeczytałem "C#. Wzorce projektowe" bardzo dobra książka, zwłaszcza jeśli ktoś programuje w C# (więcej na ten temat)
-
2010-01-27 23:39:32 C#: zmiana wartości atrybutu klasy, funkcji, właściwości podczas
Z rozważań wynika, że rację miał Tomaszs, ale Macpak znalazł na prawdę coś fajnego. Otóż Wartości atrybutów nie da się zmienić, ale za to można stworzyć klasę typu proxy, która będzie zwracała trochę odmienionych informacji odnośnie klasy którą przesłania. Wykorzystując ICustomTypeDescriptor można stworzyć tak klasę proxy, która będzie zwracała inne wartości atrybutów w zależności od jej ustawienia.
zobaczmy przykład mamy tą klasę którą chcemy zmieniać:
public class User { [BrowsableAttribute(true)] public string Name { get; set; } [BrowsableAttribute(false)] public string SecondName { get; set; } }będziemy zmieniać ją przez property grid, ale jako element wybrany w property grid możemy użyć klasy proxy o której mówiłem, mamy więc:
public partial class Form1 : Form { User usr; AttributesProxyTypeDescriptor proxy; public Form1() { InitializeComponent(); usr = new User(); proxy = new AttributesProxyTypeDescriptor(usr); propertyGrid1.SelectedObject = proxy; } private void checkBox1_CheckedChanged(object sender, EventArgs e) { proxy.BrowsableAttributeAlwaysTrue = checkBox1.Checked; propertyGrid1.Refresh(); } }natomiast klasa proxy implementuje interfejs ICustomTypeDescriptor :
public class AttributesProxyTypeDescriptor : ICustomTypeDescriptor { private object _target; public bool BrowsableAttributeAlwaysTrue { get; set; } public AttributesProxyTypeDescriptor(object target) { if (target == null) throw new ArgumentNullException("target"); _target = target; BrowsableAttributeAlwaysTrue = false; } object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd) { return _target; } AttributeCollection ICustomTypeDescriptor.GetAttributes() { return TypeDescriptor.GetAttributes(_target, true); } string ICustomTypeDescriptor.GetClassName() { return TypeDescriptor.GetClassName(_target, true); } string ICustomTypeDescriptor.GetComponentName() { return TypeDescriptor.GetComponentName(_target, true); } TypeConverter ICustomTypeDescriptor.GetConverter() { return TypeDescriptor.GetConverter(_target, true); } EventDescriptor ICustomTypeDescriptor.GetDefaultEvent() { return TypeDescriptor.GetDefaultEvent(_target, true); } PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty() { return TypeDescriptor.GetDefaultProperty(_target, true); } object ICustomTypeDescriptor.GetEditor(Type editorBaseType) { return TypeDescriptor.GetEditor(_target, editorBaseType, true); } EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes) { return TypeDescriptor.GetEvents(_target, attributes, true); } EventDescriptorCollection ICustomTypeDescriptor.GetEvents() { return TypeDescriptor.GetEvents(_target, true); } PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties() { return ((ICustomTypeDescriptor)this).GetProperties(null); } PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes) { PropertyDescriptorCollection props_tobereturned = new PropertyDescriptorCollection(null); if (BrowsableAttributeAlwaysTrue) { foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(_target, true)) { props_tobereturned.Add(new MyPropertyDescriptor(prop, attributes)); } } else { props_tobereturned = TypeDescriptor.GetProperties(_target, attributes, true); } return props_tobereturned; } }gdzie MyProperyDescriptor to:
public class MyPropertyDescriptor : PropertyDescriptor { private PropertyDescriptor _field; public MyPropertyDescriptor(PropertyDescriptor field, Attribute[] attributes) : base(field.Name, attributes) { _field = field; } public override bool Equals(object obj) { MyPropertyDescriptor other = obj as MyPropertyDescriptor; return other != null && other._field.Equals(_field); } public override int GetHashCode() { return _field.GetHashCode(); } public override bool IsReadOnly { get { return _field.IsReadOnly; } } public override void ResetValue(object component) { _field.ResetValue(component); } public override bool CanResetValue(object component) { return _field.CanResetValue(component); } public override bool ShouldSerializeValue(object component) { return _field.ShouldSerializeValue(component); } public override Type ComponentType { get { return _field.ComponentType; } } public override Type PropertyType { get { return _field.PropertyType; } } public override object GetValue(object component) { return _field.GetValue(component); } public override void SetValue(object component, object value) { _field.SetValue(component, value); OnValueChanged(component, EventArgs.Empty); } }w ten sposób wykorzystując jakiś zewnętrzny pstyczek (np. checkbox) możemy pokazywać lub nie pole "second name".
Dodatkowo na moim blogu zamieściłem przykład i kod: http://maciej-progtech.blogspot.com/2010/01/c-zmiana-wartosci-atrybutu-podczas.html.
-
2010-01-28 22:02:02 C# otwieranie linków w przeglądarce
witam,
Według mnie nilphilus ma racje, trzeba uruchomić w osobnym wątku, by nie trzeba było czekać na uruchomienie przeglądarki. Ja miałem kiedyś podobny problem i rozwiązałem go następująco:
RunMethodAsynchronously runasync = new RunMethodAsynchronously( delegate( object[] o ) { System.Diagnostics.Process.Start("http://alleprawda.pl/"); } ); runasync.RunAsync();gdzie klasa RunMethodAsynchronously ma postać:
public class RunMethodAsynchronously { public delegate void AsyncOperation(object []parameters); private AsyncOperation m_asyncoperation_internal; private AsyncOperation m_asyncoperation; private void MyAsyncOperation( object[] parameters ) { try { m_asyncoperation_internal( parameters ); } catch { //do nothing } } private void MyAsyncCallback(IAsyncResult ar) { m_asyncoperation.EndInvoke( ar ); } public RunMethodAsynchronously( AsyncOperation asyncoper ) { m_asyncoperation_internal = asyncoper; m_asyncoperation = new AsyncOperation( MyAsyncOperation ); } public void RunAsync( object [] parameters ) { AsyncCallback callBack = new AsyncCallback( MyAsyncCallback ); m_asyncoperation.BeginInvoke( parameters,callBack,null ); } public void RunAsync() { RunAsync( null ); } } -
2010-01-29 18:44:28 Procent udziałów na rynku przeglądarek
cześć,
statystyki z ostatniego roku dla :
http://maciej-progtech.blogspot.com/
- Firefox 59,84%
- Internet Explorer 16,48%
- Opera 15,36%
- Chrome 6,94%
- Mozilla 0,56%
- Safari 0,51%
- SeaMonkey 0,07%
- (not set) 0,07%
- Opera Mini 0,07%
- Googlebot 0,04%










3
2
80