AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DBmemo in Grid

Ein Thema von Hansa · begonnen am 14. Jan 2004 · letzter Beitrag vom 31. Jan 2004
Antwort Antwort
Seite 1 von 2  1 2      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

DBmemo in Grid

  Alt 14. Jan 2004, 12:12
Hi,

weiß jemand, wie ich ein DBmemo in ein DBgrid/Grid reinkriege ??
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#2

Re: DBmemo in Grid

  Alt 14. Jan 2004, 13:06
Kühlschrank auf, Kuh raus, Elefant...
Delphi-Quellcode:
  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;
Das als Componente registrieren und statt normalem DbGrid benutzen
Einfach auf DBGrid DBMemo pappen, Breite, Höhe und DataSource/Field festlegen und Visible = False
Anwendung:
Delphi-Quellcode:
// 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;
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: DBmemo in Grid

  Alt 14. Jan 2004, 21:25
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.
Miniaturansicht angehängter Grafiken
excelgrid.jpg   delphi_grid.jpg  
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#4

Re: DBmemo in Grid

  Alt 14. Jan 2004, 22:17
Hallo Hansa,

suchts Du so etwas?
Miniaturansicht angehängter Grafiken
datenbankgrid.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: DBmemo in Grid

  Alt 14. Jan 2004, 22:32
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
Frederic Kerber
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: DBmemo in Grid

  Alt 14. Jan 2004, 23:18
Ist hier Kerber-Time, ich denke das heißt Happy-Hour und alles wird billiger ?

@fkerber : kannst jetzt ruhig downloaden

@r_kerber: so in der Richtung, nur ohne Fische. Allerdings würde ich das lieber selber machen, wegen D8
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#7

Re: DBmemo in Grid

  Alt 15. Jan 2004, 01:18
Hallo Hansa,

hier noch eine getestete Variante.

Code:
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;
mfg
eddy
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: DBmemo in Grid

  Alt 15. Jan 2004, 21:29
Hi,

was macht denn der Code genau ? Habe den mal 1:1 übernommen. Insbesondere hier :

Delphi-Quellcode:
if Column.FieldName = 'ExklFilterthen
  vTBlobField := Tab1ExklFilter;
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 ?

[edit=r_kerber]Doppeltes Posting gelöscht. Mfg, r_kerber[/edit]
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#9

Re: DBmemo in Grid

  Alt 17. Jan 2004, 12:01
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.
Miniaturansicht angehängter Grafiken
memo1.jpg  
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#10

Re: DBmemo in Grid

  Alt 17. Jan 2004, 14:05
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:53 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz