|
Lista av objekt
2009-05-30 13:45 - Kurret [Registrerad 2009-05-30]
|
Hej! Jag skulle behöva hjälp med att skapa en lista som kan lagra object. Ska fungera ungefär som en array, bara att man inte ska behöva begränsa storleken från början, samt att den lagrar på samma sätt som tlistbox. Har försökt med objektet tlist men får det aldrig att fungera. har delphi 7.
|
|
|
|
Lista av objekt
2009-05-31 09:36 - sberg [Registrerad 2004-04-20]
|
Hej!
Jag tror du ska använda dig av TObjectList. Den kan inte bara lagra objekt av olika storlek utan även många olika typer av objekt.
På denna sida hittar du ett bra exempel:
http://www.howtodothings.com/computers/a1110-using-tobjectlist.html
mvh Staffan
|
|
|
|
Lista av objekt
2009-05-31 20:17 - Kurret [Registrerad 2009-05-30]
|
Ja jag testade med den också, men jag får bara "[Error] Unit1.pas(14): Undeclared identifier: 'tobjectlist'" ??? som om det inte finns någon klass som heter tobjectlist.
|
|
|
|
Lista av objekt
2009-06-02 08:11 - sberg [Registrerad 2004-04-20]
|
Hej igen!
Ja, utan att veta kanske det kan vara så att TObjectList-klassen inte finns i din Delphi-version. Vad kör du för version (Professional, Enterprise, Standard)?
|
|
|
|
Lista av objekt
2009-06-02 10:01 - Kurret [Registrerad 2009-05-30]
|
Delphi 7, Enterprise
|
|
|
|
Lista av objekt
2009-06-02 12:00 - sberg [Registrerad 2004-04-20]
|
Har du deklarerat variabeln i procedurhuvudet?
Det fanns inte med i exemplet men det borde vara så.
|
|
|
|
Lista av objekt
2009-06-02 14:06 - Kurret [Registrerad 2009-05-30]
|
yes. Nu gjorde jag en helt ny applikation, och de enda jag gjort är: procedure TForm1.Button1Click(Sender: TObject); var flist:tobjectlist; begin // end; och när jag kör får jag: [Error] Unit1.pas(28): Undeclared identifier: 'tobjectlist' [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
=/
|
|
|
|
Lista av objekt
2009-06-02 14:31 - sberg [Registrerad 2004-04-20]
|
Prova att lägga till Contnrs under Uses och testkör igen.
|
|
|
|
Lista av objekt
2009-06-02 22:42 - Kurret [Registrerad 2009-05-30]
|
yes nu verkar det fungera! Tack så mycket! ska kolla den d'r guiden nu! :) men vad var det egentligen för paket jag la till??
|
|
|
|
Lista av objekt
2009-06-03 06:14 - sberg [Registrerad 2004-04-20]
|
Det är ett paket med ett gäng olika klasser som man kanske inte använder så ofta.
http://delphi.wikia.com/wiki/Category:Contnrs_Unit
|
|
|
|
Lista av objekt
2009-06-13 11:43 - Kurret [Registrerad 2009-05-30]
|
Nu har jag börjat få det att fungera, men jag har ett problem. jag har två olika klasser, cirklar och linjer, som båda lagras i objektlistan. Jag vill ha en loop som går igenom varje objekt i listan och tillkallar metoden draw, som både cirklarna och linjerna har. Dock så blir det ju problem eftersom det är ju olika metoder egentligen, även om de har samma namn (jag testade byta namn men det spelade ingen roll) så vad jag skulle behöva är en sats som frågar om objektet är av klassen cirkel eller klassen linje. Hur gör man det? eller finns det något annat sätt att gå runt problemet? Jag testade typ Try circle(list[i]).draw except och liknande utan någon framgång alls.
edit: nu ser jag att guiden har en lite lik funktion. Jag skulle väl kunna slänga över object i i en temporär objektlista, använda finsinstanceof i den listan för att få fram vilket object som hamnat där, men det känns lite omständigt. Finns det någon mer direkt metod?
Edit2: ja det var ju så lätt som att kolla list[j].classname >_<
Sen har jag en liten sidofråga också som ajg alltid haft problem med. När man använder funktionen GetCursorPos(tpoint), så får man ju positionen på skärmen. Sedan drar jag av formens left och top för att få position i formen, men då missar man ~20 pixlar över och ~5 pixlar på sidan pga formens "ram". Hur kan man få en exakt position inuti formen för musmarkören? Det går inte att bara dra av 5 och 20 eftersom ramens tjocklek varierar med vilket utseende man har valt i windows/om man har annat operativsystem.
|
|
|
|
Lista av objekt
2009-06-16 09:01 - sberg [Registrerad 2004-04-20]
|
Hej!
>Hur kan man få en exakt position inuti formen för musmarkören?
Kan du inte bara använda egenskaperna Top och Left för att få positionen inuti formen? Då spelar det ju egentligen ingen roll var på skärmen formen befinner sig eller hur ramarna ser ut. Eller missförstår jag dig?
|
|
|
|
Lista av objekt
2009-06-19 11:12 - Kurret [Registrerad 2009-05-30]
|
Nu förstår jag inte riktigt hur du menar. menar du form.left/top? Eller finns det något top/left för musmarkören direkt?
Det jag gjorde var att hitta musens position på skärmen. Men musens position i formen börjar vid ramen insida, medan formens position slutar vid ramens utsida, så för att ta reda på positionen i formen måste jag dra av ramen, vilken varierar med utseendet på operativsystemet.
|
|
|
|
Lista av objekt
2009-06-20 09:57 - sberg [Registrerad 2004-04-20]
|
Hej igen!
Det var nog jag som missförstod lite.
Men du kan använda ClientToScreen i OnMouseMove-eventet för att få fram musens position enligt detta exempel:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var pt: TPoint;
begin pt := ClientToScreen(point(x, y)) ; label1.Caption := inttostr(pt.x); //Left-positionen label2.Caption := inttostr(pt.y); //Top-positionen end;
|
Sedan återstår det lite trixande för att bestämma ramarnas variabla tjocklek. Det har jag dock ingen lösning på just nu. Återkommer om jag finner någon bra lösning.
mvh Staffan
|
|
|