|
P/Invoke allow you To use use unmanaged dll functions in your C# application P/Invoke was originally intended to provide access to the Windows API but you can use it to call function from any dll you need to use DLLImport attribute
and declare the method as a static extern
For example If you want to use FindWindow Function from user32.dll you will write somthing like
[DllImport("user32.dll", SetLastError = true)]<br />
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
Look at this article for more info
Calling Win32 DLLs in C# with P/Invoke[^]
MCAD
-- modified at 16:15 Sunday 4th September, 2005
|
|
|
|
|
hey all
i have a string '<cc1:CustomControl id="test" att1="some crap" att2="123"></cc1:CustomControl>'
this is valid xml so is it possible to put this into a node and get a collection of attributes?
|
|
|
|
|
Yes.
Just create an XmlDocument object and load the string into it with the LoadXml method. The node will be the root element, so you can get it using the DocumentElement property.
---
b { font-weight: normal; }
|
|
|
|
|
Dear All,
How can I marshall the following attributes in the following structure;
typedef struct IplImage
{.
.
struct _IplROI * roi;
void * imageid;
}
where _IplROI is itself a structure?
Another question is that the function unmanaged prototype is ;
IplImage * cvvLoadImage(const char * filename);
do I have to marshall the return type after defining the IplImage or I just write "IplImage *" after marshalling the structure??
Please Help,
Thanks and Best Regards,
E.A.
|
|
|
|
|
my problem this time is so complecated i ask God to can explain it
i need to make something like instance message betwwen two forms
i need to do the follwing
1- allow user in the first client to send message and save it in xmlfile then the other form or client recive it (something like the instance message in yahoo)
may i need to know more about threading so if there is any one can give mne link talk by simple way in threading i need it
|
|
|
|
|
Yahoo Messenger and the other instant messengers use a client-server model: basically, Yahoo has a server application running on some server machine that listens for connections from clients (the people running the instant messenger), then the server dispatches each message sent by a client to another client.
It's pretty easy to do this with .NET Remoting. .NET remoting allows you to call functions on other listening computers; what you need to do is search for .NET remoting. There are several .NET Remoting tutorials on CodeProject as well as on MSDN, including several "instant messenger"-like applications.
Tech, life, family, faith: Give me a visit.
I'm currently blogging about: Cops & Robbers
Judah Himango
|
|
|
|
|
hi all..
right now i'm working on the new project server monitor.
first brief intro.
i want to develop the application that will fetch the screenshot of the particular client connected with the server without disturbing he/she.
i have completed the get screenshot part of my project and how to store it as file.....
now main problem
how to know how many clients available and how to connect and how to receive the screenshot.....??
if anyone the please help me.....
|
|
|
|
|
You're going to need to write a windows service to deploy to the client to get the screenshot for you and send it your application. You can't just call up a Windows machine and grab the current screen. There's no built in service to do that (unless your clients are running XP that is,) so you have to write it yourself.
RageInTheMachine9532
"...a pungent, ghastly, stinky piece of cheese!" -- The Roaming Gnome
|
|
|
|
|
Well!
i m having some trouble in writing this piece of code in c#. i m having some type conversion erros pls help me
specially the loop portion
Dim ids As Object
ScannerManager.EnumDeviceIDs(ids)
List.Items.Clear()
Dim i As Integer
For i = LBound(ids) To UBound(ids)
List.Items.Add(ids(i))
Next i
// signature and prototype information
'EnumDeviceIDs(ref Object)
returns array of strings that contain info
'public virtual new void EnumDeviceIDs ( System.Object IDs )
I M new in .net p
|
|
|
|
|
|
Hi
Its not clear from the code exactly what the EnumDeviceIDS method creates ids as, but i'll assume it is a .NET string array. In which case the code should be something like:
object ids = null;
ScannerManager.EnumDeviceIDs(ref ids);
string[] arrids = (string[])ids;
List.Items.Clear();
foreach(string id in arrids)
{
List.Items.Add(str);
}
Hope this helps
Philip
-- modified at 15:18 Saturday 3rd September, 2005
|
|
|
|
|
Problem is as follows:
got 100 PictureBoxes that are formed into 10x10 matrix. Their name is 'digit??', where '?' represents a single digit (digit00, digit01, ..., digit99). I would like to swiftly put all these PictureBoxes into one array. I tried:
PictureBox[,] References = new PictureBox[10,10];
...
for(int i=0;i<9;i++)
for(int j=0;j<9;j++)
{
this.References[i,j] = ((PictureBox)(String.Format("this.digits{0}{1}",i,j)));
}
which is of course not legal, as strings cannot be converted into PictureBoxes. I know it may be done using the Reflection Emit, but I`m looking for another way. Any hints?
-- modified at 13:08 Saturday 3rd September, 2005
|
|
|
|
|
It doesn't really make sense to me to create 100 picture boxes and then set an array to reference these 100 picture boxes. Why don't you use an array object to create the 100 picture boxes in the first place? Since you have a 10x10 matrix of them, there will be a mathematical formula for creating the pictureboxes. Just use a for loop and create all 100 picture boxes, so that they will be easily accessible. If the problem is that each box contains a specific image file, you should label all the images with the same scheme..ie: img00.bmp, img01.bmp...etc. I've used this approach when designing little quick games.
|
|
|
|
|
Is there anyway to have a program notified of time change events in Windows? For example if I wanted to be notifed when the hour changed...is this possible?
Thanks
- Aaron
|
|
|
|
|
There's a timer control. You give it a number of milliseconds, and when that time interval has passed it throws an event that you can receive. To receive a message every hour just set the interval to 3600000 milliseconds.
|
|
|
|
|
hi,
i have a problem when i send a HttpRequest!
first i send a request to get the session_id than a login request and after that a other request....
after that i begin with the request for session_id and than the problem arise when i send the login request...
i get a timeout error when i call request.GetRequestStream (); by why!?!
cu
<br />
request for session id:<br />
-----------------------<br />
HttpWebRequest get_request = (HttpWebRequest)WebRequest.Create("https://www.myzone.at/webkeeper/Controller");<br />
get_request.CookieContainer = new CookieContainer();<br />
<br />
HttpWebResponse get_response = (HttpWebResponse) get_request.GetResponse();<br />
get_response.Cookies = get_request.CookieContainer.GetCookies(get_request.RequestUri);<br />
<br />
String sessionid = "Cookie: ";<br />
sessionid += get_response.Cookies[0].ToString();<br />
<br />
login request:<br />
--------------<br />
HttpRequestResponse login_request = new HttpRequestResponse("https://www.myzone.at/webkeeper/Controller", "POST", "action=login&login=Anmelden&brand=myzone&username=xxxxxx&password=xxxxxxb&x=83&y=13");<br />
login_request.SESSION_ID = sessionid;<br />
login_request.SendRequest();<br />
<br />
<br />
<br />
sendrequest method:<br />
-----------------------------------------<br />
public string SendRequest()<br />
{<br />
string responseFromServer="";<br />
<br />
try<br />
{<br />
if((RequestMethod.ToUpper() != "GET") && (RequestMethod.ToUpper() != "POST"))<br />
throw new WebException(RequestMethod+ " is not a valid method. Use GET or POST.");<br />
<br />
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(URL);<br />
request.Method = RequestMethod;<br />
request.Headers.Add(SessionId);<br />
<br />
if(RequestMethod.ToUpper()=="POST") <br />
{<br />
byte[] byteArray = Encoding.UTF8.GetBytes (PostData);<br />
<br />
request.ContentType = "application/x-www-form-urlencoded";<br />
<br />
request.ContentLength = byteArray.Length;<br />
<br />
Stream requestStream = request.GetRequestStream (); <------------ here arise the timeout when i send the 2nd login request...<br />
<br />
requestStream.Write (byteArray, 0, byteArray.Length);<br />
requestStream.Close ();<br />
}<br />
<br />
HttpWebResponse response = (HttpWebResponse) request.GetResponse();<br />
Stream dataStream = response.GetResponseStream ();<br />
StreamReader reader = new StreamReader (dataStream);<br />
responseFromServer = "HTTP/" + response.ProtocolVersion + " " + response.StatusDescription + " ";<br />
responseFromServer += response.Headers.ToString();<br />
<br />
reader.Close ();<br />
dataStream.Close ();<br />
response.Close ();<br />
}<br />
<br />
catch (WebException e)<br />
{<br />
throw CatchHttpExceptions(responseFromServer = e.Message);<br />
}<br />
catch (Exception e)<br />
{<br />
throw new Exception(responseFromServer = e.Message);<br />
}<br />
<br />
return responseFromServer;<br />
}<br />
|
|
|
|
|
I think the problem is that you don't close your original response. It's been a while since I used these objects, but I seem to remember getting that problem if I didn't properly clean up after every request.
I can imagine the sinking feeling one would have after ordering my book,
only to find a laughably ridiculous theory with demented logic once the book arrives - Mark McCutcheon
|
|
|
|
|
hi,
and whats that, here i close it! hmmmmm....
<br />
reader.Close ();<br />
dataStream.Close ();<br />
response.Close (); <--------------<br />
cu
|
|
|
|
|
It might not be the problem, but in your sample code I didn't see where the original request and response were closed:
HttpWebRequest get_request = (HttpWebRequest)WebRequest.Create("https://www.myzone.at/webkeeper/Controller");
get_request.CookieContainer = new CookieContainer();
HttpWebResponse get_response = (HttpWebResponse) get_request.GetResponse();
get_response.Cookies = get_request.CookieContainer.GetCookies(get_request.RequestUri);
String sessionid = "Cookie: ";
sessionid += get_response.Cookies[0].ToString();
login request:
--------------
HttpRequestResponse login_request = new HttpRequestResponse("https://www.myzone.at/webkeeper/Controller", "POST", "action=login&login=Anmelden&brand=myzone&username=xxxxxx&password=xxxxxxb&x=83&y=13");
login_request.SESSION_ID = sessionid;
login_request.SendRequest();
Also, I assume you have tried changing the request timeout value of the request object and setting it to a high enough value.
I can imagine the sinking feeling one would have after ordering my book,
only to find a laughably ridiculous theory with demented logic once the book arrives - Mark McCutcheon
|
|
|
|
|
hi, yeahhhhh i found the error ))
i forgot to close the get_response: get_response.Close();
now all works perfect )
cu
|
|
|
|
|
I got a hard problem I don't know how to solve...
How do I, with the classes in item.cs, make elecrisity go from a battery throu two cords and back to the battery again. I'll implement the ohm's later...
How do the cord know when it should flow elecrisity.
item.cs:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
namespace NiklasUlvinge.ChipsEater
{
abstract class Item
{
public Item[][] input;
public int x;
public int y;
public abstract Strom Output
{
get;
}
public abstract Point[] Snap
{
get;
}
protected Item(int X, int Y)
{
x = X;
y = Y;
input = new Item[1][];
}
public abstract void function();
public abstract void draw(Graphics g);
public void addBothInput(int index, int fromIndex, Item Input)
{
Input.addInput(fromIndex, this);
this.addInput(index, Input);
}
private void addInput(int index, Item Input)
{
index = input.Length & index;
Item[] inp = input[index];
Item[] titem;
if (inp == null)
{
titem = new Item[1];
}
else
titem = new Item[inp.Length];
for (int i = 0; i < titem.Length - 1; i++)
{
titem[i] = inp[i];
}
titem[titem.Length - 1] = Input;
input[index] = titem;
}
public Strom combinedInput(int index)
{
Strom r = 0;
if (input[index] == null)
return 0;
else
{
for (int i = 0; i < input[index].Length; i++)
{
r += input[index][i].Output[j];
}
return r;
}
}
protected Brush surf = Brushes.LightGray;
protected Pen side = Pens.DarkGray;
protected Pen loff = Pens.Black;
protected Pen lon = Pens.Red;
}
class Null : Item
{
public override Strom Output
{
get
{
}
}
public override Point[] Snap
{
get
{
return new Point[0];
}
}
public Null(int X, int Y)
: base(X, Y)
{
}
public override void function()
{
throw new Exception("The method or operation is not implemented.");
}
public override void draw(Graphics g)
{
throw new Exception("The method or operation is not implemented.");
}
}
class Transistor : Item
{
protected float[] output;
public Null theNull = new Null(-50, -50);
public override Strom Output
{
get
{
Strom r;
if (strom.l - strom.r > 0)
{
r.l = strom.l;
r.r = strom.r;
}
else
{
r.l = strom.l;
r.r = strom.r;
}
}
}
public override Point[] Snap
{
get
{
return new Point[3] {
new Point(x - 16, y - 1),
new Point(x + 3, y - 16),
new Point(x + 3, y + 16)};
}
}
public Transistor(int X, int Y) : base(X, Y)
{
input = new Item[4][];
output = new float[1];
}
public override void function()
{
if (combinedInput(0) > 0)
output[0] = combinedInput(1);
else
output[0] = 0;
}
public override void draw(Graphics g)
{
IntPtr intp;
if (combinedInput(0) == 0)
if (combinedInput(1) == 0)
if (output[0] == 0)
intp = Properties.Resources.trans000.GetHbitmap();
else
intp = Properties.Resources.trans001.GetHbitmap();
else
if (output[0] == 0)
intp = Properties.Resources.trans010.GetHbitmap();
else
intp = Properties.Resources.trans011.GetHbitmap();
else
if (combinedInput(1) == 0)
if (output[0] == 0)
intp = Properties.Resources.trans100.GetHbitmap();
else
intp = Properties.Resources.trans101.GetHbitmap();
else
if (output[0] == 0)
intp = Properties.Resources.trans110.GetHbitmap();
else
intp = Properties.Resources.trans111.GetHbitmap();
g.DrawImage(Image.FromHbitmap(intp), x - Image.FromHbitmap(intp).Size.Width / 2, y - Image.FromHbitmap(intp).Size.Height / 2);
}
}
class Cord : Item
{
public int x2, y2;
public Null theNull = new Null(-50, -50);
public override Strom Output
{
get
{
Strom o,
l = combinedInput(0),
r = combinedInput(1);
}
}
public override Point[] Snap
{
get
{
return new Point[2] {
new Point(x, y),
new Point(x2, y2) };
}
}
public Cord(int X1, int Y1)
: base(X1, Y1)
{
input = new Item[2][];
}
public override void function()
{
}
public override void draw(Graphics g)
{
g.DrawLine(combinedInput(0) > 0 ? lon : loff,
x, y, x2, y2);
}
}
class Battery : Item
{
public Null theNull = new Null(-50, -50);
public override float[] Output
{
get
{
return new float[1] { 1 };
}
}
public override Point[] Snap
{
get
{
return new Point[2] {
new Point(x - 5, y),
new Point(x + 5, y) };
}
}
public Battery(int X, int Y)
: base(X, Y)
{
}
public override void function()
{
}
public override void draw(Graphics g)
{
g.DrawLine(lon, x - 2, y - 10, x - 2, y + 10);
g.DrawLine(lon, x + 2, y - 6, x + 2, y + 6);
g.DrawLine(lon, x - 2, y, x - 5, y);
g.DrawLine(lon, x + 2, y, x + 5, y);
}
}
}
form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace NiklasUlvinge.ChipsEater
{
public partial class Form1 : Form
{
Item[] items = new Item[0];
bool mouseIsDown = false;
Point startingPoint;
Cord newCord;
public Form1()
{
InitializeComponent();
}
private void PB_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
g.Clear(Color.White);
for (int i = 0; i < items.Length; i++)
{
items[i].draw(g);
}
}
private void addItem(Item item)
{
Item[] titem = new Item[items.Length + 1];
for (int i = 0; i < items.Length; i++)
{
titem[i] = items[i];
}
titem[items.Length] = item;
items = titem;
}
private void PB_MouseClick(object sender, MouseEventArgs e)
{
switch (treeItems.SelectedNode.Name)
{
case "NodeLst1":
addItem(new Transistor(e.X,e.Y));
break;
case "NodeLst2":
addItem(new Battery(e.X, e.Y));
break;
}
this.Refresh();
}
private void PB_MouseDown(object sender, MouseEventArgs e)
{
switch (treeItems.SelectedNode.Name)
{
case "NodeLst0":
startingPoint = new Point(-2,-2);
for (int i = 0; i < items.Length; i++)
{
Point[] pts = items[i].Snap;
for (int j = 0; j < pts.Length; j++)
{
if ((Math.Abs(pts[j].X - e.X) < 5) && (Math.Abs(pts[j].Y - e.Y) < 5))
{
startingPoint = new Point(pts[j].X, pts[j].Y);
newCord = new Cord(startingPoint.X, startingPoint.Y);
items[i].addBothInput(0,0,newCord);
}
}
}
if (startingPoint == new Point(-2, -2))
{
startingPoint = new Point(e.X, e.Y);
newCord = new Cord(startingPoint.X, startingPoint.Y);
}
mouseIsDown = true;
break;
}
}
private void PB_MouseUp(object sender, MouseEventArgs e)
{
switch (treeItems.SelectedNode.Name)
{
case "NodeLst0":
mouseIsDown = false;
int theX = e.X,
theY = e.Y;
for (int i = 0; i < items.Length; i++)
{
Point[] pts = items[i].Snap;
for (int j = 0; j < pts.Length; j++)
{
if ((Math.Abs(pts[j].X - e.X) < 5) && (Math.Abs(pts[j].Y - e.Y) < 5))
{
theX = pts[j].X;
theY = pts[j].Y;
items[i].addBothInput(j,0, newCord);
}
}
}
newCord.x2 = theX;
newCord.y2 = theY;
addItem(newCord);
newCord = null;
break;
}
this.Refresh();
}
private void PB_MouseMove(object sender, MouseEventArgs e)
{
if (mouseIsDown)
{
Graphics g = PB.CreateGraphics();
this.Refresh();
g.DrawLine(Pens.Black, startingPoint, new Point(e.X, e.Y));
}
}
}
}
Niklas Ulvinge aka IDK
|
|
|
|
|
I could not compile your code because type "Strom" is not defined. Can you also provide this as well?
|
|
|
|
|
Form1.Designer.cs:
namespace NiklasUlvinge.ChipsEater
{
partial class Form1
{
private System.ComponentModel.IContainer components = null;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Cord");
System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Transistor");
System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Battery");
System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("lowest", new System.Windows.Forms.TreeNode[] {
treeNode1,
treeNode2,
treeNode3});
this.menuStrip1 = new System.Windows.Forms.MenuStrip();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.treeItems = new System.Windows.Forms.TreeView();
this.PB = new System.Windows.Forms.PictureBox();
this.splitContainer1.Panel1.SuspendLayout();
this.splitContainer1.Panel2.SuspendLayout();
this.splitContainer1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.PB)).BeginInit();
this.SuspendLayout();
this.menuStrip1.Location = new System.Drawing.Point(0, 0);
this.menuStrip1.Name = "menuStrip1";
this.menuStrip1.Size = new System.Drawing.Size(608, 24);
this.menuStrip1.TabIndex = 0;
this.menuStrip1.Text = "menuStrip1";
this.toolStrip1.Location = new System.Drawing.Point(0, 24);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(608, 25);
this.toolStrip1.TabIndex = 1;
this.toolStrip1.Text = "toolStrip1";
this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(0, 49);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Panel1.Controls.Add(this.treeItems);
this.splitContainer1.Panel2.Controls.Add(this.PB);
this.splitContainer1.Size = new System.Drawing.Size(608, 376);
this.splitContainer1.SplitterDistance = 83;
this.splitContainer1.TabIndex = 3;
this.splitContainer1.Text = "splitContainer1";
this.treeItems.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeItems.Location = new System.Drawing.Point(0, 0);
this.treeItems.Name = "treeItems";
treeNode1.Name = "NodeLst0";
treeNode1.Text = "Cord";
treeNode1.ToolTipText = "A simple current wire";
treeNode2.Name = "NodeLst1";
treeNode2.Text = "Transistor";
treeNode2.ToolTipText = "A transistor";
treeNode3.Name = "NodeLst2";
treeNode3.Text = "Battery";
treeNode3.ToolTipText = "A simple battery";
treeNode4.Name = "NodeLst";
treeNode4.Text = "lowest";
treeNode4.ToolTipText = "The lowest things of circuts";
this.treeItems.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
treeNode4});
this.treeItems.ShowRootLines = false;
this.treeItems.Size = new System.Drawing.Size(83, 376);
this.treeItems.TabIndex = 0;
this.PB.Dock = System.Windows.Forms.DockStyle.Fill;
this.PB.Location = new System.Drawing.Point(0, 0);
this.PB.Name = "PB";
this.PB.Size = new System.Drawing.Size(521, 376);
this.PB.TabIndex = 1;
this.PB.TabStop = false;
this.PB.MouseMove += new System.Windows.Forms.MouseEventHandler(this.PB_MouseMove);
this.PB.Paint += new System.Windows.Forms.PaintEventHandler(this.PB_Paint);
this.PB.MouseClick += new System.Windows.Forms.MouseEventHandler(this.PB_MouseClick);
this.PB.MouseUp += new System.Windows.Forms.MouseEventHandler(this.PB_MouseUp);
this.PB.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PB_MouseDown);
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(608, 425);
this.Controls.Add(this.splitContainer1);
this.Controls.Add(this.toolStrip1);
this.Controls.Add(this.menuStrip1);
this.MainMenuStrip = this.menuStrip1;
this.Name = "Form1";
this.Text = "Form1";
this.splitContainer1.Panel1.ResumeLayout(false);
this.splitContainer1.Panel2.ResumeLayout(false);
this.splitContainer1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.PB)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.MenuStrip menuStrip1;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.SplitContainer splitContainer1;
private System.Windows.Forms.PictureBox PB;
private System.Windows.Forms.TreeView treeItems;
}
}
Program.cs:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace NiklasUlvinge.ChipsEater
{
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
}
strom.cs
namespace NiklasUlvinge.ChipsEater
{
struct Strom
{
public float l, r;
public Strom(float left, float right)
{
l=left;
r = right;
}
public static Strom operator +(Strom a, Strom b)
{
return new Strom(a.l + b.l, a.r + b.r);
}
public static bool operator ==(Strom a, Strom b)
{
if (a.l == b.l && a.r == b.r)
return true;
else
return false;
}
public static bool operator !=(Strom a, Strom b)
{
return !(a == b);
}
}
}
the new item.cs file:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
namespace NiklasUlvinge.ChipsEater
{
abstract class Item
{
public Item[][] input;
public int x;
public int y;
public abstract Strom LeftOutput
{
get;
}
public abstract Strom RightOutput
{
get;
}
public abstract Point[] Snap
{
get;
}
protected Item(int X, int Y)
{
x = X;
y = Y;
input = new Item[1][];
}
public abstract void function();
public abstract void draw(Graphics g);
public void addBothInput(int index, Item Input)
{
Input.addInput(1 - index, this);
this.addInput(index, Input);
}
private void addInput(int index, Item Input)
{
index = input.Length & index;
Item[] inp = input[index];
Item[] titem;
if (inp == null)
{
titem = new Item[1];
}
else
titem = new Item[inp.Length];
for (int i = 0; i < titem.Length - 1; i++)
{
titem[i] = inp[i];
}
titem[titem.Length - 1] = Input;
input[index] = titem;
}
public Strom combinedInput(int index)
{
Strom r = new Strom(0, 0);
if (input[index] == null)
return new Strom(0, 0);
else
{
for (int i = 0; i < input[index].Length; i++)
{
if (index == 0)
r += input[index][i].LeftOutput;
else
r += input[index][i].RightOutput;
}
return r;
}
}
protected Brush surf = Brushes.LightGray;
protected Pen side = Pens.DarkGray;
protected Pen loff = Pens.Black;
protected Pen lon = Pens.Red;
}
class Null : Item
{
public override Strom LeftOutput
{
get
{
return new Strom(0, 0);
}
}
public override Strom RightOutput
{
get
{
return new Strom(0, 0);
}
}
public override Point[] Snap
{
get
{
return new Point[0];
}
}
public Null(int X, int Y)
: base(X, Y)
{
}
public override void function()
{
throw new Exception("The method or operation is not implemented.");
}
public override void draw(Graphics g)
{
throw new Exception("The method or operation is not implemented.");
}
}
class Transistor : Item
{
protected float[] output;
public Null theNull = new Null(-50, -50);
public override Strom LeftOutput
{
get
{
return new Strom(0, 0);
}
}
public override Strom RightOutput
{
get
{
return new Strom(0, 0);
}
}
public override Point[] Snap
{
get
{
return new Point[3] {
new Point(x - 16, y - 1),
new Point(x + 3, y - 16),
new Point(x + 3, y + 16)};
}
}
public Transistor(int X, int Y) : base(X, Y)
{
input = new Item[4][];
output = new float[1];
}
public override void function()
{
}
public override void draw(Graphics g)
{
IntPtr intp;
if (combinedInput(0) == new Strom(0, 0))
if (combinedInput(1) == new Strom(0, 0))
if (output[0] == 0)
intp = Properties.Resources.trans000.GetHbitmap();
else
intp = Properties.Resources.trans001.GetHbitmap();
else
if (output[0] == 0)
intp = Properties.Resources.trans010.GetHbitmap();
else
intp = Properties.Resources.trans011.GetHbitmap();
else
if (combinedInput(1) == new Strom(0, 0))
if (output[0] == 0)
intp = Properties.Resources.trans100.GetHbitmap();
else
intp = Properties.Resources.trans101.GetHbitmap();
else
if (output[0] == 0)
intp = Properties.Resources.trans110.GetHbitmap();
else
intp = Properties.Resources.trans111.GetHbitmap();
g.DrawImage(Image.FromHbitmap(intp), x - Image.FromHbitmap(intp).Size.Width / 2, y - Image.FromHbitmap(intp).Size.Height / 2);
}
}
class Cord : Item
{
public int x2, y2;
public Null theNull = new Null(-50, -50);
public override Strom LeftOutput
{
get
{
return combinedInput(1);
}
}
public override Strom RightOutput
{
get
{
return combinedInput(0);
}
}
public override Point[] Snap
{
get
{
return new Point[2] {
new Point(x, y),
new Point(x2, y2) };
}
}
public Cord(int X1, int Y1)
: base(X1, Y1)
{
input = new Item[2][];
}
public override void function()
{
}
public override void draw(Graphics g)
{
g.DrawLine(combinedInput(0) == new Strom(0,0) ? loff : lon,
x, y, x2, y2);
}
public override string ToString()
{
return "L: l" + combinedInput(1).l + " r" + combinedInput(1).l + "R: l" + combinedInput(0).l + " r" + combinedInput(0).l;
}
}
class Battery : Item
{
public Null theNull = new Null(-50, -50);
public override Strom LeftOutput
{
get
{
return new Strom(100,-100);
}
}
public override Strom RightOutput
{
get
{
return new Strom(-100, 100);
}
}
public override Point[] Snap
{
get
{
return new Point[2] {
new Point(x - 5, y),
new Point(x + 5, y) };
}
}
public Battery(int X, int Y)
: base(X, Y)
{
input = new Item[2][];
}
public override void function()
{
}
public override void draw(Graphics g)
{
g.DrawLine(lon, x - 2, y - 10, x - 2, y + 10);
g.DrawLine(lon, x + 2, y - 6, x + 2, y + 6);
g.DrawLine(lon, x - 2, y, x - 5, y);
g.DrawLine(lon, x + 2, y, x + 5, y);
}
public override string ToString()
{
return "L: l" + combinedInput(1).l + " r" + combinedInput(1).l + "R: l" + combinedInput(0).l + " r" + combinedInput(0).l;
}
}
}
Niklas Ulvinge aka IDK
|
|
|
|
|
Hello again gurus,
Now I can concatenate two nibbles into a byte, how can I do the reverse operation??
That is extracting the high nibble and low nibble from a byte?
Thanks for the help
Best regards.
There is no spoon.
|
|
|
|
|
|