Anfangshürden

Für Fragen von Einsteigern und Programmieranfängern...
AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Anfangshürden

Beitrag von AlterMann »

Hallo Programmierer

Ich habe mich entschlossen nach fast 20 Jahren wieder ein bißchen zu programmieren.
Damals habe ich (auch recht große) obejktorientiete Projekte in BP6.0 geschrieben (auch beruflich) jedoch damit aufgehört als Windows groß rauskam.
Es war mir einfach zu mühsam erst alle möglichen Vorarbeiten zu leisten, nur um Windows mitzuteilen, daß ich gerne ein Fenster öffnen möchte.

Dann hab ich den Anschluß verloren und eine ganz andere Richtung eingeschlagen.
Jetzt hab ich Lazarus endeckt und denke, daß man damit inzwischen recht komfortabel das ganze Beiwerk f. Win erledigen und, sich wieder auf das Wesentliche konzentrieren kann.

Nur irgendwie finde ich mich noch nicht ganz zurecht in der IDE.

Ich möchte innerhalb v. Form1 einen Rechteckigen Bereich festlegen in den zur Laufzeit Textelemente eingefügt und sortiert dargestellt werden.
Der Bereich soll umschaltbar sein, um eine andere Menge solcher Textelemente darzustellen (z.B. über Reiter oder RadioButtons)
Die Textelemente sollen dabei nicht als Text editierbar sein, aber evtl. Per Drag'n'Drop aus dem Bereich verschiebbar.

Jetzt stolpere ich in der (sehr üppig ausgestatteten) IDE herum.
Folgendes habe ich schon versucht:
  • TListview - Da kann man schon Elemente beim Start einfügen, aber irgendwie seh ich dann nicht wie es weitergeht.
    TTabControl - Das hätte schon die Tabs für die Auswahl, aber keine Ahnung wie ich da Inhalt ins Feld bekomme.
    TPageControl - Das ist zunächst ebenso leer, hat aber nichteinmal Tabs.
Irgendwie stehe ich auf der Leitung. Könnte mir jemand den passenden Tip (oder Tritt in den Allerwerteseten) geben, und sei es nur in Form eines Links auf die zündende Idee?

Anscheinend war es falsch, Anfang der 90er Delphi als neumodisches Glumpert abzutun ... :oops:

Grüße aus NÖ
Christian
Früher war alles besser. Und aus Holz!

Benutzeravatar
theo
Beiträge: 10940
Registriert: Mo 11. Sep 2006, 19:01

Re: Anfangshürden

Beitrag von theo »

Bei TPageControl kannst du durch Rechts-Click auf die Komponente zur Entwurfszeit Seiten hinzufügen.
Dann kannst du beispielsweise eine TListBox auf eine solche Seite platzieren (Align=alClient).
TListBox kannst du über das Property "Items" bearbeiten (Add, Delete etc.).
TListBox hat auch das Property "sorted".

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: Anfangshürden

Beitrag von AlterMann »

theo hat geschrieben:Bei TPageControl kannst du durch Rechts-Click auf die Komponente zur Entwurfszeit Seiten hinzufügen.

Das war so ein Hinweis wie ich meinte :D Rechtsklick! Danke!

Dann kannst du beispielsweise eine TListBox auf eine solche Seite platzieren (Align=alClient).

Supi. So nimmt das schon Formen an.

TListBox kannst du über das Property "Items" bearbeiten (Add, Delete etc.).
TListBox hat auch das Property "sorted".

Und wie kann ich Elemente zur LAufzeit einfügen?
Oder allgemeiner gefragt: Wo finde ich eine Liste der Methoden von TListbox?
Bis jetzt habe ich nur eine mit den Properties gefunden.

Vielen Dank für die schnelle Antwort, übrigens.
Früher war alles besser. Und aus Holz!

Benutzeravatar
theo
Beiträge: 10940
Registriert: Mo 11. Sep 2006, 19:01

Re: Anfangshürden

Beitrag von theo »

AlterMann hat geschrieben: TListBox kannst du über das Property "Items" bearbeiten (Add, Delete etc.).
Und wie kann ich Elemente zur LAufzeit einfügen?
Eben: ListBox1.Items.Add('Mein Text');
Oder: ListBox1.Items.LoadFromFile(...);
AlterMann hat geschrieben: Oder allgemeiner gefragt: Wo finde ich eine Liste der Methoden von TListbox?
Bis jetzt habe ich nur eine mit den Properties gefunden.
Im Source Editor das Caret auf den Text "TListBox" setzten und F1 drücken. Da kann man sich auch die Methoden anzeigen lassen.
Oder einfach hier: http://lazarus-ccr.sourceforge.net/docs ... stbox.html" onclick="window.open(this.href);return false;

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Anfangshürden

Beitrag von Hitman »

theo hat geschrieben:Im Source Editor das Caret auf den Text "TListBox" setzten und F1 drücken. Da kann man sich auch die Methoden anzeigen lassen.
Oder einfach hier: http://lazarus-ccr.sourceforge.net/docs ... stbox.html" onclick="window.open(this.href);return false;
... oder einfach mal im Source Editor "ListBox1." tippen und nach dem "." warten? Dafür haben wir doch die codetools.

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: Anfangshürden

Beitrag von AlterMann »

Danke für eure Geduld mit mir.
Hitman hat geschrieben: ... oder einfach mal im Source Editor "ListBox1." tippen und nach dem "." warten? Dafür haben wir doch die codetools.
Das ist fein.
Mir ist es nämlich sonst nirgends gelungen die Methoden von "Items" zu sehen.
theo hat geschrieben: Eben: ListBox1.Items.Add('Mein Text');
Oder: ListBox1.Items.LoadFromFile(...);
Das ist ja unglaublich. :D Früher mußten wir uns die Dateihandlingmethoden alle selbst schreiben.
Grad hab ich ListBox1.Items.LoadFromFile(...) und ListBox1.Items.SaveToFile(...) ausprobiert.
Das Ding macht ja schon fast alles von selbst.

Danke ihr beiden (Wird wohl nicht meine letzte Frage gewesen sein ... :roll: )
Früher war alles besser. Und aus Holz!

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: Anfangshürden

Beitrag von AlterMann »

AlterMann hat geschrieben:... wohl nicht meine letzte Frage gewesen sein ... :roll: )
Hat ja gar nicht lang gedauert.

Das funtioniert jetzt schon ganz prima, aber:
Ich möchte in eine ListBox die in einem Tabsheet einer Pagecontrol liegt ein Element hinzufügen.
Und zwar in jenem Tabsheet das gerade im Vordergrund zu sehen ist.
Mit Pagecontrol.ActivePage kann ich das Tabsheet referenzieren. Aber wie geht's weiter. Wie Referenziere ich die Listbox?

Langsam glaub ich ich bin schon zu alt für sowas ... :oops:
Früher war alles besser. Und aus Holz!

hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

Re: Anfangshürden

Beitrag von hendy »

Ach mensch alle fangen klein an :D
Kein Grund sich zu schämen
Dankt monta !!

hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

Re: Anfangshürden

Beitrag von hendy »

Sorry nicht reply gesehen.
Einfach mit Listbox1, also so wie man sachen auf der Form referenziert.
Ich denke es gibt da auch noch eine Child function, weiß aber nicht wirklich was darüber...
Dankt monta !!

Benutzeravatar
theo
Beiträge: 10940
Registriert: Mo 11. Sep 2006, 19:01

Re: Anfangshürden

Beitrag von theo »

Könnte man allgemein so machen:

Code: Alles auswählen

for i:=0 to PageControl1.ActivePage.ControlCount-1 do
if PageControl1.ActivePage.Controls[i] is TListBox then
begin
 ShowMessage(PageControl1.ActivePage.Controls[i].Name); //erste gefunden
 break;
end;

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: Anfangshürden

Beitrag von AlterMann »

Verständnisfrage:

Danke theo, das funktioniert zum Anzeigen hervorragend.

Natürlich möchte ich ja auch auf die ListBox zugreifen (add).
Die Zeile

Code: Alles auswählen

if PageControl2.ActivePage.Controls[i] is TListBox then
überprüft doch von welchem Typ "PageControl2.ActivePage.Controls" ist.

Wenn ich jedoch anschließend versuche diesen Ausdruck einer Variable vom Typ TListBox (namens AktiveLB) so zuzuweisen:

Code: Alles auswählen

AktiveLB := PageControl2.ActivePage.Controls[i];
bekomme ich einen Type mismatch (got TControl, expected TListBox)

Grüße
Christian
Früher war alles besser. Und aus Holz!

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Anfangshürden

Beitrag von monta »

Überprüft schon, allerdings musst du dann noch einen Typecast machen, da auch wenn das eine TListBox ist, immer ein TControl als Oberklasse zurückgegeben wird.

So sollte es funktionieren:

Code: Alles auswählen

AktiveLB := TList_Box(PageControl2.ActivePage.Controls[i]);
Sollte man natürlich nur verwenden, wenn man wie du, vorher auch sichergestellt hat, das Controls auch mit der Klasse, auf die gecastet werden soll, kompatibel ist.
Johannes

AlterMann
Beiträge: 238
Registriert: So 13. Dez 2009, 09:43
OS, Lazarus, FPC: Lazarus 3.0 (rev lazarus_3_0) FPC 3.2.2 i386-win32-win32/win64
CPU-Target: x86 64Bit
Wohnort: Niederösterreich

Re: Anfangshürden

Beitrag von AlterMann »

Wahnsinn. Darauf muß man einmal kommen.
Danke!
Früher war alles besser. Und aus Holz!

Benutzeravatar
theo
Beiträge: 10940
Registriert: Mo 11. Sep 2006, 19:01

Re: Anfangshürden

Beitrag von theo »

Als Gegenstück zu "Is" geht as "As":
http://www.delphibasics.co.uk/RTL.asp?Name=As" onclick="window.open(this.href);return false;

Also:

Code: Alles auswählen

if PageControl2.ActivePage.Controls[i] is TListBox then
   AktiveLB := PageControl2.ActivePage.Controls[i] as TListBox;

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Anfangshürden

Beitrag von Hitman »

Das wäre in dem Kontext aber Quark. "As" führt nochmal einen Typ-Check durch, das wäre mehr als sinnlos. Hier sollte man also durchaus beim "direkten" Cast bleiben, wenn man ohnehin vorher schon auf den Typ geprüft hat.

Antworten