Autor Beitrag
brainm
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 14.01.07 12:08 
Ich möchte gern wissen, ob es eine Möglichkeit gibt, Delphi-Komponenten in einer Unit neue Methoden oder Eigenschaften zu verpassen. Konkret geht es mir um Folgendes:

Ich möchte eine Prozedur bauen, die mir auf einem Image.Canvas eine Linie zeichnet (normalerweise brauchts dafür ja 2 Prozeduren, soviel ich weiß). Natürlich könnte ich einfach eine Methode von TForm1 machen, aber dann könnte ich die Prozedur z.B. nicht in einem with image1.Canvas do - Block aufrufen. Bitte nehmts mir nicht übel wenn ich einfach nur den Wald vor lauter Bäumen nicht sehe, aber ich bin nicht ganz so fit in OOP... :-(
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.01.07 12:15 
Erstmal :welcome: hier im Forum!

Hallo! Tja, ich weiß im Moment eigentlich nicht, wo das Problem liegt...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.DrawMyLine;
begin
  Image1.Canvas.MoveTo(2020);
  Image1.Canvas.LineTo(200100);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  with Image1.Canvas do
  begin
    Pen.Color := clRed;
    DrawMyLine;
  end;
end;

Meinst du das?

Wenn nicht: Um in Komponenten neue Methoden und Eigenschaften einzufügen, musst du eine neue eigene Komponente erstellen, die von TImage abgeleitet ist und diese neuen Sachen hinzufügt.
brainm Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 14.01.07 12:42 
Hm, ich dachte, er sucht dann nach Image1.Canvas.DrawMyLine, und findet das dann nicht...

Mit der neuen Komponente, das habe ich auch schon probiert, aber da fehlt mir noch ein bisschen was. Ich habe versucht, einfach eine Klasse TMyImage von TImage abzuleiten, und dann die zusätzliche Methode mit einzufügen. Wenn ich dann in der Deklaration von TForm1 die Zeile Image1: TImage; durch Image1: TMyImage; ersetze, meckert der Compiler, dass das Ding vom Typ TImage sein muss, und ändert es wieder um. Nehme an, dass der Compiler nicht "weiß", dass TMyImage im Prinzip das gleiche ist wie TImage...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 14.01.07 12:50 
1. Musst du eine neue Komponente auch in Delphi registrieren, sonst kannst du die auch in der IDE (also viesuell) nicht verwenden...
www.dsdt.info/tutorials/tswitch/
2. Ist die Anordnung der Komponenten auf dem Formular logischerweise noch woanders gespeichert. Klick mal mit rechts auf das Formular und dann auf "Als Text anzeigen" oder so...
Dort müsstest du es wenn überhaupt auch ändern. Aber wie gesagt: Erstmal muss die neue Komponente in der Komponentenpalette registriert sein.
3. Was with...do macht ist nur, dass es zunächst nachsieht, ob etwas dort zu finden ist und es dann erst woanders sucht. Es ist nur eine Abkürzung, damit du nicht ständig bspw. Image1.Canvas in jede Zeile schreiben musst...
Du kannst auch sowas machen:
ausblenden Delphi-Quelltext
1:
with Image1.Canvas, Form2.Button1 do					

Dann wird in beiden gesucht... Du kannst auch mehrere with ineinander verwenden...
brainm Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 14.01.07 12:52 
Achso, das wusste ich nicht, ich dachte er sucht dann wirklich nur in dem angegebenen Objekt. So ist das natürlich kein Problem. Vielen Dank für die schnelle Hilfe!
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 14.01.07 13:53 
könntest auch über eine helper-class probieren. einfach mal in der hilfe danach suchen.... <HTH>