Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Parameterübergabe Sender: TObject wie? (https://www.delphipraxis.net/160659-parameteruebergabe-sender-tobject-wie.html)

DeddyH 25. Mai 2011 09:11

AW: Parameterübergabe Sender: TObject wie?
 
Abgesehen davon überdauert ein Canvas.Textout ein Neuzeichnen nicht.

himitsu 25. Mai 2011 09:15

AW: Parameterübergabe Sender: TObject wie?
 
Zitat:

Zitat von madina (Beitrag 1102744)
ich habe folgenden Quellkode, wo ich aus TfrmMain den Procedure frmMain.Zeige(frmMain); aufrufe => kein Problem gibt er mir den 'Hallo' String aus im TfrmMain.

Frage: wenn ich aus Tform1 frmMain.Zeige(form1); aufrufe => zeigt er den 'Hallo' String nicht aus im form1. Warum??

Delphi-Quellcode:
Procedure TfrmMain.Zeige(Sender: TObject);
begin
  with Sender do
    begin
      Canvas.TextOut(X, Y, 'Hallo');
    end
end

Tja, da haben wir das böse WITH, denn eigentlich sieht es so aus, da TObjekt kein Canvas besitzt.
Delphi-Quellcode:
Procedure TfrmMain.Zeige(Sender: TObject);
begin
  with Sender do
    begin
      Self.Canvas.TextOut(X, Y, 'Hallo');
    end
end
Es wird also erfogreich gezeichnet, aber eben immer nur auf der Form, worin diese Zeichenmethode rumliegt.

DeddyH 25. Mai 2011 09:18

AW: Parameterübergabe Sender: TObject wie?
 
Der Sender ist ja schon auf TForm geändert.

Satty67 25. Mai 2011 10:04

AW: Parameterübergabe Sender: TObject wie?
 
Man könnte versuchen, die Fehler-Ursache einzugrenzen:

Delphi-Quellcode:
Procedure TfrmMain.Zeige(Sender: TObject);
var
  AForm : TCustomForm;
begin
  if Sender is TCustomForm then
  begin
    AForm := TCustomForm(Sender);
    AForm.Canvas.TextOut(X, Y, 'Hallo');
    ShowMessage(Format('Ausgabe auf %s.%s %dx%d', [AForm.ClassName, AForm.Name, x, y]));
  end
  else
    ShowMessage(Format('Kein Ausgabe auf %s', [Sender.ClassName]));
end;
€: die Variante mit TForm als Parameter würde ein Cast unnötig machen.

angos 25. Mai 2011 10:05

AW: Parameterübergabe Sender: TObject wie?
 
Wie DeddyH schon geschrieben hat, vermute! ich mal, dass du das einfach an der falschen Stelle ausführst.
Die Zeichnung solltest im OnPaint des Formulars durchführen.
Außerdem solltest du, falls sich der auszugebende Text ändert, nach dieser Änderung ein Form1.Invalidate aufrufen, damit ein Neuzeichnen überhaupt stattfindet.

HTH

Gruß
angos

Satty67 25. Mai 2011 10:16

AW: Parameterübergabe Sender: TObject wie?
 
Zitat:

Zitat von angos (Beitrag 1102780)
Die Zeichnung solltest im OnPaint des Formulars durchführen.

Das sowieso, deshalb dachte ich auch, sollte man die (erfolgreiche) Ausgabe resistenter visualisieren (mit ShowMessage) ;)

Zum besseren Verständnis für den den/die TS:

Windows zeichnet den Inhalt eines Fensters bei vielen Gelegenheiten neu. Da reicht schon ein Verschieben oder Umbenennen eines darauf befindlichen Elements. Windows ruft dazu (quasi) die Methode Paint auf. Alles was nun nicht innerhalb der Methode Paint gezeichnet/geschrieben wurde, ist damit hinfällig und wird (wenn es schnell geht) scheinbar garnicht gezeichnet.

SirThornberry 25. Mai 2011 12:29

AW: Parameterübergabe Sender: TObject wie?
 
woher kommen eigentlich x und y?


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:27 Uhr.
Seite 2 von 2     12   

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