Jeg kan fint få dit eksempel til at virke (har dog pillet GR32-halløjet ud, da jeg ikke lige ved hvad er). Men jeg har brugt præcis samme kode til at lave en property på en komponent og selvom metoden virker fint her!
punkt 1 du skal create et object før du kan bruge, din FCode er ikke created, og så er der også noget med at du skal lave en FCode.Assign(Value) i din Set procedure, men det kan du se i hjælpen eller på TMemo.lines
jeg har i hvert fald lige lavet et test hvor jeg smider indholder fra en memo ind i RP.Code og derefter løber RP.Code igennem linie for linie og viser indholdet - det virker fint og har på intet tidspunkt created FCode... har bare created TRealismParser og det er det..
muligt, men man skal altså create sine klasse instanser ( var's ) i delphi, det er det vist ikke så meget tvivl om, jeg tror det står på side 2 i Object Pascal ref'en
hmmm nu så jeg lige efter i et af mine egne projekter - der må jeg indrømme at jeg creater de properties som er TStringList. Ved ikke lige hvorfor det virker uden i espeholt_jr's projekt...
hvis din comp. skal virke rigtig skal du create den og ikke bare køre din externe instans ind i din FCode, f.eks. hvis du free'er den instans du har kørt ind i FCode, så fejler din FCode, kig i hjælpen på hvordan du laver en TStrings prop. !!
Den er created i din TMemo - og du benytter den bare i ovenstående kode - den ER created - hvis du ikke har TMemo created, men skal benytte en anden TStrings, så skal du selv sørge for at den anden TStrings ER created før du benytter den i ovenstående kode.
Evt. lav et check for om FCode er created. Og ydermere udvide den med en variabel der afgør om du selv skal oprette + nedlægge FCode eller om du får en ude fra du skal bruge.
[Error] RealismParser.pas(33): Not enough actual parameters [Warning] RealismParser.pas(34): Constructing instance of 'TStrings' containing abstract method 'TStrings.Clear' [Fatal Error] dclusr.dpk(38): Could not compile used unit 'RealismParser.pas'
og nej det er ikke svært, men jeg har jo ikke din kode foran mig og du er ikke super delphi kode haj, og jeg sidder med noget tråd kode der driller, så... nogle gange smutter det lige
jeg har desværre ikke mere tid lige nu (møde venter), så giv du bare martinlind points... jeg vender lige tilbage sent i aften eller imorgen og tjekker om det kom til at virke - har også lidt meget om ørene, så undskyld hvis der har været nogle lidt-for-hurtige/mangelfulde svar ind imellem :)
og som martinlind siger - det er ikke særligt svært så 60 point er fint.. det som gør det lidt besværligt er for det første at du nedarver fra en komponent som vi ikke har/kender og for det andet lyder det til du ikke har helt styr på nogle grundlæggende principper.. men good luck og skal nok tjekke op på det senere...
TStringList ligger i sysutil eller classes kan ikke lige huske det, og du må lige læse op i hjælpen på hvordan og hvorfor man bruger TStrings og TStringList, det vil jeg foreslå dig at gøre for TStringList er en MEGET GUNDLÆGGENDE classe i delphi, og forøvrigt en super fed og kan bruges til 117 ting
så er jeg tilbage... og har tid til at kigge på det :-) der er fx en fejl her:
constructor TRealismParser.Create(aOwner:TComponent); begin inherited Create(self); FCode := TStrings.Create; end;
der skal stå: inherited Create(aOwner); og så er det først når du et sted skal create din instans at du kan kalde med self, fx: RP := TRealismParser.Create(Self)
når du har created den kan du add'e linier sådan: RP.Code.Add('dette er en test linie'); hvordan du ellers får linier ud og ind og manipulerer med dem kan du læse om i hjælpen til TStringList..
her er et lille eksempel hvor jeg nedarver fra en TEdit istedet for en TImgView32.. det skulle være let at sætte TImgView32 ind istedet:
--------- unit RealismParser;
interface
uses SysUtils, Classes, Controls, StdCtrls;
type TRealismParser = class(TEdit) private FCode: TStringList; Procedure SetCode(Value: TStringList); protected public Constructor Create(aOwner: TComponent); override; published property Code: TStringList read FCode write SetCode; end;
procedure Register;
implementation
constructor TRealismParser.Create(aOwner: TComponent); begin inherited create(aOwner); FCode := TStringList.Create; end;
procedure Register; begin RegisterComponents('Realism', [TRealismParser]); end;
procedure TRealismParser.SetCode(Value: TStringList); begin FCode.Assign(Value); end;
takker :) giver jer 50/50... da i begge har gjort en stor indsats :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.