TBitMap...não sei o que esta faltando ou o que sej ao erro..

28/03/2006

Olá,

vejam esta parte do meu codigo...não estou entendendo nada...na USes coloquei o JPEG e mesmo assim dar erro...:

procedure WallPapper(Image1:TImage);
var
Bitmap: TBitmap;
scwidth:integer;
scheight:integer;
begin
// IMAGEM DE FUNDO
Image1.visible:=false;
scwidth:=screen.width;
scheight:=screen.height;
Bitmap := TBitMap.Create; <<<<--- o erro acontece aqui...
Bitmap.Monochrome:=false;
Bitmap.canvas.Brush.color:=$00E1FFFF;
Bitmap.Width := scwidth; // 1024;
Bitmap.Height := scHeight; //780;
Image1.Picture.assign(Bitmap);
Bitmap.free;

o erro é : Object or Class Type required

valeu galera...

fabio cavalcanti


Cavalcanti.fabio

Respostas

28/03/2006

Massuda

No uses da unit onde está dando esse problema, coloque a unit Windows (já deve estar lá) [b:2c0ccbd05c]antes[/b:2c0ccbd05c] da unit Graphics (que também já deve estar lá); avise se por acaso não tiver a unit Windows ou se a unit Windows já estiver antes da Graphics.


Responder Citar

30/03/2006

Cavalcanti.fabio

Olá massuda...sim a unit windows esta antes de graphics...e continua o mesmo erro...muito estranho.

valeu,

fabio


Responder Citar

30/03/2006

Massuda

Experimente fazer assim...
...
  Bitmap: Graphics.TBitmap; 
...
  Bitmap := Graphics.TBitMap.Create;
...



Responder Citar

30/03/2006

Martins

Experimente fazer assim...
...
  Bitmap: Graphics.TBitmap; 
...
  Bitmap := Graphics.TBitMap.Create;
...


Curioso o código dele dá erro, olhando superficialmente me parece correto. Agora uma pergunta Massuda, se ele disse q a unit Graphics está declarada, da forma como vc está sugerindo vai mudar em q?


Responder Citar

30/03/2006

Massuda

se ele disse q a unit Graphics está declarada, da forma como vc está sugerindo vai mudar em q?
Existe um problema com o TBitmap quando você tem no uses as units Windows e Graphics.

Na unit Windows tem um [b:f0528cc957]record[/b:f0528cc957] com o nome TBitmap enquanto na unit Graphics tem uma [b:f0528cc957]classe[/b:f0528cc957] com o nome TBitmap.

P que acontece quando você escreve apenas TBitmap é que, dependendo da ordem das units no uses, o compilador interpreta TBitmap como sendo um record (que é o que deve estar acontecendo) ou como uma classe.

Usar Graphics.TBitmap indica ao compilador que você está se referindo ao TBitmap da unit Graphics.


Responder Citar

30/03/2006

Martins

[quote:e2b170ac90=´Martins´]se ele disse q a unit Graphics está declarada, da forma como vc está sugerindo vai mudar em q?
Existe um problema com o TBitmap quando você tem no uses as units Windows e Graphics.

Na unit Windows tem um [b:e2b170ac90]record[/b:e2b170ac90] com o nome TBitmap enquanto na unit Graphics tem uma [b:e2b170ac90]classe[/b:e2b170ac90] com o nome TBitmap.

P que acontece quando você escreve apenas TBitmap é que, dependendo da ordem das units no uses, o compilador interpreta TBitmap como sendo um record (que é o que deve estar acontecendo) ou como uma classe.

Usar Graphics.TBitmap indica ao compilador que você está se referindo ao TBitmap da unit Graphics.[/quote:e2b170ac90]

Blz [b:e2b170ac90]Massuda[/b:e2b170ac90], agora ficou claro, mas isso é um erro, sabe se ainda perdura nas versões mais novas do Delphi?


Responder Citar

30/03/2006

Massuda

mas isso é um erro, sabe se ainda perdura nas versões mais novas do Delphi?
Na verdade não é bem um erro... talvez uma pegadinha.

As regras de escopo da linguagem permitem que você use o mesmo nome/símbolo em units diferentes. Por exemplo, você pode ter em diferentes units uma mesma procedure de nome Iniciar e pode executar cada uma delas a partir de uma outra unit fazendo...
...
UnitA.Iniciar;
UnitB.Iniciar;
...



Responder Citar

30/03/2006

Adriano Santos

[quote:9438bacd52=´Martins´]mas isso é um erro, sabe se ainda perdura nas versões mais novas do Delphi?
Na verdade não é bem um erro... talvez uma pegadinha.

As regras de escopo da linguagem permitem que você use o mesmo nome/símbolo em units diferentes. Por exemplo, você pode ter em diferentes units uma mesma procedure de nome Iniciar e pode executar cada uma delas a partir de uma outra unit fazendo...
...
UnitA.Iniciar;
UnitB.Iniciar;
...
[/quote:9438bacd52]

[b:9438bacd52]Martins[/b:9438bacd52], acredito que já saiba disso, mas de qualquer forma, complementando o que o [b:9438bacd52]Massuda[/b:9438bacd52] mencionou sobre escopo, também é possível fazer isso na mesma unit, neste caso muda-se a assinatura da procudure e adiciona-se a palavra reservada [b:9438bacd52]overload[/b:9438bacd52];

...
  public
    { Public declarations }
    procedure Iniciar(AParam1, AParam2: String);overload;
    procedure Iniciar(AParam1, AParam2: Integer);overload;
  end;
...

Implentation

...

procedure TForm1.Iniciar(AParam1, AParam2: String);
begin
  ShowMessage(´Escopo 1´);
end;

procedure TForm1.Iniciar(AParam1, AParam2: Integer);
begin
  ShowMessage(´Escopo 2´);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Iniciar(´A´,´B´);
  Iniciar(0,1);
end;


Mas isso é para outro propósito, exemplifiquei apenas para que fique registrado caso não saiba.


Responder Citar

30/03/2006

Cavalcanti.fabio

valeu deu certo...

fabio


Responder Citar

30/03/2006

Martins

[quote][quote:81ab409555=´Martins´]mas isso é um erro, sabe se ainda perdura nas versões mais novas do Delphi?
Na verdade não é bem um erro... talvez uma pegadinha.

As regras de escopo da linguagem permitem que você use o mesmo nome/símbolo em units diferentes. Por exemplo, você pode ter em diferentes units uma mesma procedure de nome Iniciar e pode executar cada uma delas a partir de uma outra unit fazendo...
...
UnitA.Iniciar;
UnitB.Iniciar;
...
[/quote:81ab409555]

[b:81ab409555]Martins[/b:81ab409555], acredito que já saiba disso, mas de qualquer forma, complementando o que o [b:81ab409555]Massuda[/b:81ab409555] mencionou sobre escopo, também é possível fazer isso na mesma unit, neste caso muda-se a assinatura da procudure e adiciona-se a palavra reservada [b:81ab409555]overload[/b:81ab409555];

...
  public
    { Public declarations }
    procedure Iniciar(AParam1, AParam2: String);overload;
    procedure Iniciar(AParam1, AParam2: Integer);overload;
  end;
...

Implentation

...

procedure TForm1.Iniciar(AParam1, AParam2: String);
begin
  ShowMessage(´Escopo 1´);
end;

procedure TForm1.Iniciar(AParam1, AParam2: Integer);
begin
  ShowMessage(´Escopo 2´);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Iniciar(´A´,´B´);
  Iniciar(0,1);
end;


Mas isso é para outro propósito, exemplifiquei apenas para que fique registrado caso não saiba.[/quote:81ab409555]
Blz [b:81ab409555]Massuda[/b:81ab409555] e [b:81ab409555]Adriano[/b:81ab409555], tranquilo, isso eu já sabia, faço uso da palavra reservada [b:81ab409555]overload[/b:81ab409555] em uma unit de pesquisa q eu tenho aqui.

Mas, valew!!!


Responder Citar