Ankreuzfeld in MSHFlexGrid

Hallo zusammen,
in meiner Anwendung (VB6) gebe ich Daten mit einem MSHFlexGrid aus.
Manche dieser Spalten sind Boolescher Natur …
Gibt es eine Möglichkeit, diese Spalten als Ankreuzfeld darzustellen ?
Ich gebe sie zur Zeit als Leerzeichen bzw. „X“ aus aber das sieht sch… aus.
Über Hilfe wäre ich dankbar.

Gruß
Klaus

Hallo,

Gibt es eine Möglichkeit, diese Spalten als Ankreuzfeld
darzustellen ?

ja. :smile:
http://www.activevb.de/tipps/vb6tipps/tipp0583.html

Gruß, Rainer

Hallo Rainer,
dankeschön, ich probiers gleich mal aus.

Gruß
Klaus

Hi Rainer,
hätte ich mit Checkbox gegoogelt hätte ichs gefunden … :smile:
So habe ich nun mehrere Möglichkeiten gefunden:

  1. Deine
  2. Mit WingDings-Schrifttypen arbeiten

Leider gefallen mir beide Lösungen nicht (die zweite eher, nur was passiert, wenn ein User diese Schriftart löscht ?).
Schade dass das MSHFlexGrid standardmässig sowas nicht vorgesehen hat.
Von Videosoft gäbe es was das mir gefällt, aber das müsste die Firma bezahlen.

Gruß
Klaus

Hallo Klaus,

Leider gefallen mir beide Lösungen nicht (die zweite eher, nur
was passiert, wenn ein User diese Schriftart löscht ?).

wenn Du das Ergebnis weiter gibst, musst Du das Projekt ja verpacken, da kannst Du auch eine unbedingt benötigte Schriftart mitgeben.

Schade dass das MSHFlexGrid standardmässig sowas nicht
vorgesehen hat.

Ja, das finde ich auch schade.

Von Videosoft gäbe es was das mir gefällt, aber das müsste die
Firma bezahlen.

Wenn Du genug Zeit hast, kannst Du es auch selbst bauen. Wenn Du es nur einmal brauchst und auf die Verbindung zu einer Datenbank verzichten kannst, bleibt der Aufwand sogar noch im erträglichen Rahmen. Hast Du schon eigene Steuerelemente gebaut?

Gruß, Rainer

Hallo Rainer,
das Programm wird bereits verwendet, ist wie eine elektr. Eisenbahn, die wird auch nie fertig …
Es ist eine Datenbankanwendung, aber die Controls sind selbst nicht mit der DB verbunden, vielmehr werden die Grids zellenweise gefüllt.
Nein ich habe noch nie ein Control selbst gebaut. Ist das einfach?

Gruß
Klaus

Hallo Klaus,

das Programm wird bereits verwendet, ist wie eine elektr.
Eisenbahn, die wird auch nie fertig …

*gg* an fertigen Programmen bastel ich immer ungern herum. :smile:

Es ist eine Datenbankanwendung, aber die Controls sind selbst
nicht mit der DB verbunden, vielmehr werden die Grids
zellenweise gefüllt.

Das klingt gut.

Nein ich habe noch nie ein Control selbst gebaut. Ist das
einfach?

Wenn man weiß, wie man die Eigenschaften für das Control festlegen muss …
http://www.activevb.de/tipps/vb6tipps/tipp0172.html
… ist es gar nicht so schwer. Beim Öffnen von VB klickst Du nicht ‚Standard‘ oder ‚VB-Pro …‘ sondern ‚Active-X Steuerelement‘ legst ein Picture auf die Userform, da hinein Scrollbalken, Steuerelemtefelder für Buttons (für die Fixed Rows/Cols) Textfelder, Checkboxen, weil du die ja verwenden willst, bei Bedarf auch noch Pictureboxen.

Dann legst Du die Variablen an, schreibst die Verwaltung der Eigenwschaften und die Events …

Schwer ist immer relativ. :smile: Ich habe keine Übung, würde es aber wohl fertig bekommen. Wenn Du das anfängst und an einer Stelle nicht weiter kommst, bekommst Du auf AVB schnell und kompetent Hilfe, auch wenn die oft nur aus einem Link zum Archiv besteht. Mit Hilfe von dort habe ich mal einen speziellen Slider, einen neuen Scrollbalken … gebaut, das hat keine Woche gedauert. :smile: Heute Abend füge ich mal noch die Quellcodes davon hier ein, wenn ich sie wieder finde.

Gruß, Rainer

Hallo Klaus,

einfach ist definierbar. Es kommt nun darauf an,

1: Wie gut kannst du programmieren?
2: Was soll das Steuerelement, alles mal koennen?

Wenn es nur zur simplen Anzeige von Daten ist, nunja, das SE selbst, dann ein paar Klassen dazu und fertig ist es :smile: Eigentlich nichts grosses :smile:

MfG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

einfach ist definierbar. Es kommt nun darauf an,

1: Wie gut kannst du programmieren?
2: Was soll das Steuerelement, alles mal koennen?

Wenn es nur zur simplen Anzeige von Daten ist, nunja, das SE
selbst, dann ein paar Klassen dazu und fertig ist es :smile:
Eigentlich nichts grosses :smile:

Hallo Alex,
sehe ich genauso, einfach nur die Anzeige der Daten die im Chatfenster des hiesigen Community-Chats auftauchen :smile:
Jaja, bin lästig, *schäm*, genauer gesagt penetrant, muß doch irgendwie gehen *seufz*
Lieben Gruß
Reinhard

Hallo Reinhard,

mensch so richtig wirklich habsch die zeit nicht dazu ;/
Aber ich habe mich nun mal kurz der Sache angenommen!
Eine fertige Lösung kannsch dir nicht praesentieren. Aber ne Step by Step Anleitung :wink:

Also

1: Form erstellen
2: Handle des ChatFenster ermitteln.
’ Das kannst du via den API’s

Private Declare Function WindowFromPoint Lib "user32" (ByVal \_
 xPoint As Long, ByVal yPoint As Long) As Long

Private Declare Function GetCursorPos Lib "user32" (lpPoint As \_
 POINTAPI) As Long

Private Declare Function GetClassName Lib "user32" Alias \_
 "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName \_
 As String, ByVal nMaxCount As Long) As Long

Private Declare Function GetParent Lib "user32" \_
 (ByVal hwnd As Long) As Long

Private Type POINTAPI
 x As Long
 y As Long
End Type

'Eine Routine könnte wiefolgt ausschauen

Dim Result&, Handle&, Parent, P As POINTAPI, Buffer$, Class$
 Result = GetCursorPos(P)
 Handle = WindowFromPoint(P.x, P.y)
 Parent = GetParent(Handle)
 Class = Space$(128)
 Result = GetClassName(Handle, Class, 128)
 Class = LCase(Left$(Class, Result))

Somit kommst du an das Handle *zwinker*
Das war eigentlich der schwerste Teil :wink:

Nun kommt das Gelbe im Ei *feix*
Das Stichwort heisst, auch wenn du es net hören magst „SubClassing“

Mal ganz kurz ein wenig Theorie. Ohja, ohne diese geht es garnicht :wink:
Es kommen doch Daten an! Um sie darzustellen, sendet Windows intern eine Nachricht an das Fenster, alla „schreibe mal da den text hin“
Und genau das machen wir uns zu nutze.

Auf Deutsch, wir klinken uns mal in die Nachrichtenschleife ein :smile:
Nun haben wir aber das Problem, das es ja mehr wie nur 1 Fenster gibt was offen ist ( Sichtbar oder nicht, spielt erstmal keine Rolle!) Auch bekommen gewisse Dienste Nachrichten und und und.

Was machen wir nun?

Ah nun macht es wieder Klick. Jede Nachricht die Windows schickt beinhalted das Handle des Fenster’s für das die Nachricht ist. Also fragen wir das auch ab :smile:

Nun mal kurz zusammengefasst.

1: Wir klinken uns in die Nachrichtenschleife ein
2: Wir filtern, das nur die Nachrichten rel. sind die für den Chat sind, dabei bauen wir gleich noch ein Filter ein! Auch hier wollen wir nicht alle Nachrichten wissen. Was interessiert uns zum Bsp. wenn mit der Maus geclickt wurde oder wenn es den Focus enthaelt :confused:

Wie macht man das nun ? Ich habe mal eine Klasse geschrieben, die ich mal rauskopiert habe. Die erledigt genau die ganzen Dinge :smile:

du musst nur die Klasse initialisieren und dabei das Handle und die Nachricht angeben die du haben magst , mehr nicht :wink:

'Modul MsgHookProc

Option Explicit

Private Const GWL\_WNDPROC = -4
Private Const MAX\_HASH = 257

Private Type typHook
 hWnd As Long
 MsgHookPtr As Long
 ProcAddr As Long
 WndProc As Long
 uMsgCount As Long
 uMsg(MAX\_HASH - 1) As Boolean
 uMsgCol As Collection
End Type

Private Declare Function CallWindowProcA Lib "user32" ( \_
 ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, \_
 ByVal Msg As Long, ByVal wParam As Long, \_
 ByVal lParam As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" \_
 (dest As Any, source As Any, ByVal NumBytes As Long)
Private Declare Function SetWindowLongA Lib "user32" ( \_
 ByVal hWnd As Long, ByVal nIndex As Long, \_
 ByVal dwNewLong As Long) As Long

Private Const MAXHOOKS = 9
Private Initialized As Boolean
Private arrHook() As typHook
Private NrCol As Collection

Public Function DoHook(ByVal ObjPtr As Long, ByVal hWnd As Long, \_
 uMsg As Variant) As Long
 Dim i As Long
 Dim j As Long

 If Not Initialized Then
 ReDim Preserve arrHook(1 To MAXHOOKS)
 arrHook(1).WndProc = Addr2Long(AddressOf WndProc1)
 arrHook(2).WndProc = Addr2Long(AddressOf WndProc2)
 arrHook(3).WndProc = Addr2Long(AddressOf WndProc3)
 arrHook(4).WndProc = Addr2Long(AddressOf WndProc4)
 arrHook(5).WndProc = Addr2Long(AddressOf WndProc5)
 arrHook(6).WndProc = Addr2Long(AddressOf WndProc6)
 arrHook(7).WndProc = Addr2Long(AddressOf WndProc7)
 arrHook(8).WndProc = Addr2Long(AddressOf WndProc8)
 arrHook(9).WndProc = Addr2Long(AddressOf WndProc9)
 Set NrCol = New Collection
 Initialized = True
 End If

 For i = 1 To UBound(arrHook)
 If arrHook(i).MsgHookPtr = 0 Then Exit For
 Next i
 If i \> UBound(arrHook) Then
 ReDim Preserve arrHook(1 To 2 \* UBound(arrHook))
 End If
 If i \> MAXHOOKS Then
 NrCol.Add i, "H" & hWnd
 arrHook(i).WndProc = Addr2Long(AddressOf WndProcX)
 End If
 DoHook = i
 arrHook(i).uMsgCount = UBound(uMsg) + 1
 If arrHook(i).uMsgCount Then
 Erase arrHook(i).uMsg
 Set arrHook(i).uMsgCol = New Collection
 For j = LBound(uMsg) To UBound(uMsg)
 arrHook(i).uMsg(uMsg(j) Mod MAX\_HASH) = True
 arrHook(i).uMsgCol.Add True, "H" & uMsg(j)
 Next j
 End If
 arrHook(i).hWnd = hWnd
 arrHook(i).MsgHookPtr = ObjPtr
 arrHook(i).ProcAddr = \_
 SetWindowLongA(hWnd, GWL\_WNDPROC, arrHook(i).WndProc)
End Function

Public Sub DoUnhook(ByVal Nr As Long)
 If Nr Then
 With arrHook(Nr)
 SetWindowLongA .hWnd, GWL\_WNDPROC, .ProcAddr
 .MsgHookPtr = 0
 Erase .uMsg
 Set .uMsgCol = Nothing
 If Nr \> MAXHOOKS Then NrCol.Remove "H" & .hWnd
 End With
 End If
End Sub

Public Function WndProc(ByVal Nr As Long, ByVal hWnd As Long, \_
 ByVal uMsg As Long, ByVal wParam As Long, \_
 ByVal lParam As Long) As Long
 Dim oMsgHook As MsgHook
 Dim retVal As Long
 Dim Ok As Boolean
 With arrHook(Nr)
 If .uMsgCount \> 0 Then
 If .uMsg(uMsg Mod MAX\_HASH) Then
 On Error Resume Next
 Ok = .uMsgCol("H" & uMsg) And (Err = 0)
 On Error GoTo 0
 End If
 Else
 Ok = True
 End If
 If Ok Then
 CopyMemory oMsgHook, .MsgHookPtr, 4
 oMsgHook.RaiseBefore uMsg, wParam, lParam, retVal
 If uMsg Then
 retVal = CallWindowProcA(.ProcAddr, hWnd, uMsg, wParam, lParam)
 oMsgHook.RaiseAfter uMsg, wParam, lParam
 End If
 CopyMemory oMsgHook, 0&, 4
 Else
 retVal = CallWindowProcA(.ProcAddr, hWnd, uMsg, wParam, lParam)
 End If
 End With
 WndProc = retVal
End Function

Public Function WndProc1(ByVal hWnd As Long, ByVal uMsg As Long, \_
 ByVal wParam As Long, ByVal lParam As Long) As Long
 WndProc1 = WndProc(1, hWnd, uMsg, wParam, lParam)
End Function

Public Function WndProc2(ByVal hWnd As Long, ByVal uMsg As Long, \_
 ByVal wParam As Long, ByVal lParam As Long) As Long
 WndProc2 = WndProc(2, hWnd, uMsg, wParam, lParam)
End Function

Public Function WndProc3(ByVal hWnd As Long, ByVal uMsg As Long, \_
 ByVal wParam As Long, ByVal lParam As Long) As Long
 WndProc3 = WndProc(3, hWnd, uMsg, wParam, lParam)
End Function

Public Function WndProc4(ByVal hWnd As Long, ByVal uMsg As Long, \_
 ByVal wParam As Long, ByVal lParam As Long) As Long
 WndProc4 = WndProc(4, hWnd, uMsg, wParam, lParam)
End Function

Public Function WndProc5(ByVal hWnd As Long, ByVal uMsg As Long, \_
 ByVal wParam As Long, ByVal lParam As Long) As Long
 WndProc5 = WndProc(5, hWnd, uMsg, wParam, lParam)
End Function

Public Function WndProc6(ByVal hWnd As Long, ByVal uMsg As Long, \_
 ByVal wParam As Long, ByVal lParam As Long) As Long
 WndProc6 = WndProc(6, hWnd, uMsg, wParam, lParam)
End Function

Public Function WndProc7(ByVal hWnd As Long, ByVal uMsg As Long, \_
 ByVal wParam As Long, ByVal lParam As Long) As Long
 WndProc7 = WndProc(7, hWnd, uMsg, wParam, lParam)
End Function

Public Function WndProc8(ByVal hWnd As Long, ByVal uMsg As Long, \_
 ByVal wParam As Long, ByVal lParam As Long) As Long
 WndProc8 = WndProc(8, hWnd, uMsg, wParam, lParam)
End Function

Public Function WndProc9(ByVal hWnd As Long, ByVal uMsg As Long, \_
 ByVal wParam As Long, ByVal lParam As Long) As Long
 WndProc9 = WndProc(9, hWnd, uMsg, wParam, lParam)
End Function

Public Function WndProcX(ByVal hWnd As Long, ByVal uMsg As Long, \_
 ByVal wParam As Long, ByVal lParam As Long) As Long
 Dim Nr As Long
On Error Resume Next
 Nr = NrCol("H" & hWnd)
On Error GoTo 0
 If Nr Then WndProcX = WndProc(Nr, hWnd, uMsg, wParam, lParam)
End Function

Private Function Addr2Long(ByVal Addr As Long) As Long
 Addr2Long = Addr
End Function

'Das Klassenmodul MsgHook

Option Explicit

Public Enum WM\_CONST
 WM\_ACTIVATEAPP = &H1C
 WM\_CAPTURECHANGED = &H215
 WM\_CHANGECBCHAIN = &H30D
 WM\_CHAR = &H102
 WM\_CLOSE = &H10
 WM\_COMMAND = &H111
 WM\_COMPACTING = &H41
 WM\_CONTEXTMENU = &H7B
 WM\_COPYDATA = &H4A
 WM\_CTLCOLORSCROLLBAR = &H137
 WM\_DESTROY = &H2
 WM\_DEVMODECHANGE = &H1B
 WM\_DEVICECHANGE = &H219
 WM\_DISPLAYCHANGE = &H7E
 WM\_DRAWCLIPBOARD = &H308
 WM\_DROPFILES = &H233
 WM\_ENDSESSION = &H16
 WM\_ENTERMENULOOP = &H211
 WM\_ENTERSIZEMOVE = &H231
 WM\_ERASEBKGND = &H14
 WM\_EXITMENULOOP = &H212
 WM\_EXITSIZEMOVE = &H232
 WM\_FONTCHANGE = &H1D
 WM\_GETMINMAXINFO = &H24
 WM\_HOTKEY = &H312
 WM\_HSCROLL = &H114
 WM\_KEYDOWN = &H100
 WM\_KEYUP = &H101
 WM\_KILLFOCUS = &H8
 WM\_LBUTTONDBLCLK = &H203
 WM\_LBUTTONDOWN = &H201
 WM\_LBUTTONUP = &H202
 WM\_MBUTTONDBLCLK = &H209
 WM\_MBUTTONDOWN = &H207
 WM\_MBUTTONUP = &H208
 WM\_MENUCHAR = &H120
 WM\_MENUSELECT = &H11F
 WM\_MOUSEACTIVATE = &H21
 WM\_MOUSEMOVE = &H200
 WM\_MOUSEWHEEL = &H20A
 WM\_MOVE = &H3
 WM\_MOVING = &H216
 WM\_NCACTIVATE = &H86
 WM\_NCHITTEST = &H84
 WM\_NCLBUTTONDBLCLK = &HA3
 WM\_NCLBUTTONDOWN = &HA1
 WM\_NCLBUTTONUP = &HA2
 WM\_NCMBUTTONDBLCLK = &HA9
 WM\_NCMBUTTONDOWN = &HA7
 WM\_NCMBUTTONUP = &HA8
 WM\_NCMOUSEMOVE = &HA0
 WM\_NCPAINT = &H85
 WM\_NCRBUTTONDBLCLK = &HA6
 WM\_NCRBUTTONDOWN = &HA4
 WM\_NCRBUTTONUP = &HA5
 WM\_NOTIFY = &H4E
 WM\_OTHERWINDOWCREATED = &H42
 WM\_OTHERWINDOWDESTROYED = &H43
 WM\_PAINT = &HF
 WM\_PALETTECHANGED = &H311
 WM\_PALETTEISCHANGING = &H310
 WM\_POWER = &H48
 WM\_POWERBROADCAST = &H218
 WM\_QUERYENDSESSION = &H11
 WM\_QUERYNEWPALETTE = &H30F
 WM\_QUERYOPEN = &H13
 WM\_RBUTTONDBLCLK = &H206
 WM\_RBUTTONDOWN = &H204
 WM\_RBUTTONUP = &H205
 WM\_SETCURSOR = &H20
 WM\_SETFOCUS = &H7
 WM\_SETTINGCHANGE = &H1A
 WM\_SIZE = &H5
 WM\_SIZING = &H214
 WM\_SPOOLERSTATUS = &H2A
 WM\_SYSCOLORCHANGE = &H15
 WM\_SYSCOMMAND = &H112
 WM\_SYSKEYDOWN = &H104
 WM\_SYSKEYUP = &H105
 WM\_TIMECHANGE = &H1E
 WM\_USERCHANGED = &H54
 WM\_VSCROLL = &H115
 WM\_WININICHANGE = &H1A
End Enum

Public Event After(ByRef uMsg As Long, ByRef wParam As Long, \_
 ByRef lParam As Long)
Public Event Before(ByRef uMsg As Long, ByRef wParam As Long, \_
 ByRef lParam As Long, ByRef retVal As Long)

Private Nr As Long

Public Sub Hook(ByVal hWnd As Long, ParamArray uMsg() As Variant)
 Dim i As Long
 Dim v As Variant
 If Nr Then DoUnhook Nr
 v = uMsg
 Nr = DoHook(ObjPtr(Me), hWnd, v)
End Sub

Public Sub RaiseAfter(ByRef uMsg As Long, \_
 ByRef wParam As Long, ByRef lParam As Long)
 RaiseEvent After(uMsg, wParam, lParam)
End Sub

Public Sub RaiseBefore(ByRef uMsg As Long, \_
 ByRef wParam As Long, ByRef lParam As Long, ByRef retVal As Long)
 RaiseEvent Before(uMsg, wParam, lParam, retVal)
End Sub

Public Sub Unhook()
 DoUnhook Nr
 Nr = 0
End Sub

Private Sub Class\_Terminate()
 If Nr Then DoUnhook Nr
End Sub

Das sind eigentlich alle relevanten Sachen!
Wie du siehst sind in dem Klassenmodul schon einige wichtige Nachrichten definiert! Alternativ muesstest du mal googeln, welchen Wert die Nachricht hat, die du brauchst, oder du schreibst schnell nen neues Subclassing, wo du dir alle Nachrichten anzeigen laesst :smile:

Du kannst ohne probleme dort noch welche hinzufügen :smile:

Somit haetten wir den „Lauscher“ *zwinker*
Das schreiben ansich geht auch schnell

Das Handle weisst du! Nun ermittle das Handle von der Textbox!
Bastel deine Nachricht zusammen. Activiere den Chat und dort die Textzeile. Sende den Text dorthin gefolgt von einem Enter und volla Text sollte dastehen. Alternativ get glaube auch die API SendMessage mit WM_SetTEXT :smile:
Aber mir faellt gerade ein. Mit Sendmessage kannst du auch Texte auslesen, via dem Commanda WM_GETTEXT.
Hast du das schon einmal probiert?

MfG Alex

was fehlt ist wie du es aufrufen musst :smile:

Option Explicit

Private WithEvents Msg As MsgHook

Private Sub Form\_Load()
 Set Msg = New MsgHook
 Msg.Hook DeinHandle, DeineNachricht
End Sub

Private Sub Msg\_After(uMsg As Long, wParam As Long, lParam As Long)
 'Es wird erst die Nachricht an das Fenster weitergeleitet und dann kommt sie hier an!
End Sub

Private Sub Msg\_Before(uMsg As Long, wParam As Long, lParam As Long, retVal As Long)
'Nachricht kommt hier an und wird dann erst an das Fenster weitergeleitet
'Durch setzen von uMsg auf 0 wird die Nachricht zerstört!
 'uMsg = 0
End Sub

Subclassing muss immer ordentlich beendet werden, sonst schmiert dir die IDE ab. In dem Falle spielt es keine Rolle, denn sobald die Variable die das Subclassing aufruft ihren Wert verliert, so wird in der Klasse das Terminate Ereignis aufgerufen, was wiederrum das Subclassing ordentlich beendet!

MfG Alex

Hallo Klaus.

Der Code auf Active VB verwendet eine PictureBox als „Zwischenspeicher“ für die Bilder.

Es gäbe eine etwas bessere Lösung (meiner Meinung nach jedenfalls), die folgendermaßen aussähe:
Verwende als Speicher für die Bilder eine ImageList.
Suche Dir irgendeinen Windows-Dialog, in dem CheckBoxen enthalten sind und mache einen Screen-Shot davon, eine CheckBox mit Value = True und eine CheckBox mit Value = False. Dann öffnest Du Paint, fügst Du den Screen-Shot dort ein und bastelst Dir zwei gleichgroße Bilder (16 x 16 Pixel oder 32 x 32 Pixel) und speicherst diese dann erstmal ab. Danach lädst Du diese Bildchen in die ImageList und gibst Ihnen jeweils einen eindeutigen Key. Wenn die Daten in Deiner Anwendung Boolean sind, könnten die Keys z.B. „Value_True“ und „Value_False“ heißen. Danach brauchst Du „nur noch“ die Daten in der Zelle Deines Flexgrids abfragen und das CellPicture nach dem folgenden Prinzip einlesen:

MSHFlexGrid.CellPicture = ImageList.ListImages("Value\_" & MSHFlexGrid.Text).Picture

Achtung: Keine Garantie auf die Syntax!!!

Beim MSFlexGrid habe ich mir das schon gebastelt. Ich habe mir allerdings echte Icons gemacht, damit ich keine Probleme habe, falls ein Benutzer mal die Systemfarben ändert. Naja, auf jeden Fall funktioniert das ganz toll und der Code ist eigentlich nicht so wahnsinng lang und scheinbar brauchen die Bilder bei einer eventuellen Weitergabe Deiner Anwendung nicht mit ins Setup aufgenommen werden, weil sie in der ImageList gespeichert sind (hat jedenfalls bei mir funktioniert).

Kannst Du ja mal ausprobieren.

Viele Grüße
Carsten

Hallo Carsten,

das werde ich auch einmal versuchen, hört sich gut an. Ich hoffe das mit den Bildern kostet nicht so viel Laufzeit.
Ich habe gestern mal nach der Fa. Videosoft zu fahnden, die gibts wohl nicht mehr, als ich nach dem Grid (VSFlexGrid - das kann Boolsche Felder) gegoogelt habe, war ich plötzlich auf irgendwelchen „Nackichfrauenseiten“ … das muss ich heute noch meinem chef erzählen nicht dass ers von der PA erfährt …

Gruß
Klaus

Hallo Klaus.

das werde ich auch einmal versuchen, hört sich gut an. Ich
hoffe das mit den Bildern kostet nicht so viel Laufzeit.

Ich habe keine Probleme dadurch feststellen können, aber ich bin durchaus kein Vollprofi.

Ich habe gestern mal nach der Fa. Videosoft zu fahnden, die
gibts wohl nicht mehr, als ich nach dem Grid (VSFlexGrid - das
kann Boolsche Felder) gegoogelt habe

Das VSFlexGrid ist, meine ich, für .Net
Hier gibts eine Testversion: http://www.zoschke.com/products/C1/VSFlex/VSFlex.asp…

irgendwelchen „Nackichfrauenseiten“ … das muss ich heute
noch meinem chef erzählen nicht dass ers von der PA erfährt

ooops

Viele Grüße
Carsten

Hallo Alex,

habe deine beiden Postings eben erst entdeckt und gleich abgespeichert, dankeschön :smile:

Mal schauen wann ich dazu komme, sie auszutesten.

Gruß
Reinhard

Hallo Reinhard,

habe deine beiden Postings eben erst entdeckt und gleich
abgespeichert, dankeschön :smile:

Nichts zu danken :smile: Wie gesagt, die Routine wuerde ich als Ansatz nehmen und dann mal schauen was sich daraus machen laesst! Vom Prinzip her, würde ich erst versuchen den Chat auszulesen. Das schreiben in den Chat würde ich erst einmal nach hinten stellen :smile:

Wenn die Vorgehensweise net klappt :s
Dann muessen wir mal ne Variante alla " Brutalo" probieren :wink:
Thread erstellen der permanent den Chat ausliest. Zur Not Das Frame runterladen und dann schauen.
Ist net die feine Englische, aber sollte klappen :smile:

Irgendein Weg finden wir da schon :smiley:

MfG Alex