Pesquisa

segunda-feira, 3 de janeiro de 2011

Imagem com cantos arredondados

Para fazer imagens com cantos arredondados sem que aconteça problemas em diferentes navegadores, basta renderizar as imagens no servidor.

Segue abaixo um exemplo de como fazer:

Pagina RoundCorner.aspx:

Página responsável por ajustar os cantos das imagens.

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Drawing" %>

<script runat="server">

void Page_Init(Object sender,EventArgs e) {

string imagem = Request.QueryString["Imagem"].ToString();
string path = Server.MapPath(String.Format("~/{0}", imagem));
int roundedDia = 20;

using(System.Drawing.Image imgin = System.Drawing.Image.FromFile(path)){

System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(imgin.Width, imgin.Height);
Graphics g = Graphics.FromImage(bitmap);

//Define a cor do canto arredondado
Color cor = Color.FromArgb(29, 29, 29);
g.Clear(cor);

Brush brush = new System.Drawing.TextureBrush(imgin);

FillRoundedRectangle(g, new Rectangle(0, 0, imgin.Width, imgin.Height), roundedDia, brush);

// done with drawing dispose graphics object.

g.Dispose();

// Stream Image to client.

Response.Clear();

Response.ContentType = "image/pjpeg";

bitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

Response.End();

// dispose bitmap object.

bitmap.Dispose();
}
}

public static void FillRoundedRectangle(Graphics g,Rectangle r,int d,Brush b){

// anti alias distorts fill so remove it.
System.Drawing.Drawing2D.SmoothingMode mode = g.SmoothingMode ;

g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
g.FillPie(b,r.X,r.Y,d,d,180,90);
g.FillPie(b,r.X+r.Width-d,r.Y,d,d,270,90);
g.FillPie(b,r.X ,r.Y+r.Height -d,d,d,90,90);
g.FillPie(b,r.X +r.Width-d,r.Y+r.Height -d,d,d,0,90);
g.FillRectangle(b,r.X + d/2,r.Y,r.Width-d,d/2);
g.FillRectangle(b,r.X ,r.Y +d/2,r.Width,r.Height-d);
g.FillRectangle(b,r.X + d/2,r.Y + r.Height-d/2,r.Width-d,d/2);
g.SmoothingMode = mode;
}

</script>

Página que utiliza a RoundCorner.aspx:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Image runat="server" ID="img" ImageUrl="~/RoundCorner.aspx?Imagem=imagem.jpg" />
</div>
</form>
</body>
</html>

Créditos: Tiago Bandeira


Select em Stored Procedure

Para não ter que reescrever a lógica existente em uma stored procedure para fazer um simples select, basta inserir o conteudo de uma stored procedure para dentro de uma tabela temporária.

É praticamente como utilizar a stored procedure no lugar da tabela.

Segue abaixo o exemplo:

-- DROP PROCEDURE testProc
-- DROP TABLE #testTable

CREATE PROCEDURE testProc AS
BEGIN
SELECT 'AB' as col1, 'CD' as col2
UNION
SELECT 'EF' as col1, 'GH' as col2
END

GO
CREATE TABLE #testTable (col1 varchar(5), col2 varchar(5))

GO
-- this call will succeed
INSERT INTO #testTable EXEC testProc

GO
SELECT * FROM #testTable where col2 like '%C%'



Gerar imagem com texto

Gerar imagem com texto personalizado.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="gerar-imagem.aspx.cs" Inherits="gerar_imagem" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox runat="server" ID="Text" />
<br>
<br>
<asp:DropDownList runat="server" ID="BackgroundColor">
<asp:ListItem Value="red">Red</asp:ListItem>
<asp:ListItem Value="green">Green</asp:ListItem>
<asp:ListItem Value="navy">Navy</asp:ListItem>
<asp:ListItem Value="orange">Orange</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList runat="server" ID="Font">
<asp:ListItem Value="Arial">Arial</asp:ListItem>
<asp:ListItem Value="Verdana">Verdana</asp:ListItem>
<asp:ListItem Value="Courier">Courier</asp:ListItem>
<asp:ListItem Value="Times New Roman">Times New Roman</asp:ListItem>
</asp:DropDownList>
<br>
<br>
<asp:Button runat="Server" ID="SubmitButton" Text="Gerar Imagem" />
</div>
</form>
</body>
</html>



using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Text;
using System.Drawing.Imaging;

public partial class gerar_imagem : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(Page.IsPostBack)
{
Bitmap oBitmap = new Bitmap(468, 60);
Graphics oGraphic = Graphics.FromImage(oBitmap);
System.Drawing.Color oColor = new Color();

String sColor = Request["BackgroundColor"];
String sText = Request["Text"];
String sFont = Request["Font"];

switch (sColor)
{
case "red":
oColor = Color.Red;
break;
case "green":
oColor = Color.Green;
break;
case "navy":
oColor = Color.Navy;
break;
case "orange":
oColor = Color.Orange;
break;
default:
oColor = Color.Gray;
break;
}
SolidBrush oBrush = new SolidBrush(oColor);
SolidBrush oBrushWrite = new SolidBrush(Color.White);

oGraphic.FillRectangle(oBrush, 0, 0, 468, 60);
oGraphic.TextRenderingHint = TextRenderingHint.AntiAlias;

Font oFont = new Font(sFont, 13);
PointF oPoint = new PointF(5, 5);

oGraphic.DrawString(sText, oFont, oBrushWrite, oPoint);

oBitmap.Save(Server.MapPath("gen_img.jpg"), ImageFormat.Jpeg);

Response.Write("Imagem gerada <a target=\"_blank\" href=\"gen_img.jpg\">aqui</a>");
}
}
}



Desabilitar botão após o click

Solução muito simples para desabilitar o botão após o click.

Essa solução pode ser utilizado em requisições ajax, com update panel.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="scriptManager" AsyncPostBackTimeout="0" runat="server">
</asp:ScriptManager>
<div>
<asp:UpdatePanel runat="server" ID="upPrincipal">
<ContentTemplate>
<asp:Button runat="server" ID="btnSalvar" Text="Salvar"
onclick="btnSalvar_Click" />
<asp:Literal runat="server" ID="ltlTexto"></asp:Literal>
</ContentTemplate>
</asp:UpdatePanel>

</div>
</form>
</body>
</html>

E no code behind:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
btnSalvar.Attributes.Add("onclick", "this.disabled=true;" + Page.ClientScript.GetPostBackEventReference(btnSalvar, String.Empty).ToString());
}
protected void btnSalvar_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(5000);
ltlTexto.Text += DateTime.Now.ToString() + " - ";
}
}

terça-feira, 28 de dezembro de 2010

Enviar e-mail de forma assincrona

Um dos maiores problemas ao fazer envio de e-mail é a tempo que demora o seu envio.

Podemos então enviar os e-mails de forma assincrona, sem interromper a execução do programa.

Utiliza-se a classe System.Net.Mail.MailMessage.

public static void SendEmail(System.Net.Mail.MailMessage m) 
{
SendEmail(m, true);
}

public static void SendEmail(System.Net.Mail.MailMessage m, Boolean Async)
{

System.Net.Mail.SmtpClient smtpClient = null;

smtpClient = new System.Net.Mail.SmtpClient("localhost");

if (Async)
{
SendEmailDelegate sd = new SendEmailDelegate(smtpClient.Send);
AsyncCallback cb = new AsyncCallback(SendEmailResponse);
sd.BeginInvoke(m, cb, sd);
}
else
{
smtpClient.Send(m);
}

}

private delegate void SendEmailDelegate(System.Net.Mail.MailMessage m);

private static void SendEmailResponse(IAsyncResult ar)
{
SendEmailDelegate sd = (SendEmailDelegate)(ar.AsyncState);

sd.EndInvoke(ar);
}




domingo, 19 de dezembro de 2010

Configurar D-Link 524

WAN Settings:
- PPPoE: Choose this option if your ISP uses PPPoE. (For most DSL users)

PPP over Ethernet
- Dynamic PPPoE
- Maximum Idle Time: 0
- MTU: 1305

config modem

performance modem

terça-feira, 26 de outubro de 2010

Como desativar Constraints

--Desabilitar:
ALTER TABLE NOMETABELA NOCHECK CONSTRAINT ALL
--Habilitar:
ALTER TABLE NOMETABELA CHECK CONSTRAINT ALL




Limpar banco de dados / tabelas

Script para limpar todas as tabelas do banco de dados.

  • Deletar registros
  • Limpar os Idenficadores (CHECKIDENT)
BEGIN TRAN

PRINT 'BEGIN TRAN'

DECLARE @Tabela VARCHAR(50)
DECLARE @DadosAdmin CHAR(1)
DECLARE @ReSeed CHAR(1)
DECLARE @SQL VARCHAR(1000)

-- DECLARA O CURSOR QUE VAI PASSA PELAS TABELAS
DECLARE tables_cursor CURSOR FOR
SELECT name
from sysobjects
where xtype = 'U'
AND name IN()

-- ABRE O CURSOR E CARREGA AS VARIÁVEIS COM OS DADOS DA PRIMEIRA TABELA
OPEN tables_cursor
FETCH NEXT FROM tables_cursor INTO @Tabela

-- LOOP PARA PERCORRER TODAS AS TABELAS PRESENTES NO CURSOR
WHILE @@FETCH_STATUS = 0
BEGIN

-- SCRIPT PARA DESABILITAR TRIGGERS E CONSTRAINTS
SET @SQL = '
------------------------------------------------------------------
ALTER TABLE '
+ @Tabela + ' NOCHECK CONSTRAINT ALL
GO
ALTER TABLE '
+ @Tabela + ' DISABLE TRIGGER ALL
GO
------------------------------------------------------------------
'

--EXEC(@SQL)
PRINT(@SQL)


FETCH NEXT FROM tables_cursor INTO @Tabela
END

-- FECHA O CURSOR PARA RESETAR O LOOP
CLOSE tables_cursor

PRINT '
------------------------------------------------------------------
------------------------------------------------------------------
------ FIM DA DESABILITAÇÃO DE TRIGGERS E CONSTRAINTS ------
------------------------------------------------------------------
------------------------------------------------------------------
'


-- ABRE NOVAMENTE O CURSOR PARA EFETUAR O SEGUNDO LOOP
OPEN tables_cursor
FETCH NEXT FROM tables_cursor INTO @Tabela

WHILE @@FETCH_STATUS = 0
BEGIN

-- DELETA OS REGISTROS DA TABELA
SET @SQL = '------------------------------------------------------------------
DELETE FROM '
+ @Tabela
SET @ReSeed = '0'

-- HABILITA TRIGGERS E CONSTRAINTS
-- E RESETA A CONTAGEM SE A TABELA POSSUI UMA COLUNA IDENTITY
-- * SE A TABELA POSSUI DADOS DO ADMIN, A CONTAGEM DA IDENTITY RECEBE 1
-- PARA INICIAR EM 2 A PARTIR DO PRÓXIMO REGISTRO
SET @SQL = @SQL + '
GO
ALTER TABLE '
+ @Tabela + ' CHECK CONSTRAINT ALL
GO
ALTER TABLE '
+ @Tabela + ' ENABLE TRIGGER ALL
GO

IF OBJECTPROPERTY(OBJECT_ID('
'' + @Tabela + '''), ''TableHasIdentity'') = 1
BEGIN
DBCC CHECKIDENT ('
'' + @Tabela + ''',RESEED,' + @ReSeed + ')
END
GO
------------------------------------------------------------------
'

--EXEC(@SQL)
PRINT(@SQL)

FETCH NEXT FROM tables_cursor INTO @Tabela
END

-- EXEC(@SQL)
PRINT (@SQL)

CLOSE tables_cursor

DEALLOCATE tables_cursor

ROLLBACK TRAN

Créditos: Tiago Bandeira

terça-feira, 12 de outubro de 2010

BlogEngine.NET

BlogEngine.NET é uma ótima ferramenta para gerenciamento de conteúdo.

É fácil de configurar, personalizar e usar.

http://www.dotnetblogengine.net/

domingo, 3 de outubro de 2010

The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'

 

A Exception The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'.  However, the current database schema is not compatible with this version.  You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version. ocorre quando a tabela aspnet_SchemaVersions não contém a versão do MembershipProvider.

Para inserir os registros na tabela aspnet_SchemaVersions segue abaixo o script:

insert into aspnet_SchemaVersions values('common', 1, 1)
insert into aspnet_SchemaVersions values('health monitoring', 1, 1)
insert into aspnet_SchemaVersions values('membership', 1, 1)
insert into aspnet_SchemaVersions values('personalization', 1, 1)
insert into aspnet_SchemaVersions values('profile', 1, 1)
insert into aspnet_SchemaVersions values('role manager', 1, 1)