Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   canvas brush color clBlack geht nicht (https://www.delphipraxis.net/191284-canvas-brush-color-clblack-geht-nicht.html)

LoZe 29. Dez 2016 12:57

Delphi-Version: 10 Berlin

canvas brush color clBlack geht nicht
 
Hallo, ich bin ganz neu in Delphi.
ich versuch grad ein Rechteck zu zeichnen welches schwarz gefüllt wird und eine tranzparenz hat.
Farbig geht es nur schwarz wird nicht angezeigt was habe ich übersehen

Delphi-Quellcode:

  b1 := TBitmap.Create;
  b1.SetSize(1000,1000);
  b1.Canvas.Brush.Color:=clBlue; // hier sollte clBlack rein
  b1.Canvas.FillRect(Rect(0,0,1000,1000));
  form5.Canvas.Draw(0,0,b1,$15);
sorry für meine dumme Frage aber ich komm echt nicht weiter

bernau 29. Dez 2016 15:14

AW: canvas brush color clBlack geht nicht
 
Wo hast du denn die Transparenz definiert?

Häng doch mal Bilder an. Einmal mit clblue und einmal mit clblack.

EWeiss 29. Dez 2016 16:44

AW: canvas brush color clBlack geht nicht
 
Zitat:

einmal mit clblack.
Wie soll er das machen wenn er sagt das clBlack nicht geht?

gruss

LoZe 29. Dez 2016 16:55

AW: canvas brush color clBlack geht nicht
 
vielen dank für die Antwort,
durch dein nachfragen ist mir aufgefallen das man in dem Form noch die TransparentColor und Value einstellen kann und die war auf Schwarz.

jetzt wird schwarz auch angezeigt.

nur hab ich nur noch das Problem das der Arbeitsspeicher immer mehr wird bis er voll ist und das system einfriert.

Unten mal der ganze Code, es soll dieser Matrix Rain Effekt sein.

Delphi-Quellcode:
unit Unit5;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls;

type
  TForm5 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form5:         TForm5;
  screenx:       integer;
  screeny:       integer;
  y,x:           integer;
  drop: array[0..200] of integer;
  chars:         string;
  fsizey,fsizex: integer;
  colums,rows:   integer;
  neuerwert:     integer;


implementation

{$R *.dfm}

procedure draw();
var
  b1:    TBitmap;
  i:     integer;
  vertikal: integer;

begin
  b1 := TBitmap.Create;
  b1.SetSize(screenx,screeny);
  b1.Canvas.Brush.Color:=clblack;
  b1.Canvas.FillRect(Rect(0,0,screenx,screeny));

  for i:= 0 to colums do
  begin
    if (drop[i] < rows) and (drop[i] > -1) then
    begin

      form5.Canvas.TextOut(i * fsizex, drop[i] * fsizey, chars[random(length(chars))]);
      neuerwert:= drop[i] + 1;
      drop[i]:= neuerwert;
    end
    else
    begin
      drop[i]:=-1;
    end;
    if (drop[i] = -1) then
    begin
      if random(40) = 1 then
      begin
        drop[i]:= 0
      end;
    end;
  end;

  form5.Canvas.Draw(0,0,b1,$15);
  if y < rows then y:= y + 1;
  if y = rows then y:= 0;


end;

procedure TForm5.FormCreate(Sender: TObject);
var
i: integer;
begin
  form5.Width:= 1920;
  form5.Height:= 1080;
  screenx:= form5.Width;
  screeny:= form5.Height;

  form5.Canvas.Font.Name := 'Segoe UI';
  form5.Canvas.Font.Color := clAqua;
  form5.Canvas.Font.Style := [];
  form5.Canvas.Font.Height := 20;
  form5.Canvas.Brush.Style:=bsClear;
  fsizex:= 10; // Vertikaler Abstand
  fsizey:= 20; // Horizontaler Abstand
  colums:= screenx div fsizex;
  rows:= screeny div fsizey;
  chars:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890~!@#$%^&*()-_=+`[]{};:?/.,<>\\|';
  y:=0;
  for i:= 0 to colums do
  begin
    drop[i]:= 0;
  end;
end;

procedure TForm5.Timer1Timer(Sender: TObject);
begin
   draw
end;

end.

LoZe 29. Dez 2016 16:57

AW: canvas brush color clBlack geht nicht
 
meine Vermutung ist das er immer wieder bilder öffnet bis er dan Ram voll hat kann ich irgendwie eine Begrenzung rein machen das er nur 50 oder so öffnet und die alten dann löscht?

EWeiss 29. Dez 2016 16:58

AW: canvas brush color clBlack geht nicht
 
Liegt wohl daran das du das Bitmap nicht frei gibst.
b1.Free;

gruss

LoZe 29. Dez 2016 17:02

AW: canvas brush color clBlack geht nicht
 
oh ja vielen dank, so läuft es ohne den RAM vollzumachen.

wie ist das zu handeln mit dem Freimachen wann muss ich das immer machen?
also nicht im code sondern in welchen situationen?

EWeiss 29. Dez 2016 17:05

AW: canvas brush color clBlack geht nicht
 
Zitat:

Zitat von LoZe (Beitrag 1357470)
oh ja vielen dank, so läuft es ohne den RAM vollzumachen

Vielleicht solltest du b1 mit einen Aussagekräftigen Namen versehen.

Bsp.
Delphi-Quellcode:
Bitmap : TBitmap
Bitmap := TBitmap.Create.
Aber natürlich geht auch b1.

Zitat:

wie ist das zu handeln mit dem Freimachen wann muss ich das immer machen?
Wenn du etwas erstellst musst du es auch wieder freigeben wenn es nicht mehr verwendet wird. Das ist die Grundregel.

gruss

LoZe 29. Dez 2016 17:10

AW: canvas brush color clBlack geht nicht
 
Vielen dank hat mir sehr geholfen.
werd mich an die grundregel halten :-D

ps.: b1 ist in Bitmap geändert

EWeiss 29. Dez 2016 17:14

AW: canvas brush color clBlack geht nicht
 
Nochmal step by step

Delphi-Quellcode:
var
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create;
  // zeichne oder mach was mit Bitmap
  // ...
  // Speicher Freigeben
  Bitmap.Free;
  // oder Speicher Freigeben und das Object TBitmap auf Nil setzen.
  FreeAndNil(Bitmap);
end
gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz