AGB  ·  Datenschutz  ·  Impressum  







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

Datenformular Oberfläche

Ein Thema von VkPenguin · begonnen am 7. Okt 2012 · letzter Beitrag vom 11. Okt 2012
Antwort Antwort
Seite 3 von 5     123 45      
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#21

AW: Datenformular Oberfläche

  Alt 7. Okt 2012, 19:26
Hmm, wie wäre es mit der Suchfunktion hier im Forum
http://www.delphipraxis.net/98118-st...einfuegen.html
http://www.delphipraxis.net/128457-s...ermitteln.html

Edit: das färben der Zelle musst du selbst übernehmen. Stichwort 'DrawCell'
Edit2: die selektierte Zelle kannst du ganz leicht im OnClick Event abfragen.
http://www.delphipraxis.net/418610-post3.html
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'

Geändert von Hobby-Programmierer ( 7. Okt 2012 um 19:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#22

AW: Datenformular Oberfläche

  Alt 7. Okt 2012, 19:37
Also ich würde ein DrawGrid hier bevorzugen.
Ein StringGrid ist immer praktisch, wenn man Text darstellen will und evtl. der Benutzer diesen Text bearbeiten soll.
Hier soll aber etwas ausgewählt und per Klick oder Tastendruck ein Zustand geändert werden. Da könnten die Funktionen vom StringGrid etwas im Wege sein um es perfekt erscheinen zu lassen.

Da das StringGrid aber eine Ableitung vom DrawGrid ist, arbeiten beide Varianten ziemlich ähnlich
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#23

AW: Datenformular Oberfläche

  Alt 7. Okt 2012, 19:53
Aber da er noch in der 'Probier'-Phase ist, wird ein Stringgrid leichter zu handeln sein. Ansonsten stimme ich dir voll zu.
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#24

AW: Datenformular Oberfläche

  Alt 7. Okt 2012, 19:57
...

Peinlich. Ich hab zwar genau danach gesucht, aber nur über Google, weil ich dachte "Wenn es hier im Forum was gibt wirds ja auch auf Google zu finden sein". Tja..

Soviel sinnloser Aufwand wegen einem (fast) Einzeiler. Aber jetzt gehts ja, Dankeschön!

Jetzt mach ich mich dann mal an die Arbeit, falls es noch was zu dem Thema gibt melde ich mich nochmal..

Danke nochmal an alle!
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#25

AW: Datenformular Oberfläche

  Alt 8. Okt 2012, 16:51
Hallo nocheinmal,

dank Euren Tipps komme ich mit dem Färben und anpassen der Grids zwar gut klar und mache viele Fortschritte, eine Sache gibt es aber noch. Ich habe die Stringgrid so eingestellt, dass die selektierte Zelle Blau und alle anderen makierten Zellen rötlich eingefärbt sind. Zur Übersicht wird jede zweite Spalte/Reihe leicht gräulich verfärbt. Nur wenn ich in eine der Verfärbten Zellen etwas schreibe wird sofort das OnDrawCell Ereignis ausgelöst, welches den Text wieder übermalt. Zuerst hab ich versucht, den Text danach einfach nocheinmal schreiben zu lassen, das bringt aber nichts, da dann sofort wieder das Ereignis ausgelöst wird. Ich habe im Forum auch mal nach transparenten Farben / transparentem zeichnen mit Canvas gesucht, das gibt es aber nicht bzw. wäre sehr aufwändig. Hat jemand vielleicht eine Idee, wie ich das Problem lösen könnte oder mit welchen Suchbegriffen ich mich durchhangeln könnte ? Dankeschön schoneinmal
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#26

AW: Datenformular Oberfläche

  Alt 8. Okt 2012, 23:20
Hm, habe gerade mal in einem kleinen Testprogramm versucht, den Inhalt und die Farbe als Bitmap zu Speichern und diese dann wiederum in der Tabelle auszugeben. Das erscheint mir aber erstens sehr umständlich und zweitens vor allem nicht gerade performant, wenn man bedenkt mit welchen Listengrößen ich hier hantiere.. Hat da vielleicht jemand einen besseren Ansatz für mich ? Komme hier irgendwie nicht weiter
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#27

AW: Datenformular Oberfläche

  Alt 8. Okt 2012, 23:27
Nein, so macht man das auch nicht

Alles was dort erscheinen soll musst du im OnDrawCellEvent erledigen also zeichnen.
Zeig doch mal den Code den du bislang dort stehen hast

EDIT

Bitte definiere doch auch was du unter "etwas schreibe" genau meinst.
Soll der Anwender da etwas schreiben, oder die Anwendung Text ausgeben?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo ( 8. Okt 2012 um 23:30 Uhr)
  Mit Zitat antworten Zitat
VkPenguin

Registriert seit: 23. Dez 2011
150 Beiträge
 
Delphi XE7 Architect
 
#28

AW: Datenformular Oberfläche

  Alt 9. Okt 2012, 00:22
Mein bisheriges OnDrawCellEvent (Der Umweg über "sg", da ich mehrere Stringgrids hab, die ich gleich Formatieren möchte):
Delphi-Quellcode:
sg := TStringGrid (Sender);
if (((((ARow+1) mod 2 <> 0) And (ARow<>0) AND (ACol<>0))) OR (((ACol+1) mod 2 <> 0) And (ACol<>0) AND (ARow<>0))) then
begin //Färbe jede zweite Zelle zur Übersicht ein (Außer die Erste Spalte/Reihe)
sg.canvas.brush.color := cl3DLight;
sg.canvas.FillRect(Rect);
end;
if ((ARow>=sg.Selection.Top) AND (Arow<=Sg.Selection.Bottom) AND (ACol>=sg.Selection.Left) AND (ACol<=Sg.Selection.Right)) then
Begin //Färbt die makierten Felder
sg.canvas.brush.color := $FACE87;
sg.canvas.FillRect(Rect);
End;
if ((Arow=sg.Row) ANd (ACol=sg.Col)) then
Begin //Färbt das selektierte Feld
sg.canvas.brush.color := $0045FF;
sg.canvas.FillRect(Rect);
End;
Wenn ich ein Feld mit Text(z.B. "TEST" oder "111222333") selektiere verschwindet der Text, da er von dem OnDrawCell-Event übermalt wird. Sobald ich die Selektion aufhebe ist der Text aber wieder sichtbar, der Inhalt geht also nicht verloren, wird nur überzeichnet.

Der Inhalt der Felder kann je nachdem sowohl vom Nutzer als auch vom Programm selbst verändert werden.

Ich schätze mal, ich verstehe nicht ganz richtig, was du mit "Alles was dort erscheinen soll..." meinst, aber einen ähnlichen Gedanken hatte ich auch schon, daher stand probehalber mal
Delphi-Quellcode:
for X:=0 To Sg.ColCount do
 Begin
 for Y:=0 To Sg.RowCount do
   Begin
   if Sg.Cells[X,Y]<>'then sg.Cells[X,Y]:=sg.Cells[x,Y];
   End;
 End;
am Ende des Events, da ich mir erhofft hatte, durch die "Änderung" des Inhalts würde der Text nocheinmal neu (-> Über die Farbe) geschriben. Es führt aber nur dazu, dass die gesamte Tabellendarstellung flimmert (Wahrscheinlich, da dadurch dasselbe Event immer wieder aufgerufen wird).
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#29

AW: Datenformular Oberfläche

  Alt 9. Okt 2012, 05:59
Vielleicht hilft dir ja ein sg.Canvas.TextRect wo der Text dann auch gemalt wird.
Das meinte ich mit "Alles"

Siehe dazu auch http://www.delphipraxis.net/1177538-post5.html
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#30

AW: Datenformular Oberfläche

  Alt 9. Okt 2012, 09:15
Moin...,
versuche mal folgendes:
Delphi-Quellcode:
const tFormat = DT_SINGLELINE or DT_CENTER or DT_VCENTER;
var tText: String;
begin
  with (Sender as TStringGrid) do begin
    tText:= Trim(Cells[ACol, ARow]); // Text der Zelle
    if (gdFixed in State) then begin // fixe Zelle
      // feste Zellen bleiben unberührt
     end // (gdFixed in State)
     else begin // nicht fixe Zellen
      if (gdSelected in State) then begin // markierte Zelle
        Canvas.Brush.Color:= clHighlight; // HintergrundFarbe selektierte Zelle
        Canvas.Font.Color:= clBlack; // Schriftfarbe

       end else begin // normale Zelle
        if Odd(ARow) then // alle ungeraden Zeilen
          Canvas.Brush.Color:= clMoneyGreen // einfärben
         else
          Canvas.Brush.Color:= clInfoBk; //

      end; // <> (gdFixed in State)
      Canvas.FillRect(Rect); // Hintergrund zeichnen
      DrawText(Canvas.Handle, PChar(tText), Length(tText), Rect, tFormat); // Textausgabe
      // formatierte Textausgabe könnte auch über ExtTextOut() erfolgen
    end; // nicht fixe Zellen
  end; // with
end;
Mario
'Lesen Sie schnell, denn nichts ist beständiger als der Wandel im Internet!'
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 5     123 45      


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 22:25 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