Autor |
Beitrag |
n-regen
      
Beiträge: 202
Erhaltene Danke: 2
|
Verfasst: Sa 22.07.06 10:47
Hallo!
Ich hoffe, dass ich die Frage am richtigen Ort stelle, wenn nicht, bitte sagen.
Ich schreibe grad an einer neuen Komponente TNImage mit ein paar Zusatzfunktionen.
Wie komme ich jetzt innerhalb der Unit an die Komponente ran, die der User grad auf Form gesetzt hat?
Also:
Man verwendet ein NImage und startet eine Prozedur der Komponente, die auf die Komponente zugreift.
Wenn ich mich unklar ausgedrückt habe bitte schreiben.
|
|
n-regen 
      
Beiträge: 202
Erhaltene Danke: 2
|
Verfasst: Sa 22.07.06 10:50
Mir ist was aufgefallen, was vielleicht die Lösung sein könnte:
TNImage.Create(TForm).Picture.Bitmap
Ich weiß jetzt halt nicht, ob das hinhaut.
Was haltet ihr davon?
EDIT:
Delphi hält nix davon
[Fehler] NImage.pas(44): E2010 Inkompatible Typen: 'TComponent' und 'Class reference'
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 22.07.06 11:06
_________________ Markus Kinzler.
|
|
n-regen 
      
Beiträge: 202
Erhaltene Danke: 2
|
Verfasst: Sa 22.07.06 15:13
Äh, mir ist inzwischen aufgefallen, dass man damit ja nur ein NImage erstellt, aber ich will ja auf das zugreifen, das der Programmierer in sein Prog eingebaut hat.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 22.07.06 15:16
Self ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
n-regen 
      
Beiträge: 202
Erhaltene Danke: 2
|
Verfasst: Sa 22.07.06 17:06
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 22.07.06 17:10
Delphi-Quelltext
_________________ Markus Kinzler.
|
|
n-regen 
      
Beiträge: 202
Erhaltene Danke: 2
|
Verfasst: Sa 22.07.06 17:31
Undefinierter Bezeichner Form

|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Sa 22.07.06 17:34
Form steht für den Namen der Form und NImage für den des Images.
_________________ Markus Kinzler.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 22.07.06 17:44
|
|
n-regen 
      
Beiträge: 202
Erhaltene Danke: 2
|
Verfasst: Sa 22.07.06 19:54
Das isses ja: ich verwende das so:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77:
| unit NImage;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ComCtrls;
type TNImage = class(TImage) private protected public published end;
procedure Register;
procedure SmoothH;
implementation
procedure Register; begin RegisterComponents('Beispiele', [TNImage]); end;
procedure SmoothH; type PixArray = array [1..3] of Byte; var Pict, Bit: TBitmap; temp: record v1,v2,v3,n1,n2,n3: Byte; end; p,pt: ^PixArray; w,h: Integer; begin Bit := Self.Picture.Bitmap; Pict:= TBitmap.Create; Pict.Assign(Bit); for h:=0 to Bit.Height-1 do begin p:= Bit.ScanLine[h]; pt:= Pict.ScanLine[h]; for w:=0 to Bit.Width-3 do begin Inc(pt); temp.v1:= p^[1]; temp.v2:= p^[2]; temp.v3:= p^[3]; inc(p,2); temp.n1:= p^[1]; temp.n2:= p^[2]; temp.n3:= p^[3]; dec(p); pt^[1]:= (temp.v1+temp.n1+p^[1]) div 3; pt^[2]:= (temp.v2+temp.n2+p^[2]) div 3; pt^[3]:= (temp.v3+temp.n3+p^[3]) div 3; end; end; Bit.Assign(Pict); Pict.Free; Self.Picture.Bitmap := Bit; end;
end. |
Und dann kommt halt die Meldung!
:confused:
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 22.07.06 19:58
Eben, du schreibst deine Prozedur nicht in deine Komponente sondern nur in die Unit!
So musst du es machen:
(So ist deine Methode nach außen nicht sichtbar, sondern nur intern in der Komponentenunit zu benutzen, wenn jeder die benutzen können soll, musst du die unter public in deiner Komponente hinschreiben...)
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| type TNImage = class(TImage) private procedure SmoothH; protected public published end; procedure Register; implementation
procedure Register; begin RegisterComponents('Beispiele', [TNImage]); end;
procedure TNImage.SmoothH; ... |
|
|
n-regen 
      
Beiträge: 202
Erhaltene Danke: 2
|
Verfasst: So 23.07.06 08:03
|
|
n-regen 
      
Beiträge: 202
Erhaltene Danke: 2
|
Verfasst: So 23.07.06 09:06
Nun denn, die Unit ist vorerst fertig, jetzt weiss ich aber nicht, ob ich die hergeben darf, da die Funktionen von einem DSDT-Tutorial abgekupfert sind:
www.dsdt.info/tutorials/bitmap/
Bitmap-Tutorial von Mathias Leonhardt
Und jetzt ist das Problem, das ich seine Mail-Adresse nicht weiss, weil sie nicht dabei steht.
Ausserdem suche ich jetzt weitere Ideen, was für Funktionen TNImage noch brauchen könnte.
Derzeit gibt es nur Horizontal/Vertikal glätten und Einfärben.
|
|