AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Etwas in eine Message Box zeichnen (Canvas)

Ein Thema von isocam · begonnen am 23. Mai 2004 · letzter Beitrag vom 25. Mai 2004
Antwort Antwort
Seite 1 von 2  1 2      
isocam

Registriert seit: 22. Mai 2004
Ort: Berlin
16 Beiträge
 
Delphi 6 Personal
 
#1

Etwas in eine Message Box zeichnen (Canvas)

  Alt 23. Mai 2004, 20:39
hallo,

Ich möchte gerne in eine MessageBox etwas zeichnen, zb. einen Farbverlauf.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,f,r,g:Integer;
begin

with CreateMessageDialog('Wie gehts ?',mtquestion,[mbyes,mbno]) do try
 ...
 f:=Round(255/Height);
 r:=0;
 g:=255;
 Canvas.Pen.Color:=RGB(r,g,100);
 FOR i:=0 TO Height do begin
  Canvas.MoveTo(0,i);
  Canvas.LineTo(Width,i);
  Inc(r,f);
  Dec(g,f);
  Canvas.Pen.Color:=RGB(r,g,100);
 end;
 repaint;
 ...
 finally
 ...
end;
end;
Ich habe diesen Code benutzt, um einen Farbverlauf in die MessageBox zu zeichnen. Aber es ist nur dieses schnöde Windowsgrau zu sehen. Keine Fehlermeldung vom Compiler.
Wäre schön, wenn mir jemand helfen könnte.
Alex
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Etwas in eine Message Box zeichnen (Canvas)

  Alt 23. Mai 2004, 20:52
Moin isocam,

das Problem wird sein, dass das Grau Standard ist.
Damit der Farbverlauf angezeigt wird, müsstest Du ihn zu dem Zeitpunkt aufbringen, wenn der Dialog gezeichnet wird, also müsstest Du noch eine Methode vom Typ TNotifyEvent einbauen, die dann dem OnPaint des Dialoges zugwiesen wird.
In dieser Methode wird dann der Verlauf gezeichnet.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#3

geht so nicht!

  Alt 23. Mai 2004, 20:53
Dazu müsstest Du die Zeichenroutine im OnPaint-Ereignis unterbringen.

So wird zwar einmal der Farbverlauf temporär auf das Canvas gezeichnet, aber sobald dieser neu gezeichnet werden muß (z.B. wenn Formular angezeigt wird, wird der Cancas gelöscht.

Eine Möglichkeit wäre z.B. im Hintergrund des Formulars ein Image abzulegen, welcher den Farbverlauf beinhaltet.
  Mit Zitat antworten Zitat
isocam

Registriert seit: 22. Mai 2004
Ort: Berlin
16 Beiträge
 
Delphi 6 Personal
 
#4

Re: Etwas in eine Message Box zeichnen (Canvas)

  Alt 23. Mai 2004, 20:58
Und wie mache ich das?
(Ich bin kein Experte.)
Alex
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Etwas in eine Message Box zeichnen (Canvas)

  Alt 23. Mai 2004, 21:14
Moin isocam,

mal ein Beispiel:

Delphi-Quellcode:
type
  TForm1 = class(TForm)
    //...
    // OnPaint für den Dialog
    procedure MessageDlgPaint(Sender: TObject);
  private
    { Private-Deklarationen }
    FMessageDlg : TForm;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FMessageDlg := CreateMessageDialog('Wie gehts ?',mtWarning,[mbyes,mbno]);
  FMessageDlg.OnPaint := MessageDlgPaint;
end;

procedure TForm1.MessageDlgPaint(Sender: TObject);

var
  i,f,r,g:Integer;

begin
  f:=Round(255/Height);
  r:=0;
  g:=255;
  FMessageDlg.Canvas.Pen.Color:=RGB(r,g,100);
  for i:=0 TO FMessageDlg.Height do begin
    FMessageDlg.Canvas.MoveTo(0,i);
    FMessageDlg.Canvas.LineTo(Width,i);
    Inc(r,f);
    Dec(g,f);
    FMessageDlg.Canvas.Pen.Color:=RGB(r,g,100);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if FMessageDlg.Showmodal = mrNo then exit;
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Etwas in eine Message Box zeichnen (Canvas)

  Alt 23. Mai 2004, 21:16
Gerade fertig geworden - aber schon wieder zu langsam
  Mit Zitat antworten Zitat
isocam

Registriert seit: 22. Mai 2004
Ort: Berlin
16 Beiträge
 
Delphi 6 Personal
 
#7

Re: Etwas in eine Message Box zeichnen (Canvas)

  Alt 23. Mai 2004, 21:21
Danke für die Hilfe.
Das verstehe ich aber nicht. (vielleicht morgen wenn ich konzentriert bin)
Alex
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Etwas in eine Message Box zeichnen (Canvas)

  Alt 23. Mai 2004, 21:44
Moin isocam,

FMessageDlg ist ein privates Feld des Hauptformulares. Irgenwo muss der Dialog ja gespeichert werden, damit er mehrfach genutzt werden kann.
MessageDlgPaint ist das TNotifyEvent, dass der OnPaint Eigenschaft des Dialoges zugewiesen werden soll.

Beim Erzeugen des Hauptformulares werden dann der Dialog erzeugt, und die OnPaint Routine zugewiesen.

Die MessageDlgPaint Methode enthält dann das, was auf das Dialogformular gezeichnet werden soll, wenn es gezeichnet wird.
Diese Routine wird automatisch immer dann aufgerufen, wenn das Formular neu gezeichnet wird.

Bei der ButtonClick Methode handelt es sich nur um ein Beispiel den Dialog anzuzeigen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
isocam

Registriert seit: 22. Mai 2004
Ort: Berlin
16 Beiträge
 
Delphi 6 Personal
 
#9

Re: Etwas in eine Message Box zeichnen (Canvas)

  Alt 24. Mai 2004, 18:54
Vielen Dank.
Ich denke, dass ich es jetzt verstanden habe und anwenden kann.
Alex
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Etwas in eine Message Box zeichnen (Canvas)

  Alt 24. Mai 2004, 19:25
Hallo Christian,
guter Vorschlag! Nur leider ist das Label nicht transparent.
Das Label ist aber ein privates Feld von TMessageForm. Dummerweise
ist TMessageForm im implementation Abschnit von Dialogs implementiert.
Damit der Compiler nicht zickt habe ich die Deklaration in der
Form-unit einfach wiederholt:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    FMessageDlg : TForm;
    procedure MessageDlgPaint(Sender: TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.MessageDlgPaint(Sender: TObject);
var
  i,f,r,g:Integer;
begin
  f:=Round(255/Height);
  r:=0;
  g:=255;
  FMessageDlg.Canvas.Pen.Color:=RGB(r,g,100);
  for i:=0 TO FMessageDlg.Height do begin
    FMessageDlg.Canvas.MoveTo(0,i);
    FMessageDlg.Canvas.LineTo(Width,i);
    Inc(r,f);
    Dec(g,f);
    FMessageDlg.Canvas.Pen.Color:=RGB(r,g,100);
  end;
end;

Type
  TMessageForm = class(TForm)
  private
    Message: TLabel;
  end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FMessageDlg := CreateMessageDialog('Wie gehts ?',mtWarning,[mbyes,mbno]);
  TMessageForm(FMessageDlg).Message.Transparent:=True;
  FMessageDlg.OnPaint := MessageDlgPaint;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if FMessageDlg.Showmodal = mrNo then exit;

end;

end.
Komischerweise funktioniert das. Ich weiss aber nicht warum und habe deshalb ein ungutes Gefühl.
Evt. habe ich auch gerade ein Brett vor dem Kopf. Weiss jemand warum das hier klappt?
Oder sollte man soetwas nicht machen?
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:15 Uhr.
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