![]() |
non-Vcl Programm mit Listbox
Hallo Leute, ich würde gerne ein kleines Hobby-Projekt starten wollen aber mir fehlt da noch etwas Starthilfe.
Ich würde gerne eine non-Vcl Anwendung programmieren mit einer Listbox und einem Knopf. Ein paar informationen zu diesem Thema habe ich auch schon gefunden, so das ich in der Lage bin über eine .res Datei einen Dialog abzurufen der eine Listbox und einen Knopf darstellt. Beispiele um auf den Knopf zu reagieren habe ich auch verstanden und komme damit klar. Aber die Listbox, mit der komme ich nicht klar. Ich würde gerne so etwas in der Art haben wollen: Eine Listbox mit Überschrift aufgeteilt in 2 Columns wo ich in Column 1 ein Icon + "String" ausgebe und Column 2 nur ein "String". Kann mir dabei bitte jemand helfen wie ich das hinbekomme? Ich schaffe es nichtmal einen einzigen Eintrag zu erzeugen. |
AW: non-Vcl Programm mit Listbox
Ich habe es nun umgestellt, von .res direkt in den Hauptcode.
So sieht es bis jetzt aus:
Delphi-Quellcode:
Doch wie fülle ich Listbox, und wie werden daraus 2 Columns?
program DStart;
uses SysUtils, Windows, Messages, ShellApi, Vcl.Dialogs; const ClassName = 'WndClass'; AppName = 'DStart'; WindowWidth = 450; WindowHeight =450; FontName = 'Verdana'; FontSize = -12; const IDC_BUTTON = 1; IDC_LBITEMS = 2; var hWndListBox: DWORD; StdFont: hFont; function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam): lresult; stdcall; var x, y : integer; dwEntriesRead: DWORD; i: integer; begin Result := 0; case uMsg of WM_CREATE: begin x := GetSystemMetrics(SM_CXSCREEN); y := GetSystemMetrics(SM_CYSCREEN); MoveWindow(hWnd, (x div 2) - (WindowWidth div 2), (y div 2) - (WindowHeight div 2), WindowWidth, WindowHeight, true); hWndListBox := CreateWindowEx(WS_EX_CLIENTEDGE, 'ListBox', 'ListBox', WS_VISIBLE or WS_CHILD or LBS_SORT or LBS_STANDARD,150, 75, 180, 100, hWnd, IDC_LBITEMS, hInstance, nil); StdFont := CreateFont(FontSize, 0, 0, 0, 0, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, FontName); if StdFont <> 0 then begin SendMessage(hWndListBox, WM_SETFONT, Integer(StdFont), Integer(true)); end; end; WM_DESTROY: PostQuitMessage(0); WM_COMMAND: begin if hiword(wParam) = BN_CLICKED then case loword(wParam) of IDC_BUTTON: begin // do end; end; end; else Result := DefWindowProc(hWnd, uMsg, wParam, lParam); end; end; var wc: TWndClassEx = ( cbSize : SizeOf(TWndClassEx); Style : CS_HREDRAW or CS_VREDRAW; lpfnWndProc : @WndProc; cbClsExtra : 0; cbWndExtra : 0; hbrBackground : COLOR_BTNFACE+1; lpszMenuName : nil; lpszClassName : ClassName; hIconSm : 0; ); msg: TMsg; begin wc.hInstance := hInstance; wc.hIcon := LoadIcon(hInstance, MAKEINTRESOURCE(100)); wc.hCursor := LoadCursor(0, IDC_ARROW); RegisterClassEx(wc); CreateWindowEx(0, ClassName, AppName, WS_CAPTION or WS_VISIBLE or WS_SYSMENU or WS_MINIMIZEBOX, integer(CW_USEDEFAULT), integer(CW_USEDEFAULT), WindowWidth, WindowHeight, 0, 0, hInstance, nil); while GetMessage(msg,0,0,0) do begin TranslateMessage(msg); DispatchMessage(msg); end; ExitCode := msg.wParam; end. |
AW: non-Vcl Programm mit Listbox
Du willst Colums in einer ListBox erstellen ohne die dafür benötigten Flags zu setzen, wie das?
Delphi-Quellcode:
LBS_NOTIFY or LBS_MULTICOLUMN
Du willst dir das wirklich antun? Such mal im Forum nach dem Link von Luckie's Tutorials Win32 API. gruss |
AW: non-Vcl Programm mit Listbox
Wenn ich irgendwann irgendwo ein Beispiel oder eine Erklärung finde werde ich bestimmt Wissen was Du damit meinst ;)
Ist halt mein erster Versuch was in dieser Richtung zu Unternehmen, obs gut aus geht werd ich bald Wissen. |
AW: non-Vcl Programm mit Listbox
Zitat:
Delphi-Quellcode:
LBS_SORT or LBS_STANDARD = Window Style Flags
hWndListBox := CreateWindowEx(WS_EX_CLIENTEDGE, 'ListBox', 'ListBox',
WS_VISIBLE or WS_CHILD or LBS_SORT or LBS_STANDARD,150, 75, 180, 100, hWnd, IDC_LBITEMS, hInstance, nil); Zu den Windows Stylen addieren? Ohne das setzen des Window Style Flag LBS_MULTICOLUMN kann man keine Columns zu einer ListBox addiern. Aber wie gesagt suche nach den Tutorials von Luckie. gruss |
AW: non-Vcl Programm mit Listbox
Zitat:
Ich beende hier erstmal und lese mich da durch. |
AW: non-Vcl Programm mit Listbox
Ohh mann, das ist doch ganz schön komplex wenn man per Code was mit einer Listbox machen will (bzw generell fast alles).
Da braucht man ja für jede "normale" funktion eine eigene Routine (Items.Add Items.Remove usw) Zitat:
Aber ich komme klar, bin auf den Richtigen Weg und finde es Spanned ein neues Gebiet zu erforschen. Wenn ich mir den Code so anschaue finde ich nach und nach mehr und mehr gefallen an solch eine Art der Programmierung. Mir kommt alles irgendwie logischer und klarer vor da ich gezwungener maßen den kompletten Code aufgedeckt sehe. Noch bin ich ehrlich gesagt vom Tokyo Compiler enttäuscht was die Dateigröße betrifft, aus schlapp 3mb mit VCL macht der non-VCL 2mb. Die Win32 Demos von Luckie sind kleiner als 100kb (was auch eines meiner Ziele ist) wenn die neu Compiliert werden ist keine kleiner als 2mb, da überlege ich was ich falsch mache oder ob Tokyo für so etwas ungeeignet ist. Wenn ich Beschreibungen lese wurde bei Erstellung Delphi 5-7 genommen, kann sich das in +2mb extra Dateigröße auswirken? Ich dachte das gerade bei non-Vcl immer kleine Dateien heraus kommen, vielleicht gibt es ja für Tokyo noch ein Switch der non-Vcl so kompiliert wie das alte Delphi = ganz kleine Dateien. |
AW: non-Vcl Programm mit Listbox
Zitat:
Und da kannst auch nichts dran ändern. Aber sich darüber aufregen bringt nichts. Es ist halt so wie es ist, wir haben doch alle Terrabyte in Masse was zählen da schon ein paar Byte mehr oder weniger. Wegwerfgesellschaft halt. Zitat:
Zitat:
Die meisten wissen aber gar nicht was sich alles dahinter verbirgt. erstelle das OwnerDraw ListView nur mit API mitteln dann weist du was du getan hast. 50KB > 1700 Zeilen. gruss |
AW: non-Vcl Programm mit Listbox
Zitat:
Zitat:
Zitat:
Zitat:
Ich werde das gleich mal mit Luckies coolen Beispielen testen, alter Delphi Build mit kleiner .exe gegen exakt gleiches Projekt mit Tokyo compiliert, mal schauen ob das beim Laden einen Messbaren Unterschied ergibt. Zitat:
Aber zum erlernen was eine Komponente so alles kann um es dann per runtime umzusetzen, das mache ich schon so. Zitat:
Das übersteigt meine Grenzen bei weitem, ich bin schon happy wenn ich es generell erstmal gebacken bekomme, aber vs Deine Deluxe-Listbox, so mit "alles selfmade GFX"+"special shiny FX"+was auch immer die noch so kann wenn man Sie bedient, dagegen stink ich zu 100% ab :) edit Zitat:
|
AW: non-Vcl Programm mit Listbox
Zitat:
Zitat:
Zitat:
gruss |
AW: non-Vcl Programm mit Listbox
Zitat:
Und zu meinen Tutorials, es macht Sinn sie Kapitel für Kapitel durch zu arbeiten, da die Kapitel aufeinander aufbauen. |
AW: non-Vcl Programm mit Listbox
Zitat:
Ich kann ein Icon sowohl auch Columns einer ListBox hinzufügen. Das sollte kein Problem sein. gruss |
AW: non-Vcl Programm mit Listbox
Natürlich kann man vor einem Listboxeintrag ein Icon darstellen. Aber er hat noch was von einem "String" geschrieben und dann sind wir bei einem Listview. Eine Listbox kennt keine Spalten.
Zitat:
|
AW: non-Vcl Programm mit Listbox
Zitat:
gruss |
AW: non-Vcl Programm mit Listbox
Ihr beide bringt mich zum grinsen, Danke dafür!:thumb:
Also ich meinte von Anfang an eine Listview, war mir nur nicht bewusst das man eine erstellen kann, ich fand nur Listbox unter den reservierten Control-Namen, dank mehr Lesen weiß ich nun dass das auch geht bzw auch Vcl kann eingebunden werden wenn man will. Ich bastel mir exemplarisch so etwas wie ein Verzeichniss-Lister im Report-Stil, deswegen plus Icon. Wenn ich das hinbekommen und alles begriffen habe bin ich schon fast am Ziel, bis auf die Gfx Challenge, oje :) Man muss ja tierisch aufpassen wo man was macht und das auch alle Events berücksichtigt werden dessen Code man schreiben muss, aber macht mir Spaß sich da durchzukämpfen. |
AW: non-Vcl Programm mit Listbox
Zitat:
|
AW: non-Vcl Programm mit Listbox
Das Listview Beispiel listet Dateien aus einem Verzeichnis mit Icons auf, wenn ich mich recht erinnere.
|
AW: non-Vcl Programm mit Listbox
Wenn ich nicht weiterkommen sollte suche ich nach Listview Beispiel okie, noch hat mich mein Ehrgeiz gepackt es alleine (ok, plus PDF bei Kapitel 3.7/Topic Listview +MSDN) herauszufinden, Danke! Da weiß ich wenigstens das ich Schuld an allem habe ^_^
edit Jetzt hat es erst klick gemacht, Du meintest wahrscheinlich das was Dein PDF beschreibt.:duck: |
AW: non-Vcl Programm mit Listbox
Es gab mal Delphi Controls die nicht auf der VCL basierten. Weißt du wer die entwickelt hat und ob es die noch gibt? Zu Zeiten vor D7 als die EXEn noch schlank waren.
Ich denke dort könnte der Codezwerg einiges abkupfern sofern die noch verfügbar. Ich habe die Controls leider nicht mehr gefunden. Diese Comps basieren eben nicht auf der VCL und konnten auch nicht in die IDE installiert werden. Die waren blankes Windows GUI ... |
AW: non-Vcl Programm mit Listbox
Zitat:
![]() gruss |
AW: non-Vcl Programm mit Listbox
Aber Achtung. Die sind alle noch mit D7 und dem BDS 2006 erstellt. Also kein Unicode. Eventuell muss man für neuere IDEs die String Datentypen anpassen.
|
AW: non-Vcl Programm mit Listbox
Danke für die Warnung! Den Aufreger mit der Dateigröße ist nun auch behoben, also Tokyo kann auch <100kb Dateien erstellen, der Fehler war, wie so oft, vor dem Rechner. (uses Dialogs resultiert in +2mb)
Mein Rohskelett (im lahmen Windows-Look) ist bereits funktionstüchtig. Ich werde das ganze nochmal umschreiben bis es mir gefällt, momentan alles in einer .dpr Datei, ich blätter mir einen Wolf. Hab noch was lustiges herausgefunden, schonmal eine non-Vcl Anwendung so mit Vcl gefüllt? (Pseudo-Code)
Delphi-Quellcode:
uses
Windows, Messages, Buttons, StdCtrls; var abtn:TButton ; begin // abtn := TButton.Create(nil) ; // abtn.ParentWindow := hEdit; abtn := TButton.CreateParented(hEdit) end |
AW: non-Vcl Programm mit Listbox
Zitat:
Welchen sinn macht das? Zitat:
gruss |
AW: non-Vcl Programm mit Listbox
Wo ist das Non-VCL? Die Units Buttons, StdCtrls sind eindeutig der VCL zu zu ordnen. Und nur weil die Steuerelemente im Code erstellt werden ist es nicht Non-VCL.
|
AW: non-Vcl Programm mit Listbox
Zitat:
Zitat:
Bin auch nicht immer ganz konform siehe Verwendung von Classes aber Komponente sollte man schon vorne weg lassen. gruss |
AW: non-Vcl Programm mit Listbox
Das sollte ja auch keinen tieferen Sinn ergeben. Ich werde wahrscheinlisch non-TForms non-TApplication non-WasAuchImmer gemeint haben, ich kenne mich mit den Fachbegriffen für so etwas noch nicht aus.
Zitat:
|
AW: non-Vcl Programm mit Listbox
"Es gab mal Delphi Controls die nicht auf der VCL basierten."
Nun, auch nur wieder ein Framework wie die VCL. Eventuell etwas schlanker. Meine Tutorials zielen aber darauf ab gänzlich ohne Frameworks zu arbeiten. Und hinter die Kulissen zu gucken. Was macht Windows da? wie funktioniert Windows eigentlich? |
AW: non-Vcl Programm mit Listbox
Da gebe ich Dir sowas von Recht! Mir hat es rein Wissenstechnisch echt weitergebracht. So lernt man viele Message Typen kennen die man auch unter Vcl benutzen könnte und man sieht jede Kleinigkeit die da passiert da man jede Kleinigkeit selbst einbauen muss. Ja es ist aufwändiger aber der Lerneffekt ist immens!
Ich will auf gar keinen Fall behaupten das ich da bereits voll durchblicke aber die Sachen die ich haben wollte (Eine Listview mit Überschrift und Icon + Text) das kann ich mittlerweile. Ich denke bereits einen Schritt weiter wie ich das Design ändere, wahrscheinlich fliegt das Icon aus Listview wieder raus und wird an anderer Stelle Groß dargestellt für ausgewählten Eintrag. Mit OwnerDraw bin ich noch keinen Schritt weiter, da muss ich mir erstmal irgendwo ein Vcl Beispiel anschauen was ich da so alles machen muss. Meine Theorie dazu wäre, ich habe zwei verschiedene Bilder, eins für "Eintrag ausgewählt" und eins für "alle anderen", im Paint Event die Abmessungen/Position eines Eintrags ermitteln und ein Bild rein dann den Text raufkopieren. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:10 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz