Просто вычтите из позиции курсора левую и верхнюю координаты элемента управления:
this.Text = Convert.ToString(
Cursor.Position.X - this.Left + ":" +
Cursor.Position.Y - this.Top);
Если вы знакомы с CGI.pm, нет смысла использовать FCGI.pm, используйте CGI :: Fast.
Ваш пример, преобразованный для использования CGI :: Fast, будет следующим: :
#!/usr/bin/perl
use strict;
use CGI::Fast;
use DBI;
use Template;
my $driver = "mysql";
my $server = "localhost:3306";
my $database = "test";
my $url = "DBI:$driver:$database:$server";
my $user = "apache";
my $password = "";
#Connect to database
my $db_handle = DBI->connect( $url, $user, $password ) or die $DBI::errstr;
while ( my $cgi = CGI::Fast->new() ) {
#Grab submitted form data
my $idFromSomewhere = $cgi->param( 'id' );
#SQL query to execute
my $sql = "SELECT * FROM tests WHERE id=?";
#Prepare SQL query
my $statement = $db_handle->prepare( $sql )
or die "Couldn't prepare query '$sql': $DBI::errstr\n";
#Execute SQL Query
$statement->execute( $idFromSomewhere )
or die "Couldn't execute query '$sql': $DBI::errstr\n";
#Get query results as hash
my $results = $statement->fetchall_hashref( 'id' );
my $tt = Template->new();
#HTML output template
my $input = 'template.html';
my $vars = { tests => $results, };
#Process template and output as HTML
$tt->process( $input, $vars )
or die $tt->error();
}
Что касается ваших дополнительных вопросов:
Также как дополнительная информация - если вы хотите разрабатывать веб-сайты на Perl, хотя бы взгляните на Catalyst ( http://www.catalystframework.org/ )
Если вы хотите использовать FCGI, то выполняйте в этом цикле только минимум, чтобы запустить задачу. Все остальное должно находиться в модулях, и все, что вам нужно сделать, это передать ввод.
use FCGI;
while (FCGI::accept >= 0)
{
MyApplication->activate( @args );
}
Остальное где-то в MyApplication. В скрипте FastCGI не должно быть ничего интересного. Вы не можете тесно связать все, что связано с приложением, с тем, что его активирует.
Возможно, вам захочется прочитать мою главу о модулях в Освоение Perl , чтобы увидеть, как вы можете превратить свои скрипты в новые. -используемые модули. Подобные вещи очень упрощают подобные вещи.
Для постоянных соединений с базой данных у вас есть немного больше работы. Вы можете запустить соединение вне цикла, но периодически вам нужно его пропинговать и, возможно, восстановить его. Посмотрите, что Apache ::
Подзапрос C: (постоянные соединения с БД)
Взгляните на DBI-> connect_cached () . Я считаю, что вы можете использовать его внутри вашего цикла CGI :: Fast, и DBI.pm запомнит / кэширует ваше соединение. Таким образом, при 2-м, 3-м и т. Д. Вызовах connect_cached () с теми же параметрами вы вернетесь к существующему соединению. Он создаст новое соединение, если старое больше не доступно.
Что действительно хорошо в этом подходе, так это то, что единственное изменение, которое вам нужно внести в существующее приложение (кроме добавления цикла CGI :: Fast), - это замените connect () на connect_cached (). И connect_cached () также будет работать с обычным CGI.
См. Также Должен ли я помещать соединение / инициализацию БД вне цикла FCGI, чтобы воспользоваться преимуществами FastCGI в Perl? а также http://www.mail-archive.com/ cgiapp@lists.erlbaum.net /msg04351.html