Click here to Skip to main content
15,908,775 members
Home / Discussions / C#
   

C#

 
GeneralRe: SOS: Send(Post) message to a control Pin
Mazdak31-May-04 2:47
Mazdak31-May-04 2:47 
GeneralInterop Pin
satanic_cult30-May-04 22:24
satanic_cult30-May-04 22:24 
GeneralRe: Interop Pin
Dave Kreskowiak31-May-04 1:15
mveDave Kreskowiak31-May-04 1:15 
GeneralThe Error Pin
satanic_cult31-May-04 7:34
satanic_cult31-May-04 7:34 
GeneralRe: The Error Pin
Dave Kreskowiak31-May-04 7:44
mveDave Kreskowiak31-May-04 7:44 
GeneralRe: The Error Pin
satanic_cult31-May-04 12:15
satanic_cult31-May-04 12:15 
GeneralRe: The Error Pin
Dave Kreskowiak1-Jun-04 0:27
mveDave Kreskowiak1-Jun-04 0:27 
GeneralRe: The Error Pin
satanic_cult1-Jun-04 9:43
satanic_cult1-Jun-04 9:43 
i am posting the entire program i am tryin to run...i deleted the interop part from namespace but now i am getting the following errors...

"The type or namespace name 'ADO' does not exist in the class or namespace 'System.Data' (are you missing an assembly reference?)"

"The type or namespace name 'ADODataSetCommand' could not be found (are you missing a using directive or an assembly reference?)"

" The type or namespace name 'ListItem' could not be found (are you missing a using directive or an assembly reference?)"




namespace WindowsApplication9
{
using System;
using System.Drawing;
using Microsoft.Win32;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

///
/// Summary description for Form1.
///

public class Form1 : System.Windows.Forms.Form
{
///
/// Required designer variable.
///

private System.ComponentModel.Container components;
private System.Windows.Forms.MenuItem Exit;
private System.Windows.Forms.MenuItem SetAlarm;
private System.Windows.Forms.MenuItem menuItem1;
private System.Windows.Forms.MainMenu mainMenu1;
private System.Windows.Forms.Timer timer1;
private System.Windows.Forms.ImageList imageList1;
private System.Data.ADO.ADOConnection adoConnection1;
private System.Data.ADO.ADODataSetCommand adoDataSetCommand1;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ListView listView1;
private System.Windows.Forms.MonthCalendar monthCalendar1;
private DatabaseController DBController = new DatabaseController();
private int OldSelection = 0;
private DateTime OldDate = new DateTime(DateTime.Today.Ticks);
private ArrayList MyMarkedDates = new ArrayList();
public int CurrentRow = 0;

private const int kArrowDownKey = 40;
private const int kArrowUpKey = 38;
private const int kEnterKey = 13;

const long TicksInAnHour = 36000000000;


public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
timer1.Enabled = true;
textBox1.Focus();
this.TabStop = false;
DBController.ReadInActivities(DateTime.Today, listView1);
DBController.ReadInAlarms();
SetupTextBox(0);
//
// TODO: Add any constructor code after InitializeComponent call
//
}


private int NextSelection()
{
OldSelection = CurrentRow;
CurrentRow++;
if (CurrentRow > 14)
{
CurrentRow = 0;
}

return CurrentRow;

}

private int PreviousSelection()
{
OldSelection = CurrentRow;
CurrentRow--;
if (CurrentRow < 0)
{
CurrentRow = 14;
}

return CurrentRow;

}


public void SetupTextBox(int nItem)
{
Rectangle r1 = listView1.ListItems[nItem].GetBounds(ItemBoundsPortion.Entire.ToInt32());
int columnStart = listView1.Columns[0].Width;
int columnWidth = listView1.Columns[1].Width;
Rectangle rtPortion = new Rectangle(r1.Left + columnStart, r1.Top, columnWidth, r1.Height);
Point aPoint = new Point(listView1.Left, listView1.Top);
rtPortion.Offset(aPoint);

// rtPortion.Inflate(-3, -7); // kludge since the get bounds doesn't seem to work exactly right
// rtPortion.Offset(0, -6);
// aPoint = this.PointToClient(aPoint);
textBox1.SetBounds(rtPortion.X, rtPortion.Y, rtPortion.Width, rtPortion.Height);
textBox1.Text = listView1.ListItems[nItem].SubItems[0];
// this.AutoScrollPosition.Y = rtPortion.Y;
}

///
/// Clean up any resources being used.
///

public override void Dispose()
{
base.Dispose();
components.Dispose();
}

///
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
///

private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager (typeof(Form1));
this.components = new System.ComponentModel.Container ();
this.monthCalendar1 = new System.Windows.Forms.MonthCalendar ();
this.imageList1 = new System.Windows.Forms.ImageList ();
this.columnHeader1 = new System.Windows.Forms.ColumnHeader ();
this.SetAlarm = new System.Windows.Forms.MenuItem ();
this.mainMenu1 = new System.Windows.Forms.MainMenu ();
this.listView1 = new System.Windows.Forms.ListView ();
this.columnHeader2 = new System.Windows.Forms.ColumnHeader ();
this.Exit = new System.Windows.Forms.MenuItem ();
this.menuItem1 = new System.Windows.Forms.MenuItem ();
this.statusBar1 = new System.Windows.Forms.StatusBar ();
this.adoDataSetCommand1 = new System.Data.ADO.ADODataSetCommand ();
this.adoConnection1 = new System.Data.ADO.ADOConnection ();
this.textBox1 = new System.Windows.Forms.TextBox ();
this.timer1 = new System.Windows.Forms.Timer (this.components);
//@this.TrayHeight = 90;
//@this.TrayLargeIcon = false;
//@this.TrayAutoArrange = true;
monthCalendar1.Location = new System.Drawing.Point (304, 8);
monthCalendar1.TabIndex = 0;
monthCalendar1.TabStop = true;
monthCalendar1.DateChanged += new System.Windows.Formss.DateRangeEventHandler (this.monthCalendar1_DateChanged);
//@imageList1.SetLocation (new System.Drawing.Point (282, 7));
imageList1.ImageSize = new System.Drawing.Size (16, 16);
imageList1.ImageStream = (System.WinForms.ImageListStreamer) resources.GetObject ("imageList1.ImageStream");
imageList1.ColorDepth = System.WinForms.ColorDepth.Depth8Bit;
imageList1.TransparentColor = System.Drawing.Color.Transparent;
columnHeader1.Text = "Time";
columnHeader1.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
SetAlarm.Text = "Toggle Alarm...";
SetAlarm.Index = 0;
SetAlarm.Click += new System.EventHandler (this.SetAlarm_Click);
//@mainMenu1.SetLocation (new System.Drawing.Point (446, 7));
mainMenu1.MenuItems.All = new System.Windows.Forms.MenuItem[1] {this.menuItem1};
listView1.Location = new System.Drawing.Point (8, 8);
listView1.Size = new System.Drawing.Size (280, 288);
listView1.FullRowSelect = true;
listView1.View = System.Windows.Forms.View.Report;
listView1.ForeColor = System.Drawing.SystemColors.WindowText;
listView1.Font = new System.Drawing.Font ("Microsoft Sans Serif", 10);
listView1.GridLines = true;
listView1.TabIndex = 1;
listView1.SmallImageList = this.imageList1;
listView1.DoubleClick += new System.EventHandler (this.listView1_DoubleClick);
listView1.MouseUp += new System.Windows.Forms.MouseEventHandler (this.listView1_MouseUp);
listView1.SelectedIndexChanged += new System.EventHandler (this.listView1_SelectedIndexChanged);
listView1.Columns.All = new System.Windows.Forms.ColumnHeader[2] {this.columnHeader1, this.columnHeader2};
listView1.ListItems.All = new System.Windows.Forms.ListItem[15] {new System.Windows.Forms.ListItem ("9:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("10:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("11:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("12:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("1:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("2:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("3:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("4:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("5:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("6:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("7:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("8:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("9:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("10:00", 0, new string[1] {null}), new System.Windows.Forms.ListItem ("11:00", 0, new string[1] {null})};
columnHeader2.Text = "Activity";
columnHeader2.Width = 215;
columnHeader2.TextAlign = System.Windows.Forms.HorizontalAlignment.Left;
Exit.Text = "Exit";
Exit.Index = 1;
Exit.Click += new System.EventHandler (this.Exit_Click);
menuItem1.Text = "File";
menuItem1.Index = 0;
menuItem1.MenuItems.All = new System.Windows.Forms.MenuItem[2] {this.SetAlarm, this.Exit};
statusBar1.BackColor = System.Drawing.SystemColors.Control;
statusBar1.Location = new System.Drawing.Point (0, 312);
statusBar1.Size = new System.Drawing.Size (504, 21);
statusBar1.TabIndex = 4;
statusBar1.Text = "Ready...";
//@adoDataSetCommand1.SetLocation (new System.Drawing.Point (7, 7));
adoDataSetCommand1.UpdateCommand = new System.Data.ADO.ADOCommand (this.adoConnection1, "UPDATE Activities SET Activity = ?, [Date] = ?, ID = ?, IsAM = ?, [Time] = ? WHERE (ID = ?)", System.Data.CommandType.Text, false, new System.Data.ADO.ADOParameter[6] {new System.Data.ADO.ADOParameter ("Activity", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "Activity", System.Data.DataRowVersion.Current, null), new System.Data.ADO.ADOParameter ("Date", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "Date", System.Data.DataRowVersion.Current, null), new System.Data.ADO.ADOParameter ("IsAM", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "IsAM", System.Data.DataRowVersion.Current, null), new System.Data.ADO.ADOParameter ("Time", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "Time", System.Data.DataRowVersion.Current, null), new System.Data.ADO.ADOParameter ("Original_ID", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "ID", System.Data.DataRowVersion.Original, null), new System.Data.ADO.ADOParameter ("New_ID", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "ID", System.Data.DataRowVersion.Current, null)}, System.Data.UpdateRowSource.Both);
adoDataSetCommand1.DeleteCommand = new System.Data.ADO.ADOCommand (this.adoConnection1, "DELETE FROM Activities WHERE (ID = ?)", System.Data.CommandType.Text, false, new System.Data.ADO.ADOParameter[1] {new System.Data.ADO.ADOParameter ("ID", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "ID", System.Data.DataRowVersion.Current, null)}, System.Data.UpdateRowSource.Both);
adoDataSetCommand1.InsertCommand = new System.Data.ADO.ADOCommand (this.adoConnection1, "INSERT INTO Activities( Activity, [Date], ID, IsAM, [Time] ) VALUES( ?, ?, ?, ?, ? )", System.Data.CommandType.Text, false, new System.Data.ADO.ADOParameter[5] {new System.Data.ADO.ADOParameter ("Activity", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "Activity", System.Data.DataRowVersion.Current, null), new System.Data.ADO.ADOParameter ("Date", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "Date", System.Data.DataRowVersion.Current, null), new System.Data.ADO.ADOParameter ("IsAM", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "IsAM", System.Data.DataRowVersion.Current, null), new System.Data.ADO.ADOParameter ("Time", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "Time", System.Data.DataRowVersion.Current, null), new System.Data.ADO.ADOParameter ("Key_ID", System.Data.ADO.ADODBType.VarWChar, 510, System.Data.ParameterDirection.Input, false, 255, 255, "ID", System.Data.DataRowVersion.Current, null)}, System.Data.UpdateRowSource.Both);
adoDataSetCommand1.SelectCommand = new System.Data.ADO.ADOCommand (this.adoConnection1, "SELECT Activity, [Date], ID, IsAM, [Time] FROM Activities", System.Data.CommandType.Text, false, new System.Data.ADO.ADOParameter[] {}, System.Data.UpdateRowSource.Both);
adoDataSetCommand1.TableMappings.All = new System.Data.Internal.DataTableMapping[1] {new System.Data.Internal.DataTableMapping ("Table", "Activities", new System.Data.Internal.DataColumnMapping[5] {new System.Data.Internal.DataColumnMapping ("Activity", "Activity"), new System.Data.Internal.DataColumnMapping ("Date", "Date"), new System.Data.Internal.DataColumnMapping ("ID", "ID"), new System.Data.Internal.DataColumnMapping ("IsAM", "IsAM"), new System.Data.Internal.DataColumnMapping ("Time", "Time")})};
//@adoConnection1.SetLocation (new System.Drawing.Point (162, 7));
adoConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Documents and Settings\\Mike\\My Documents\\Visual Studio Projects\\WindowsApplication9\\bin\\Debug\\calendar.mdb;Persist Security Info=False";
textBox1.Location = new System.Drawing.Point (72, 56);
textBox1.Text = "textBox1";
textBox1.TabIndex = 2;
textBox1.Size = new System.Drawing.Size (216, 20);
//@timer1.SetLocation (new System.Drawing.Point (375, 7));
timer1.Interval = 900000;
timer1.Tick += new System.EventHandler (this.timer1_Tick);
this.Text = "Scheduling Book";
this.AutoScaleBaseSize = new System.Drawing.Size (5, 13);
this.KeyPreview = true;
this.Menu = this.mainMenu1;
this.ClientSize = new System.Drawing.Size (504, 333);
this.KeyDown += new System.Windows.Forms.KeyEventHandler (this.Form1_KeyDown);
this.Click += new System.EventHandler (this.Form1_Click);
this.Closing += new System.ComponentModel.CancelEventHandler (this.Form1_Closing);
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler (this.Form1_KeyPress);
this.Controls.Add (this.statusBar1);
this.Controls.Add (this.textBox1);
this.Controls.Add (this.listView1);
this.Controls.Add (this.monthCalendar1);
}

protected void Exit_Click (object sender, System.EventArgs e)
{
SaveTheData(monthCalendar1.SelectionStart); // save data before exiting
Application.Exit();
}

protected void SetAlarm_Click (object sender, System.EventArgs e)
{
ListItem anItem = listView1.ListItems[CurrentRow];
ToggleAlarm(anItem);
}

protected void Form1_Click (object sender, System.EventArgs e)
{

}

protected long GetAlarmInTicks(RowData theData)
{
long lResult = 0;
lResult = theData.m_Date.Ticks + (theData.m_nTime * TicksInAnHour);
if ((theData.m_bAM == false) && (theData.m_nTime != 12))
{
lResult += (12 * TicksInAnHour);
}
return lResult;
}

protected void timer1_Tick (object sender, System.EventArgs e)
{
for (int i = 0; i < DBController.AlarmList.Count; i++)
{
RowData theData = (RowData)DBController.AlarmList[i];
long nTicks = GetAlarmInTicks(theData);
long diffTicks = DateTime.Now.Ticks - nTicks;
double fDiffHours = diffTicks.ToDouble()/TicksInAnHour;
if (diffTicks > 0)
{
System.Windows.Forms.MessageBox.Show(theData.m_strActivity);
DBController.DeleteAlarm(theData.m_nKey);
DBController.RemoveAlarmFromList(theData.m_nKey);
listView1.ListItems[theData.m_nCount].ImageIndex = 0;
}
}
}

protected int TimeString2Int(string strTime)
{
int index = strTime.IndexOf(':');
string strNum = strTime.Substring(0, index);
return strNum.ToInt32();
}

protected bool IsAM(int itemIndex)
{
bool bAM = false;

if (itemIndex > 2)
{
bAM = false;
}
else
{
bAM = true;
}

return bAM;

}

protected RowData Item2Data(ListItem anItem)
{
RowData theData = new RowData();
theData.m_Date = monthCalendar1.SelectionStart;
theData.m_bAlarm = true;
theData.m_bAM = IsAM(anItem.Index);
theData.m_nTime = TimeString2Int(anItem.Text);
theData.m_nCount = anItem.Index;
if (anItem.SubItems.Length > 0)
{
theData.m_strActivity = anItem.SubItems[0];
}

return theData;
}

protected void ToggleAlarm(ListItem anItem)
{
if (anItem.ImageIndex == 0)
{
anItem.ImageIndex = 1;
DBController.AlarmList.Add(Item2Data(anItem));
}
else
{
anItem.ImageIndex = 0;
int nKey = DBController.LookupAlarmKey(Item2Data(anItem));
DBController.DeleteAlarm(nKey);
DBController.RemoveAlarmFromList(nKey);
}
}

protected void listView1_DoubleClick (object sender, System.EventArgs e)
{
ListItem anItem = listView1.SelectedItems[0];
ToggleAlarm(anItem);
}

protected void Form1_Closing (object sender, System.ComponentModel.CancelEventArgs e)
{
SaveTheData(monthCalendar1.SelectionStart); // save data before exiting
}


protected void Form1_KeyDown (object sender, System.Windows.Forms.KeyEventArgs e)
{
int l = (int)e.KeyData;

switch(l)
{
case kArrowDownKey:
NextSelection();
HandleTextBoxData();
break;
case kArrowUpKey:
PreviousSelection();
HandleTextBoxData();
break;
case kEnterKey:
NextSelection();
HandleTextBoxData();
break;
default:
break;
}
}

protected override bool ProcessTabKey(bool Forward)
{
NextSelection();
HandleTextBoxData();
return false;

// return base.ProcessCmdKey(msg, keyData);
}

protected void Form1_KeyPress (object sender, System.Windows.Forms.KeyPressEventArgs e)
{
char c = e.KeyChar.ToChar();
}

protected void SaveTheData(DateTime theDate)
{
GetDataFromTextBox(); // force data into listview
MarkOldSelection();
DBController.WriteOutActivities(theDate, listView1, MyMarkedDates);
MyMarkedDates.Clear();
statusBar1.Text = "Saved Data...";

}

protected void SaveButton_Click (object sender, System.EventArgs e)
{
SaveTheData(monthCalendar1.SelectionStart); // save the data
}

protected void listView1_MouseUp (object sender, System.Windows.Forms.MouseEventArgs e)
{
textBox1.Focus();
}

protected void GetDataFromTextBox()
{
listView1.ListItems[OldSelection].SetSubItem(0, textBox1.Text);
}

protected void MarkOldSelection()
{
MyMarkedDates.Add(OldSelection); // only add items that have changed
}

protected void HandleTextBoxData()
{
GetDataFromTextBox();
MarkOldSelection();
SetupTextBox(CurrentRow);
OldSelection = CurrentRow;
}


protected void listView1_SelectedIndexChanged (object sender, System.EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
CurrentRow = listView1.SelectedItems[0].Index;
HandleTextBoxData();
statusBar1.Text = "Ready...";
}

}

protected void monthCalendar1_DateChanged (object sender, System.Windows.Forms.DateRangeEventArgs e)
{
SaveTheData(OldDate); // save the previous screen
ClearSubItems();
textBox1.Text = "";
DBController.ReadInActivities(monthCalendar1.SelectionStart, listView1);
OldSelection = CurrentRow;
SetupTextBox(CurrentRow);
OldDate = monthCalendar1.SelectionStart;
textBox1.Focus();
}

protected void ClearSubItems()
{
for (int i = 0; i < listView1.ListItems.Count; i++)
{
listView1.ListItems[i].SetSubItem(0, ""); // erase old view
listView1.ListItems[i].ImageIndex = 0;
}
}

///
/// The main entry point for the application.
///

public static void Main(string[] args)
{
Application.Run(new Form1());
}
}
}
GeneralRe: The Error Pin
Dave Kreskowiak1-Jun-04 15:36
mveDave Kreskowiak1-Jun-04 15:36 
GeneralRe: The Error Pin
satanic_cult1-Jun-04 22:01
satanic_cult1-Jun-04 22:01 
GeneralRe: The Error Pin
Dave Kreskowiak2-Jun-04 0:25
mveDave Kreskowiak2-Jun-04 0:25 
Questionwhat happen ? Pin
sreejith ss nair30-May-04 20:57
sreejith ss nair30-May-04 20:57 
QuestionHow can get IP Address from local machine? Pin
quocbao30-May-04 17:55
quocbao30-May-04 17:55 
AnswerRe: How can get IP Address from local machine? Pin
Aryadip30-May-04 18:10
Aryadip30-May-04 18:10 
GeneralRe: How can get IP Address from local machine? Pin
Uwe Keim30-May-04 22:28
sitebuilderUwe Keim30-May-04 22:28 
QuestionWrap Datagrid Column in WinApp Project? Pin
Tuwing.Sabado30-May-04 17:10
Tuwing.Sabado30-May-04 17:10 
AnswerRe: Wrap Datagrid Column in WinApp Project? Pin
Mazdak30-May-04 20:17
Mazdak30-May-04 20:17 
GeneralRe: Wrap Datagrid Column in WinApp Project? Pin
Tuwing.Sabado30-May-04 20:20
Tuwing.Sabado30-May-04 20:20 
QuestionHow can I effectively access the object collection of form1 to another form in WinApp Project? Pin
Tuwing.Sabado30-May-04 17:02
Tuwing.Sabado30-May-04 17:02 
AnswerRe: How can I effectively access the object collection of form1 to another form in WinApp Project? Pin
Aryadip30-May-04 18:21
Aryadip30-May-04 18:21 
GeneralRe: How can I effectively access the object collection of form1 to another form in WinApp Project? Pin
Tuwing.Sabado30-May-04 20:45
Tuwing.Sabado30-May-04 20:45 
GeneralRe: How can I effectively access the object collection of form1 to another form in WinApp Project? Pin
Aryadip30-May-04 21:48
Aryadip30-May-04 21:48 
GeneralRe: How can I effectively access the object collection of form1 to another form in WinApp Project? Pin
Tuwing.Sabado30-May-04 22:50
Tuwing.Sabado30-May-04 22:50 
GeneralRe: How can I effectively access the object collection of form1 to another form in WinApp Project? Pin
Aryadip31-May-04 2:44
Aryadip31-May-04 2:44 
AnswerRe: How can I effectively access the object collection of form1 to another form in WinApp Project? Pin
partyganger31-May-04 5:26
partyganger31-May-04 5:26 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.