- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 

FuzzyDizzie » Delphi » Forum
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?



var
FList:TObjectList;


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



 


 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -