![]() |
DBmemo in Grid
Hi,
weiß jemand, wie ich ein DBmemo in ein DBgrid/Grid reinkriege ?? |
Re: DBmemo in Grid
Kühlschrank auf, Kuh raus, Elefant...
Delphi-Quellcode:
Das als Componente registrieren und statt normalem DbGrid benutzen
TLsDbGrid = class(TDBGrid)
private FOnSelectCell: TSelectCellEvent; protected function SelectCell(ACol, ARow: Longint): Boolean; override; public function CellRect(ACol, ARow: Longint): TRect; published property OnSelectCell: TSelectCellEvent read FOnSelectCell write FOnSelectCell; end; implementation function TLsDbGrid.SelectCell(ACol, ARow: Integer): Boolean; begin Result := True; if Assigned(FOnSelectCell) then FOnSelectCell(Self, ACol, ARow, Result); end; function TLsDbGrid.CellRect(ACol, ARow: Integer): TRect; begin Result := inherited CellRect(ACol, ARow); end; Einfach auf DBGrid DBMemo pappen, Breite, Höhe und DataSource/Field festlegen und Visible = False Anwendung:
Delphi-Quellcode:
Gruß
// SQL: select *,'...' as MemoDummy from Tabelle
// OnSelectCell: procedure TForm1.LsDbGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean); var R: TRect; begin R := FldbgrdBeitrag.CellRect(ACol, ARow); R.Left := R.Left + LsDbGrid1.Left; R.Right := R.Right + LsDbGrid1.Left; R.Top := R.Top + LsDbGrid1.Top; R.Bottom := R.Bottom + LsDbGrid1.Top; DbMemo1.Visible := False; case ACol of 0,1,2,4:; 3: begin // angenommen, das wär die Spalte für MemoDummy DbMemo1.Left := R.Left+1; DbMemo1.Top := R.Top+1; // Größe sollte bei Memo nicht auf Zelle beschränkt sein... DbMemo1.Visible := True; // sichtbar machen CanSelect := False; end; end; end; |
Re: DBmemo in Grid
Liste der Anhänge anzeigen (Anzahl: 2)
Leuselator, Du programmierst so ähnlich, wie ich es versuche. 8) Aber diese Pixel-Zeichnerei, das ist für mich ein Greuel. Aber das rückt mir alles auf die Pelle. Also muß ich da durch. Leuselator hat das DBgrid um OnSelectCell erweitert. Bei mir sieht das jetzt so wie im Anhang aus. Der andere Anhang ist eine Excel-Tabelle, so wie es aussehen soll. Ich bräuchte im Prinzip nur ein paar Textzeilen in einer Spalte, aber wer weiß wie viele ? Rechts und links davon gibt es nur jeweils eine Zeile je Position. Wie man sieht kann ich das Memo/Blob schon irgendwie in dem DBgrid unterbringen.
Für mich stellt sich jetzt die Frage, ob das so gehen könnte. Im Moment mache ich das alles mit einem StringGrid, starr fixiert auf 2 Zeilen nur Text, nur in EINER Spalte. Beim Eingeben von Daten geht das noch, aber bei reiner Ausgabe wäre das DBgrid schon von Vorteil. P.S.: Screenshots natürlich vergessen Whats that ? Jetzt dafür doppelt, obwohl angeblich nur 2 gehen. :mrgreen: |
Re: DBmemo in Grid
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Hansa,
suchts Du so etwas? |
Re: DBmemo in Grid
Hi!
Sorry ist leider OT, aber ich dachte, es müsste mal gesagt werden: Macht Screenshots doch bitte als JPG und nicht als 1,37 MB große BMP, da brauch ich ja trotz DSL ne halbe Stunde für eins. Danke. Ciao fkerber |
Re: DBmemo in Grid
Ist hier Kerber-Time, ich denke das heißt Happy-Hour und alles wird billiger ? :P
@fkerber : kannst jetzt ruhig downloaden @r_kerber: so in der Richtung, nur ohne Fische. :lol: Allerdings würde ich das lieber selber machen, wegen D8 |
Re: DBmemo in Grid
Hallo Hansa,
hier noch eine getestete Variante.
Code:
mfg
procedure TFDaSi.dbg1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); const // Es werden die ersten 35 Zeichen des Memofeldes ausgelesen iDisplayWidth = 35; var i : integer; szTxt: array[0..iDisplayWidth] of char; aBS: TBlobStream; s : string; sTxt: String[iDisplayWidth]; vTBlobField : TBlobField; begin vTBlobField := TBlobField.Create(Self); {muß für jedes Feld der möglichen Tabellen einzeln definiert werden, funktioniert also nur, wenn man genau weiß, wie die Felder heißen} if Column.FieldName = 'InklFilter' then vTBlobField := Tab1InklFilter; if Column.FieldName = 'ExklFilter' then vTBlobField := Tab1ExklFilter; if (Column.Field is TMemoField) then begin aBS := TBlobStream.Create(vTBlobField, bmRead); FillChar(szTxt, SizeOf(szTxt), #0); try aBS.Read(szTxt, iDisplayWidth); finally aBS.Free; end; s := StrPas(szTxt); sTxt := ''; i := 1; while not ((i > length(s)) or (length(sTxt) >= iDisplayWidth)) do begin if (ord(s[i]) > $20) then sTxt := sTxt + s[i] else {nur wenn nicht zuvor bereits ein Leerzeichen steht} if (length(sTxt)>0) and (sTxt[length(sTxt)] <> ' ') then sTxt := sTxt + ' '; inc(i); end; with (Sender as TDBGrid).Canvas do begin FillRect(Rect); TextOut(Rect.Left, Rect.Top, sTxt); end; end; end; eddy |
Re: DBmemo in Grid
Hi,
was macht denn der Code genau ? Habe den mal 1:1 übernommen. Insbesondere hier :
Delphi-Quellcode:
gehts nicht weiter. Was ist Tab1ExklFilter :?: Kommentiere ich das aus, läuft das Programm zwar, aber vor der wohl unvermeidlichen Fehlermeldung sieht das Grid genauso aus, wie vorher. Was soll das da bringen ?
if Column.FieldName = 'ExklFilter' then
vTBlobField := Tab1ExklFilter; [edit=r_kerber]Doppeltes Posting gelöscht. Mfg, r_kerber[/edit] |
Re: DBmemo in Grid
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Hansa,
hab' erst heute wieder reingesehen, daher die Verzögerung. Is' nix mit 1:1-Übernahme, mußt natürlich Deine Feldnamen anpassen. MInklFilter und MExklFilter sind vom Typ TMemo und nehmen Filterbedingungen für Dateien an (siehe Bilder). Im DBGrid wird dann nicht (MEMO) angezeigt, sondern max. die vordefinierte Anzahl Zeichen (iDisplayWidth). Tab1InklFilter und Tab1ExklFilter ergeben sich aus der Definition im OI Der Darstellungsunterschied ist doch irgendwie gut erkennbar. mfg eddy PS: Bild nicht herunterladen, da gibt's bloß Blödsinn !!! Nehmt nächsten Download, der funktioniert. |
Re: DBmemo in Grid
Ich kann aus dem Screenshot nicht viel herauslesen. Zumindeest nichts, was mit dem Memo zu tun hat. Außer, daß rechts Memo seht und in der Mitte ein paar freie Zeilen drin sind.
Bei mir heißt das Feld in der Datenbank BEZ und läßt sich über diesen Namen auch ansprechen und in einem DBmemo anzeigen. Wo kommt bei Dir der Prefix Tab1 überhaupt her ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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 by Thomas Breitkreuz